Matt Sergeant это тот человек, который первый начал производить подобные тесты. По его замыслу такие простые тесты должны показывать то время, которое занимает некая среда при своем запуске.
Разъяснения и
объяснения |
То, что следует ниже - тесты различных
Web приложений, тестирование проводилось на минимальной программе из возможных -
Hello World. Если у Вас есть желание, то Вы можете провести эти тесты на
своем оборудовании, но при этом следует придерживаться нашей простой
методологии. Исходные коды тестов приведены в секции
тестов.
Следует заметить, что эти тесты не отражают действительное положение дел в реальных
условиях. | |
|
Расшифровка |
|
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]"; }
Языки программирования: разное
|