Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Perl vs PHP

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4

Открыть новую тему     Написать ответ в эту тему

raven



Черный ворон
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Я и Advanced_Guest решили провести тест на сравненеи скорости работы Perl и PHP. Я писал на Perl, Advanced_Guest соответственно на PHP. PHP установлен как модуль, mod_perl не использовался. WinXP, 256Mb оперативки, процессор Celeron 1000.
 
Вот те тесты, которые мы провели(тесты проводились на localhost):


Вывод на экран 100000 раз строки Hello World
 
Perl:

Код:
#!/usr/bin/perl
 
use strict;
use Time::HiRes qw(time);
 
my $time = Time::HiRes::time;
print "Content-type: text/html\n\n";
for(1..100000){print "Hello World<br>"; }
my $time1 = Time::HiRes::time - $time;
print "Время выполнения скрипта: $time1";

PHP:

Код:
<?php
set_time_limit(0);
 
$start = microtime();
for($i=1;$i<100000;$i++){
     echo 'Hello world<br>';
}
 
$end = microtime();
$aA = explode(' ',$start.' '.$end);
$duration=($aA[2]+$aA[3])-($aA[0]+$aA[1]);
 
echo $duration;
?>

Время работы:
Perl - 12.648187994957
PHP - 13.702283978462
Perl немного быстрее...


Печатаем в файл 1000000 раз строчку Hello World:
Perl:

Код:
#!/usr/bin/perl
 
use strict;
use Time::HiRes qw(time);
 
my $time = Time::HiRes::time;
print "Content-type: text/html\n\n";
open(FILE,"> test.dat");
for(1..1000000){print FILE "Hello World\n"; }
close(FILE);
my $time1 = Time::HiRes::time - $time;
print "Время выполнения скрипта: $time1";

PHP:

Код:
<?php
set_time_limit(0);
 
$start = microtime();
$handle = fopen ("test.dat", "w");
for($i=1;$i<1000000;$i++){
     fwrite($handle, "Hello World\n");
}
fclose($handle);
 
$end = microtime();
$aA = explode(' ',$start.' '.$end);
$duration=($aA[2]+$aA[3])-($aA[0]+$aA[1]);
 
echo $duration;
?>

Время работы:
Perl - 1.52218902111053
PHP - 5.6922219991684
Perl намного быстрее...


Теперь тест с MySQL. Создаем таблицу с 10000 записями.
Perl:

Код:
#!/usr/bin/perl
 
use DBI;
use strict;
use Time::HiRes qw(time);
 
my $dbdriver  = "mysql";
my $hostname  = "localhost";
my $port      = "3306";
my $username  = "";
my $password  = "";
my $basename  = "test";
 
 
 
print "Content-type: text/html\n\n";
my $time = Time::HiRes::time;
my $dbh = DBI->connect("dbi:$dbdriver:$basename:$hostname:$port",
                     $username, $password) || die print "Can't connect";
 
 
my $sqlstatement = "CREATE TABLE `test` (`id` TINYINT (4) UNSIGNED)";
my $sth = $dbh->prepare($sqlstatement);
$sth->execute || die "Can't prepare statement: $DBI::errstr";
 
for(my $i=1;$i<=10000;$i++)
{
$sqlstatement = "INSERT INTO test (id) VALUES ($i)";
$sth = $dbh->prepare($sqlstatement);
$sth->execute || die "Can't prepare statement: $DBI::errstr";
}
 
$sqlstatement = "DROP TABLE test";
$sth = $dbh->prepare($sqlstatement);
$sth->execute || die "Can't prepare statement: $DBI::errstr";
 
$dbh->disconnect;
 
my $time1 = Time::HiRes::time - $time;
print "Время выполнения скрипта: $time1";

Версия by batva:

Код:
#!/usr/bin/perl
 
use DBI;
use strict;
use Time::HiRes qw(time);
 
my $dbdriver  = "mysql";
my $hostname  = "localhost";
my $port      = "3306";
my $username  = "";
my $password  = "";
my $basename  = "test";
 
 
 
print "Content-type: text/html\n\n";
my $time = Time::HiRes::time;
my $dbh = DBI->connect("dbi:$dbdriver:$basename:$hostname:$port",
                     $username, $password) || die print "Can't connect";
 
 
$dbh->do("CREATE TABLE `test` (`id` TINYINT (4) UNSIGNED)");
$dbh->do("INSERT INTO test (id) VALUES ($_)") for (1..10000);
$dbh->do("DROP TABLE test");
 
$dbh->disconnect;
 
my $time1 = Time::HiRes::time - $time;
print "Время выполнения скрипта: $time1";

PHP:

Код:
<?php
set_time_limit(0);
 
$start = microtime();
 
mysql_connect('localhost','root','qwe123');
mysql_select_db('test');
mysql_query('CREATE TABLE test (id TINYINT (4) UNSIGNED)');
 
for($i=1;$i<10000;$i++)     mysql_query('insert into test values('.$i.')');
 
mysql_query('drop table test');
 
$end = microtime();
$aA = explode(' ',$start.' '.$end);
$duration=($aA[2]+$aA[3])-($aA[0]+$aA[1]);
 
echo 'PHP:'.$duration;
?>

Время работы:
Perl: 9.14314699172974  
PHP: 10.397187948227
Perl несмотря на мнение, что пхп лучше работает с MySQL опережает.
 
Делайте выводы господа, прошу не флудить и не оффтопить здесь, иначе топик прикроют
 
Можете присылать свои тесты.
 
Внимание! Ищутся люди, которые могут провести следущий тест:

Цитата:
 Во первых время должно учитыватся не скриптом, а тестирующими програмами.  
Во вторых одним вызовом никто не меряет, на каждый скрипт надо минимум свалить по 10.000 запросов с условиями 50,100,200,300 паралельных запросов.

Всего записей: 992 | Зарегистр. 13-08-2002 | Отправлено: 04:55 24-03-2003 | Исправлено: raven, 14:00 26-03-2003
raven



Черный ворон
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
VolxV
Guderian
Ну не могу я провести такие тесты - нет возможности...
Я ж даже в шапке написал сделайте кто-нить. Я не говорю, что мои тесты суперправильные, но других пока никто не предоложил.

----------
n/a

Всего записей: 992 | Зарегистр. 13-08-2002 | Отправлено: 01:03 27-03-2003
VolxV

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Celeron-1200, 128M,
WinXP, Apache/1.3.22,
PHP 4.2.3 модулем, без Zend Optimizer,
ActivePerl 5.6.1 (без mod_perl),
MS Web Application Stress Tool Version:1.1.293.1
gzip-сжатие не использовалось
 
Client machine:               localhost
Run length:                   00:01:00
Number of threads:            50
Sockets per thread:           5
Number of users:              200
 
 
PHP-скрипт
-----------------------------------------------------
<?
for($i=0;$i<500;$i++){
     echo 'Hello world<br>';  
}  
?>
-----------------------------------------------------
 
Perl-скрипт
-----------------------------------------------------
print "Content-type: text/html\n\n";
for(1..500) {print "Hello World<br>";}
-----------------------------------------------------
 
Page                     Hits      TTFB Avg  TTLB Avg  
======================================================
GET /1.php               2994      3396.59   3404.49  
GET /cgi-bin/1.pl        1596      6876.65   7346.17  
 
 
Time to first byte (in milliseconds)
----------------------------------------------------------------------
                    Perl              PHP
----------------------------------------------------------------------
Average:            6876,65           3396,59
Min:                3417,86           154,53
25th Percentile:    5758,62           1183,00
50th Percentile:    6543,05           1989,21
75th Percentile:    7527,82           5564,47
Max:                21135,26          46869,71
 
Time to last byte (in milliseconds)
----------------------------------------------------------------------
                    Perl              PHP
----------------------------------------------------------------------
Average:            7346.17           3404.49
Min:                3533.46           184.49
25th Percentile:    6021.40           1184.83
50th Percentile:    6892.33           1955.04
75th Percentile:    8270.77           5663.86
Max:                22043.33          46869.98
 
Socket Statistics
----------------------------------------------------------------------
                              Perl         PHP
----------------------------------------------------------------------
Socket Connects:              1763         3144
Total Bytes Sent (in KB):     337,45       586,43
Bytes Sent Rate (in KB/s):    5,60         9,76
Total Bytes Recv (in KB):     12030,49     22551,49
Bytes Recv Rate (in KB/s):    199,75       375,24
 
Connect Failures:             886          2069

Всего записей: 898 | Зарегистр. 01-06-2001 | Отправлено: 08:41 28-03-2003
raven



Черный ворон
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
VolxV
А можно теперь это всё объяснить...

----------
n/a

Всего записей: 992 | Зарегистр. 13-08-2002 | Отправлено: 08:44 28-03-2003
VolxV

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Кстати, действительно было бы интересно протестировать на более-менее реальных приложениях.
 
Для начала могу предложить что-то типа гостевой книги.
В скрипте две части: обработка POST-запроса и вывод в поток отформатированного результата. Работа через MySQL.
 
как хреново одной рукой печатать
 
Добавлено
Болдом выделена основная мысль в виде программы для тестирования от MS.
 
Time to first byte - время получения первого байта ответа,
Time to last byte - время получения последнего байта ответа,
"25th Percentile" означает, что 25% запросов было обработано к указанному времени.
Connect Failures - отказы в подключениях в статистике по сокетам. Отказов на open-close, receive-send в тесте выше не было.
 
Да вроде по-английски написано, должно быть понятно.

Всего записей: 898 | Зарегистр. 01-06-2001 | Отправлено: 08:45 28-03-2003
batva



crazy administrator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VolxV

Цитата:
PHP 4.2.3 модулем, без Zend Optimizer,  
ActivePerl 5.6.1 (без mod_perl),  

 
Мы сравниваем Perl и PHP.
А в твоем случае непонятно что сравнивается...
 
Апачь с  Апачь+CGI ...
 
 
 
 
 

Всего записей: 12593 | Зарегистр. 07-01-2001 | Отправлено: 11:09 28-03-2003
VolxV

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Суть была не в этом. Сильно не в этом.

Всего записей: 898 | Зарегистр. 01-06-2001 | Отправлено: 11:12 28-03-2003
batva



crazy administrator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VolxV

Цитата:
Суть была не в этом. Сильно не в этом.

 
а в чем?

Всего записей: 12593 | Зарегистр. 07-01-2001 | Отправлено: 11:15 28-03-2003
VolxV

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Болдом выделена основная мысль в виде программы для тестирования от MS.


Всего записей: 898 | Зарегистр. 01-06-2001 | Отправлено: 11:18 28-03-2003
batva



crazy administrator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VolxV
ага, теперь понятно.

Всего записей: 12593 | Зарегистр. 07-01-2001 | Отправлено: 11:23 28-03-2003
serge2345

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
> Болдом выделена основная мысль в виде программы для тестирования от MS.
 
Стрессовое тестирование нужно проводить на реальной платформе. Иначе взаимодействие операционной системы (вместе с ее особенностями кеширования, выделения памяти, реализации сетевых протоколов), вебсервера и CGI скрипта (а тут еще будет сказываться время запуска нового процесса в данной операциоеной системе) может дать совершенно непредсказуемые результаты.

Всего записей: 108 | Зарегистр. 07-05-2002 | Отправлено: 19:02 28-03-2003
raven



Черный ворон
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
serge2345
Чтож я думаю надо просить батву тестить на рубордовском сервере. Тогда скрипт будет в никсах, т.к. я думаю, что активпёрл здорово тормозит.
batva
Может так? Токо как тестировать?

----------
n/a

Всего записей: 992 | Зарегистр. 13-08-2002 | Отправлено: 00:55 29-03-2003
serge2345

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
> активпёрл здорово тормозит
 
Это просто так кажется или есть причины так думать? Я никаких тормозов не замечал.

Всего записей: 108 | Зарегистр. 07-05-2002 | Отправлено: 04:22 29-03-2003
raven



Черный ворон
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Это просто так кажется или есть причины так думать?

Тормоза заключаются в том, что ему требуется больше времени, чтобы поднять процесс, чем под никсами. Возможно из-за архитектуры.

----------
n/a

Всего записей: 992 | Зарегистр. 13-08-2002 | Отправлено: 04:25 29-03-2003
serge2345

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А процесс поднимает Перл или Виндовс?

Всего записей: 108 | Зарегистр. 07-05-2002 | Отправлено: 08:42 29-03-2003
IntenT



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А как потестировать время запроса не на локалхоте, а на удаленном серваке под Юниксом, например у своего хостера???

Всего записей: 1584 | Зарегистр. 16-12-2001 | Отправлено: 02:18 19-04-2003
Pupsik

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А никто не пробовал искать?
 
Я уже где-то и не один раз видел аналогичные сравнения...
Так что поискать и... как там на Яндексе: найдется все?
 
Вот по этому поводу например что пишут PHPшники:
http://www.php.net/manual/sv/faq.languages.php

Всего записей: 553 | Зарегистр. 13-03-2003 | Отправлено: 08:23 19-04-2003
apatit



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Pupsik

Цитата:
Вот по этому поводу например что пишут PHPшники:
http://www.php.net/manual/sv/faq.languages.php  

 
Там вроде как никакой конкретики по производительности, в основном общие слова про удобство программирования, читабельность и т.д.
 
Думаю, здесь нужно что-то более объективное, не думаю, что и Perl-овщики в этом смысле уйдут далеко (что касается официальных источников).

----------
http://www.murman.ws/ - Нет очередям в налоговой и на почте! Сэкономим бумагу.

Всего записей: 1169 | Зарегистр. 09-10-2001 | Отправлено: 10:56 19-04-2003
raven



Черный ворон
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Pupsik
apatit
До сих пор мы так и не смогли провести реальные тесты. А именно mod_perl vs mod_php из-под никсов и мерять сторонними программами. А простые тесты каждый может сделать сам. ^__^

----------
n/a

Всего записей: 992 | Зарегистр. 13-08-2002 | Отправлено: 14:03 19-04-2003
easyman



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
линк по теме
 
http://www.bagley.org/~doug/shootout/craps.shtml

Всего записей: 483 | Зарегистр. 25-10-2002 | Отправлено: 01:28 20-04-2003
HQStorm

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А именно mod_perl vs mod_php  

А вот это уже не равные условия.  
На равных это  
perl vs mod_php
или  
mod_perl vs mod_php + mod_accel
 
Так что либо оба с акселераторами, либо оба без.  

Всего записей: 66 | Зарегистр. 31-03-2003 | Отправлено: 19:57 22-04-2003
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4

Компьютерный форум Ru.Board » Интернет » Web-программирование » Perl vs PHP


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru