PHP 4.4.8, PHP5.2-dev, PHP5.3-dev, PHP6.0-dev – test
Od jakiegoś czasu zastanawiałem się jaka jest faktyczna różnica w szybkości działania poszczególnych wersji PHP. Przeglądając zasoby Internetu natrafiłem na ciekawą stronę - http://shootout.alioth.debian.org/ zawierającą porównanie wydajności różnych języków w tych samych zastosowaniach. Niestety testy zamieszczone na w/w witrynie ograniczają się tylko do jednej wersji PHP, więc nie jest to, to czego poszukiwałem. Postanowiłem jednak skorzystać z zgromadzonych tam skryptów i przeprowadzić własne testy porównawcze.
W tym celu wybrałem następujące pięć testów:
- binary-trees – operacje na drzewkach binarnych
- n-body – bliżej nie określone “coś”
- recursive – rekurencyjne liczenie wartości ciągu fibonacciego, funkcji Ackemanna oraz funkcji Tak
- startup – wyświetlanie hello world
- sum-file – sumowanie 10 000 liczb wpisanych na stdin
Do testów wykorzystany został laptop Dell Latitude D630C z procesorem Intel Core 2 Duo 2.2GHz z 4GB RAM. Jako system operacyjny zostało wykorzystane Gentoo 2008.0_beta z LiveDVD (Linux livecd 2.6.24-gentoo-r5 #1 SMP Wed Apr 23 22:46:44 UTC 2008 x86_64 Intel(R) Core(TM)2 Duo CPU T7500 @ 2.20GHz GenuineIntel GNU/Linux). Do kompilacji zostało wykorzystane GCC w wersji x.x (jak sprawdzę to napiszę). Kompilacja przebiegała z domyślnym zestawem parametrów, w sposób maksymalnie prosty:
./configure –without-pear –prefix=/root/phps/php-x.x
make
make install
Kompilacji zostały poddane najnowsze wersje kodu źródłowego pobranego z http://snaps.php.net (za wyjątkiem PHP4, którego rozwój został zaprzestany), i są to:
- php5.2-200806211230
- php5.3-200806211230
- php6.0-200806211230
- php-4.4.8
Poniżej znajdują się wyniki pomiarów czasu poszczególnych etapów dla każdej z wersji PHP (czas podany w sekundach):
W wyniku kompilacji otrzymałem:
livecd bin # /root/phps/php4.4.8/bin/php -v
PHP 4.4.8 (cgi) (built: Jun 21 2008 17:46:03)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
livecd bin # livecd bin # /root/phps/php5.2-dev/bin//php –v
PHP 5.2.7-dev (cli) (built: Jun 21 2008 17:56:40)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
livecd bin # livecd bin # /root/phps/php5.3-dev/bin/php -v
PHP 5.3.0-dev (cli) (built: Jun 21 2008 18:03:34)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2008 Zend Technologies
livecd bin # livecd bin # /root/phps/php6.0-dev/bin/php -v
PHP 6.0.0-dev (cli) (built: Jun 21 2008 20:39:02)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2008 Zend Technologies
Test polegał na wykonaniu odpowiednio:
- wywołaniu skryptu binarytrees.php z parametrami o wartości od 1 do 15 oraz zmierzeniu całkowitego czasu wykonania
- wywołaniu skryptu n-body.php 1000 razy z parametrem równym 100 oraz zmierzeniu całkowitego czasu wykonania
- wywołaniu skryptu startup.php oraz zmierzeniu całkowitego czasu wykonania
- wywołanie skryptu sum-file.php 1000 razy wraz z przekazaniem na stdin 10 000 liczby oraz zmierzeniu całkowitego czasu wykonania
- wywołanie skryptu recursive.php z parametrami o wartości od 1 do 8 oraz zmierzeniu całkowitego czasu wykonania
Poniżej zostały zaprezentowane wyniki poszczególnych wywołań
Wyniki testu nie zaskoczyły mnie specjalnie, PHP4 wbrew powszechnemu, często jeszcze spotykanego mitu wcale nie jest dużo szybsze od PHP5, a nawet jak się okazuje jest o wiele wolniejsze.
Zgodnie z oczekiwaniami wraz z rozwojem PHP znacznie wzrasta czas startu interpretera, co jednak ma znaczenie tylko i wyłącznie w przypadku wykorzystywania PHP w trybie CLI lub CGI. Na szczęście oba te przypadki można zignorować, bowiem tryb CLI nie służy do bezpośredniej obsługi tysięcy jednoczesnych zapytań, natomiast CGI ustępuje pola Fast-CGI, dla którego czas startu interpretera nie odgrywa tak istotnej roli.
Zdziwiło mnie natomiast zachowanie PHP6 w przypadku funkcji rekurencyjnych, w przypadku których jego wydajność była znacznie poniżej oczekiwań.
Oczywiście do premiery PHP6 jeszcze sporo czasu, i pozostaje mieć nadzieje, iż zostanie to poprawione.


ciekawy test
że też Ci się chciało tak bawić 