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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
infected

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Да, с базами Perl медленней работает, а QuoteDB() - вообще вешает всё, но здесь проблема в модулях, так как циклы в перл отрабатывают в несколькко раз быстрее. Это известно давольно давно и сново доказано на вышеизложенных примерах.
P.S. Сам я всё пишу только на перле.

Всего записей: 292 | Зарегистр. 22-03-2002 | Отправлено: 05:34 24-03-2003
russkiy



Запрет на пост
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
да.. но вы забываете учитывать время взлета Перла... или использовался мод_перл..?
 


----------
Мне хочется, чтобы была и абсолютная правда, и окончательная справедливость, чтобы было добро и зло. Но есть только свет и тьма. И они существуют сами по себе.

Всего записей: 593 | Зарегистр. 17-07-2002 | Отправлено: 12:31 24-03-2003
OLEX



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Все предельно ясно! Если Мускль не надо, то только Перл! В 5 раз быстрее работа с файлами это что-то!

----------
Отче Наш, иже еси в моем PC. Да святится имя и расширение Твоё. ENTER.

Всего записей: 3592 | Зарегистр. 09-07-2002 | Отправлено: 12:37 24-03-2003
UsERrorNAME

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Знаю и PHP, и Perl. Но когда есть выбор, всегда пишу на PHP. И меня как-то мало волнует, что мой скрипт будет работать медленнее, если его прогонять какое-то совершенно нереальное в практическом плане количество раз. Я просто жалею свое время и нервы.
(Это мое субъективное мнение)

Всего записей: 167 | Зарегистр. 24-03-2003 | Отправлено: 13:54 24-03-2003
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Согласен с UsERrorNAME, PHP гораздо легче в отладке.


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 16:52 24-03-2003
raven



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

Цитата:
и использовался мод_перл..?

Мой конфиг:
Как здесь + для пёрла я установил DBI  и DBD:MySQL.

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

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Абсолютно безграмотный тест. Во первых время должно учитыватся не скриптом, а тестирующими програмами.  
Во вторых одним вызовом никто не меряет, на каждый скрипт надо минимум свалить по 10.000 запросов с условиями 50,100,200,300 паралельных запросов.  
Вот тогда авторы теста с удивлением обнаружат что перлу надо еще и время чтобы поднять процесс. А при использовании mod_perl начинается сильная жручасть памяти, и при нехватке паследней дикий своп и глобальное падение быстродействия.

Всего записей: 92 | Зарегистр. 03-10-2002 | Отправлено: 10:08 25-03-2003
IntenT



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
raven
А на каких системах проводился тест?
Win Или *NIX?
Потому что Перл под *NIX и Перл от ActiveState - суть разные вещи.

Всего записей: 1584 | Зарегистр. 16-12-2001 | Отправлено: 15:15 25-03-2003
OLEX



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IntenT
Ну дык я думаю, под *никсом перл летать должен... имхо....
Это ведь его родная система

----------
Отче Наш, иже еси в моем PC. Да святится имя и расширение Твоё. ENTER.

Всего записей: 3592 | Зарегистр. 09-07-2002 | Отправлено: 18:05 25-03-2003
batva



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

Цитата:
Время работы:  
Perl - 26.7284330129623  
PHP - 16.126078009605  
PHP намного быстрее + код намного короче...  

 
категорически не согласен!!
 
Не SELECT команды не нужно готовить, а потом запускать, их нужно сразу выполнять.
 
Так же намного быстрее!
 
Таким образом твой код

Код:
 
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->do("CREATE TABLE `test` (`id` TINYINT (4) UNSIGNED)");
$dbh->do("INSERT INTO test (id) VALUES ($_)") for (1..10000);
$dbh->do("DROP TABLE test");
 

 

Цитата:
 
PHP намного быстрее + код намного короче...  
 

Теперь второе опровергнуто, перловый код не уступает в компактности.
 
Теперь первое.
 
Я закинул скрипты на серв. руборда, туда где они и должны жить, в родную UNIX стихию.
 
Смотрим.
 
мой перл вариант:  0.922940969467163
твой перл вариант: 4.36198198795319
php вариант:          1.3040679693222  
 
(кстати, проверь в винде тоже)
 
 
 
 
 
Добавлено
Zuga_Zuga

Цитата:
А при использовании mod_perl начинается сильная жручасть памяти

жручасти не происходит, если скрипт правильно написан.

Всего записей: 12593 | Зарегистр. 07-01-2001 | Отправлено: 19:40 25-03-2003
raven



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

Цитата:
Абсолютно безграмотный тест

Напиши свой и покажи...
Я не говорю, что это всё очень грамотно...
 
Добавлено
batva
Под Win:
Perl: 9.14314699172974
PHP: 10.397187948227

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

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



crazy administrator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
raven
давай что-нибудь с регулярными выражениями замутим, например сложный поиск и замена по шаблону в тексте.

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
мое мнение несмотря на выложенные здесь скрипты и их скорость, считаю что ПЧП быстрее Перла !

Всего записей: 2345 | Зарегистр. 13-02-2002 | Отправлено: 11:36 26-03-2003
VolxV

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Тестировать стоило бы средствами Апача at least, а уж никак не Time::HiRes::time и microtime() в коде. Утилита ab, кстати, далеко не единственная, а по точности и соответствию реальности сильно уступает полноценным stress-тестам.
 
Еще один упущенный нюанс - при тестировании PHP был установлен как модуль или как executable?

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



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

Цитата:
давай что-нибудь с регулярными выражениями замутим

Можно, конечно... Токо пёрл здесь явный лидер, так как все RegXP делались с него, даже синтаксис.
Плюс надо провести тест с MySQL именно с использованием SELECT.
VolxV
Поподробнее плиз или сделай сам...

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

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

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
raven, не понял - про что именно подробнее?
Про варианты подключения PHP, утилиту ab или стресс-тесты?
Вот, кстати, еще одна фишка в PHP - существование Zend Optimizer-а, позволяющего несколько умешать время выполнения php-скриптов. В архитектуре перла я не силен.
 
Если нужна конкретная помощь - ради бога. С задачей ликбеза о соли сути стресс-тестов и их программных реализациях хорошо справляется Гугл.

Всего записей: 898 | Зарегистр. 01-06-2001 | Отправлено: 14:43 26-03-2003
Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
All
Ещё бы интересно было сделать скрипты , которые выполняют те же действия, но на других языках для Web.
например:
ASP и Java Servlet.
есть ли тут знающие их ?


----------
The Abyss - UO, LA2, Ботва, BSFG

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 14:45 26-03-2003
Guderian



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

Цитата:
Zuga_Zuga  
Цитата:Абсолютно безграмотный тест  
Напиши свой и покажи...  

В его словах непреложная истина. Так не тестируют, точнее тестируют, но результат совершенно не показательный. Надо было взять что-то вроде WebStress (от мелкомягких или Paessler), Intel VTune, ACT, настроить его тредов эдак на 100 по пять сокетов на каждый (это где-то для 2xPIII~1GHz, для слабой машины можно пониже). Для полного счастья тестировать лучше с соседней машины, а еще лучше с нескольких соседних. Но это хорошо для абсолютных тестов, для сравнительных можно и на localhost. Вот тогда картина будет близка к истине.
 
Добавлено
Advanced_Guest
Могу протестировать для asp, asp.net. Если будет выработана единая система тестов. MySQL тоже нет. Могу провести тесты с mssql, sapdb, firebird, access.

----------
Продается нужник. Самому очень нужен, кабы не нужда - не продавал бы.

Всего записей: 382 | Зарегистр. 07-05-2002 | Отправлено: 17:45 26-03-2003
IntenT



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Romano
Смешной ты человек.
Тебе же говорят, и цифры показывают, что Perl - быстрее, даже на этих "неправильных" тестах.
 
Плюс прими во внимание сколько лет Прелу, и сколько ПХП - где было больше времени и возможностей оптимизировать производительность.
 
Хотя я могу понять, что единственный язык который знвешь - самый быстрый. Именно потому что его знаешь ты:о)) Как же Я могу знать язык, который не самый-самый??? Меня достоин только самы-из всех самых :о)))

Всего записей: 1584 | Зарегистр. 16-12-2001 | Отправлено: 22:52 26-03-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