Назад в раздел
Наиболее быстрые
div.main {margin-left: 20pt; margin-right: 20pt}
Наиболее быстрые
Разъяснения и
объяснения |
То, что следует ниже -
тесты различных Web приложений, тестирование проводилось на
минимальной программе из возможных - Hello World. Если у Вас
есть желание, то Вы можете провести эти тесты на своем оборудовании,
но при этом следует придерживаться нашей простой
методологии. Исходные коды тестов приведены в секции
тестов. Ваши результаты можно послать в лист рассылки
modperl@apache.org с копией автору joshua@chamas.com.
Matt
Sergeant это тот человек, который первый начал производить
подобные тесты. По его замыслу такие простые тесты должны показывать
то время, которое занимает некая среда при своем запуске.
Следует заметить, что эти тесты не отражают действительное положение дел в
реальных условиях. | |
|
Расшифровка |
|
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/htmlnn");
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 OKn";
print "Content-Type: text/htmlnn";
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]"; }
|
|
|
|