On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru








 

Наиболее быстрые

Matt Sergeant
это тот человек, который первый начал производить подобные тесты. По его замыслу такие простые тесты должны показывать то время, которое занимает некая среда при своем запуске.

Разъяснения и объяснения
То, что следует ниже - тесты различных Web приложений, тестирование проводилось на минимальной программе из возможных - Hello World. Если у Вас есть желание, то Вы можете провести эти тесты на своем оборудовании, но при этом следует придерживаться нашей простой методологии. Исходные коды тестов приведены в секции тестов

Следует заметить, что эти тесты не отражают действительное положение дел в реальных условиях.

Наилучшие результаты по типам кодов (хиты в секунду)
HITS/S
/MHZ
ТИП КОДА WEB СЕРВЕР ПРИЛО-
ЖЕНИЕ
HITS/S ОС ПРОЦЕССОР СЕССИ
ОН
НОСТЬ
КЛИ
ЕНТ
ОКРУЖЕ
НИЕ
HTTP КТО ДАТА MHZ
3.545 HTML iis 4.0 static_html 1886 WinNT 4.0 SP4 PII-266 x 2 no ab net 100M 1.0 ks 1999/07 532
1.042 ModPerl Handler apache 1.3.9 mod_perl 1042 Linux/RH 2.2.14 PIII-500 x 2 no ab net 100M 1.0 ct 2000/01 1000
2.563 C Apache Module apache 1.3.6 mod_hello 897 Linux 2.2.7 PII-350 no ab local 1.0 jb   350
1.565 PHP apache 1.3.7dv mod_php 4-alpha 626 Linux 2.2.10 PII-400 no ab net 10M 1.0 rl   400
1.015 ASP VBScript iis 4.0 asp/vbscript 540 WinNT 4.0 SP4 PII-266 x 2 no ab net 100M 1.0 ks 1999/07 532
0.597 Perl CGI apache 1.3.4 mod_perl/registry 537 Linux 2.2.10 PII-450 x 2 no ab net 100M 1.0 dm   900
0.816 Velocigen Perl apache 1.3.9 velocigen_perl 2.0 367 Linux/RH 6.0 PIII-450 no ab local 1.0 sa 1999/12 450
1.372 JSP Java apache 1.3.9 resin 1.1b3 365 Linux/RH 6.0 PII-266 no ab net 100M 1.0 sf 1999/12 266
1.331 Java Servlet apache 1.3.9 resin 1.1b3 354 Linux/RH 6.0 PII-266 no ab net 100M 1.0 sf 1999/12 266
1.158 JSP JavaScript apache 1.3.9 resin 1.1b3 308 Linux/RH 6.0 PII-266 no ab net 100M 1.0 sf 1999/12 266
0.861 Perl Raw CGI apache 1.3.9 mod_perl/registry 229 Linux/RH 6.0 PII-266 no ab net 100M 1.0 sf 1999/12 266
0.420 C CGI Executable apache 1.3.6 C/C++_cgi 210 Linux 2.2.10 PIII-500 no ab local 1.0 ct   500
0.617 Embperl apache 1.3.6 mod_perl/embperl 185 FreeBSD 2.2.7 PII-300 yes ab local 1.0 rr   300
0.530 SSI Include iis 4.0 ssi_inc 159 WinNT 4.0 SP6 PII-300 no scr local 1.0 jc   300
0.536 Jolt enhydra jolt 125 Linux 2.2.7 PII-233 no ab local 1.0 ks 1999/07 233
0.370 ASP PerlScript apache 1.3.4 mod_perl/asp .18 111 Solaris 2.6 PII-300 no ab net 10M 1.0 jc 2000/02 300
0.317 ePerl apache 1.3.4 mod_perl/eperl 2.2.13 95 Solaris 2.6 PII-300 no ab net 10M 1.0 jc 2000/02 300
0.310 Mason apache 1.3.4 mod_perl/mason 93 Solaris 2.6 PII-300 no ab net 10M 1.0 jc 2000/02 300
0.137 RXML roxen 1.3.2 roxen/challenger 41 WinNT 4.0 SP6 PII-300 no scr local 1.0 jc 1999/12 300
0.130 XML, XSLT, etc. apache 1.3.6 mod_perl/asp .19 subs 39 WinNT 4.0 SP6 PII-300 no scr local 1.0 jc
NEW
300


Расшифровка

ct - Chip Turner
dm - Dirk Melchers
jb - Jeffrey Baker
jc - Joshua Chamas
js - John Smirl
ks - Kimbro Staken
rl - Rasmus Lerdorf
rr - Rudy Rucker
rt - Renzo Toma
sa - Shahin Askari
sf - Scott Ferguson
tm - Tom Mornini

ab - ApacheBench, часть инсталяции Apache на UNIX
scr - Socrates, с www.morphtech.com. Результаты этого клиента не верны для IIS + ASP, поскольку процессор не загружается на 100%.

local - Web клиент и сервер загружены на одной машине.
net - Web клиент работает через сеть, с загрузкой меньше 100%, загрузка сервера 100%. Этот тест наиболее оптимальный и показывает наибольшую из возможных производительностей.

 

Методология

  • Web сервера должны находиться в своем нормальном, рабочем, состоянии. Все, что должно быть включено, должно работать, включая протоколирование.

  • На системе должно быть запущено более одно теста, что бы результаты могли попасть в список тестирования по группам ОС и процессорам. Один и тот же язык должен быть использован для более, чем одной тестирумеой системы, что бы попасть в список результатов по типам кодов. Для новых языков, ранее не тестируемых, следует быть предельно внимательным, а результаты принимаются только от нескольких участников тестирвоания. Эти ограничения позволяют получать более правильные результаты для общего сравнения по различным языкам и платформам.

  • Время работы каждого из тестов должно быть примерно 30 секунд.

  • 5-10 клиентов должны использоваться одновременно, предпочтительно с разных машин. Если используются различные машины, то следует убедиться, что загрузка процессора 100 процентов, в противном случае, клиент не будет осуществлять проверку на своей полной мощности. Если такого не происходит, то следует удалить различные тормозящие элементы, к примеру, если идет тестирование через сеть, то следует запустить тест локально.

  • Сессионность определяет использования обозначения отдельных сессий в стиле ASP по установленным кукам и хранящимся данным на сервере.

  • Код и html использованы в попытке закрыть брешь между обычным html и скриптовыми средами выполнения. Смотрите исходные тексты.

  • Используются скрипты работающие по HTTP 1.0.

 

Исходные коды тестов

ASP PerlScript
<%@LANGUAGE=PerlScript%>
<% $Response->Write("Hello "); %>World

# Apache::ASP no sessions config:
#  	PerlSetVar NoState 1
#       PerlSetVar StatScripts 0
#
# Apache::ASP sessions SDBM_File
#	PerlSetVar StateCache 1
#	PerlSetVar StateDir /tmp/hello
#	PerlSetVar AllowApplicationState 0
#
# Apache::ASP sessions DB_File 
#	PerlSetVar StateCache 1
#	PerlSetVar StateDir /tmp/hello
#	PerlSetVar AllowApplicationState 0
#       PerlSetVar StateDB DB_File
#
# testing sessions with ab: because ab does not
# parse cookies, set:
#       PerlSetVar SessionQuery 1
# and call the test script like 
# script.asp?session-id=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
# so a new session won't be created each request.
# This is more reflective of real world use where most
# people use cookies, so the old session will be reused
# after the first request.
#


ASP VBScript
<%@LANGUAGE=VBScript%>
<% Response.Write("Hello ") %>World


C CGI Executable
#include <stdio.h>
void main( void ){   
	printf("Content-Type: text/html\n\n");
	printf("Hello ");
	printf("World!");
}


C Apache Module
// alot more code to actually compile,
// see modperl archives for code under subject 
// Re: mod_perl vs. C execution time.
// From: Ask Bjoern Hansen
module MODULE_VAR_EXPORT hello_module;
static int hello_handler(request_rec *r)
{
  r->content_type = "text/html";
  ap_send_http_header(r);
  ap_rputs("Hello ",r);
  ap_rputs("World!",r);
  return OK;
}


Embperl
[- print OUT "Hello "; -]World

## Optimized with:
##	PerlSetEnv	EMBPERL_OPTIONS 8083
##	PerlSetEnv      EMBPERL_DEBUG 0
## For user sessions on Win32, in %udat, config:
## 	PerlModule	Apache::Session::Win32 ;
##	PerlSetEnv	EMBPERL_SESSION_CLASS	Win32
##
## Please note that print OUT is atypical use in Embperl, but is 
## the mechanism similar to ASP's ->Write() that you can use
## from other modules, when decomping routines out of the main script.


ePerl
#!/usr/local/bin/perl
<: print "Hello "; :>World


HTML
Hello World


Jolt
// enhydra compiles this into a servlet.
<JOLT JAVADEF>
        void setJoltFields(JoltPage page) throws Exception {
                page.data.set("world", "World!");
        }
</JOLT>

Hello
<JOLT JAVACALL="setJoltFields">
</JOLT>
(@world@)


Java Servlet
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Hello extends HttpServlet
{ 
    public void doGet (HttpServletRequest request,
                       HttpServletResponse response)
        throws ServletException, IOException
        {
            PrintWriter out;
            // set content type and other response header fields first
            response.setContentType("text/html");
            // then write the data of the response
            out = response.getWriter();
            out.println("Hello");
            out.println("World");
            out.close();
        }
} 


JSP Java
<%@ page language='java' session='false'
%><% out.print("Hello "); %>World


JSP JavaScript
<%@ page language='javascript' session='false'
%><% out.write("Hello "); %>World


Mason
<%perl>print "Hello ";</%perl>World

# Apache *.conf
PerlRequire    /tmp/mason_handler.pl
AddType         text/html .mas

# mason_handler.pl
package HTML::Mason;
use HTML::Mason;
my $parser = new HTML::Mason::Parser;
my $interp = new HTML::Mason::Interp 
    (
     parser=>$parser,
     comp_root=>'/usr/local/proj/link/site/hello/',
     data_dir=>'/tmp'
     );
my  = new HTML::Mason::ApacheHandler (interp=>$interp);
sub handler { $ah->handle_request(shift); }
1;



ModPerl Handler
package Apache::bench;
sub handler {
    my($r) = shift;
    $r->content_type('text/html');
    $r->send_http_header();
    $r->print('Hello ');
    $r->print('World');
    200;
}
1;


Perl CGI
use CGI;
my $cgi = CGI->new();
print $cgi->header();
print "Hello ";
print "World";


Perl Raw CGI
## does not "use CGI" which can kill normal cgi apps that don't
## cache module loading the way mod_perl and perlex do.
print "HTTP/1.1 200 OK\n";
print "Content-Type: text/html\n\n";
print "Hello ";
print "World";


PHP
<?echo "Hello "?>World


RXML
<pike>output("Hello ");</pike>World


SSI Include
## hello.static is the Hello World static html file
<!--#include file="hello.static"-->


Velocigen Perl
<perl> print "Hello ";</perl>World


XML, XSLT, etc.
<?xml version="1.0"?>
<hello>World</hello>


## XSLT hello.xsl template file
<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="hello">
Hello <xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>


## Apache::ASP XSLT Config
  PerlSetVar NoState 1 
  PerlSetVar XSLT hello.xsl
  PerlSetVar XSLTCacheSize 100


## XMLSubs Apache::ASP config
  PerlSetVar NoState 1 
  PerlSetVar XMLSubsMatch hello
  # and also in XML data file
  <% sub hello { print "Hello $_[1]"; } %>
  # or in global.asa
  sub hello { print "Hello $_[1]"; }


Языки программирования: разное