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 |
|