parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

тест Perl vs Parser

Niko 12.09.2004 19:13

Прихотнулось тут сделать тесте Perl vs Parser (в связи наметевшейся тендеции миграции от первого ко второму). Задача стояла проверить как будет себя чуствовать система при постоянной нагрузке, так как счас мой сайт останавливают из большой нагрузки на сервер (используется перл).
Тест простой - загрузить код, выполнить, сделать редирект. и так итерация 100 раз. Парсер выполнялся в режиме cgi и модуля.
Все проводится на виндовс машине (целерон 1000, 256мег, апач 1.3.1, Парсер 3.1.3 без XML SQL, ActivePerl 5.6.1)

Результы (усредненные, запуск 3 раза, перед каждым запуском делается перезагрузка сервера и браузера, перед сменой языка - перезагрузка компьютера).

Parser в режиме cgi - 42 секунды.
Parser в режиме mod - 38 секунды.
Perl в режиме cgi - 30 секунд.

Какие будут мнения?

Вот коды теста
Parser
$count($form:count)
^if(def $count){
$time[$form:time]
	^if($count<100){
		^count.inc[]
#		$response:location[/test.html?count=$count&time=$time]
		$response:refresh[
		 $.value[0]
		 $.url[/test.html?count=$count&time=$time]
	]
	}{
		$date[^date::now[]]
		$time - ^date.sql-string[]
	
	}
}{
	$time[^date::now[]]
#$response:location[/test.html?count=$count&time=^time.sql-string[]]
		$response:refresh[
		 $.value[0]
		 $.url[/test.html?count=$count&time=^time.sql-string[]]
	]

}
Перл
#!/usr/local/bin/perl


if($ENV{'REQUEST_METHOD'} eq "POST") {$_ = <STDIN>} else {$_ = $ENV{'QUERY_STRING'}};
@pairs=split(/&/, $_);
my %FORM;
foreach $pair (@pairs)
{
  my($name, $value) = split(/=/, $pair);
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  if ($allow_html != 1)
  {
    $value =~ s/<([^>]|\n)*>//g;
  }
  # убираем пробелы с обоих сторон
  $value=~s/^\s+//;
  $value=~s/\s+$//;
  $FORM{$name} = $value;
}

#print "Content-type: text/html\n\n";
$count=$FORM{count} || 0;
$time=$FORM{time};

if($count)
{
	if($count<100)
	{
		$count++;
		print "Refresh: 0;url=http://urlplus/cgi-bin/test.pl?count=$count&time=$time\n\n";
	}
	else
	{
		print "Content-type: text/html\n\n";
		print "$time - ".time();
	}
}
else
{
	$count=1;
	$time=time();
	print "Refresh: 0;url=http://urlplus/cgi-bin/test.pl?count=$count&time=$time\n\n";
}

exit;