PHP v5.2 vs PHP v5.1 by Cory Rauch 2006-11-13 Category: Web-Performance
With the release of latest version of PHP, v5.2, one the biggest improvements where performance enhancements. So I decided to benchmark v5.2 vs v5.1 to see the impact of the new changes since I think many are looking forward to this release.
The benchmark was conducted on one
computer where I first loaded PHP 5.1.6 then PHP 5.2.0, and only the PHP software changed. This benchmark was based on the PHP Benchmark
suite available here:
Note: All results displayed in seconds,
so basically you always want a smaller number.
Note: Both PHP versions where on Apache 2.0.53. Ubuntu's PHP 5.1.6 binary package was used for 5.1, and PHP 5.2.0 was compiled from source using default options (-02 Optimization).
The Results
First I ran the Algorithms tests in the Benchmark Suite.
Encoding text data with base64 and utf8_encode
PHP 5.1.6: base64
0.1461
utf8_encode
0.2423
PHP 5.2.0: base64
0.1865
utf8_encode
0.2384
Encoding binary data with base64 and utf8_encode
PHP 5.1.6: base64
0.3142
utf8_encode
1.2548
PHP 5.2.0: base64
0.3006
utf8_encode
0.9067
Encoding binary data with base64 and rawurlencode
PHP 5.1.6: base64
0.3114
rawurlencode
0.9455
PHP 5.2.0: base64
0.2913
rawurlencode
0.7426
Comparing checksums with crc32 and md5
PHP 5.1.6: crc32
0.0010
md5
0.0077
PHP 5.2.0: crc32
0.0009
md5
0.0066
Reading a binary file
PHP 5.1.6: fopen-fread-fclose x1.01 faster
0.0622
file_get_contents
0.0631
PHP 5.2.0: fopen-fread-fclose
0.0638
file_get_contents
0.0509
Testing parse_ini_file vs assoc arrays (see
http://www.sitepoint.com/blog-post-view.php?id=154126)
PHP 5.1.6: parse_ini_file
0.0580
assoc
0.0762
PHP 5.2.0: parse_ini_file
0.0607
assoc
0.0705
As you can see
from the results above, PHP 5.2 won 9 out of 12 tests. The biggest performance advantage came in the utf8_encode on binary data test, PHP 5.2 took about 30% less time to complete. Now we will go to the functions tests.
Strings: Call by ref vs call by value for 1 char string
PHP 5.1.6: Call by Ref
0.0018
Call by Value
0.0016
PHP 5.2.0: Call by Ref
0.0017
Call by Value
0.0016
Strings: Call by ref vs call by value for 10K string
PHP 5.1.6: Call by Ref
0.0065
Call by Value
0.0056
PHP 5.2.0: Call by Ref
0.0084
Call by Value
0.0055
Strings: Call by ref vs call by value for 100K string
PHP 5.1.6: Call by Ref
0.0439
Call by Value
0.0512
PHP 5.2.0: Call by Ref
0.1730
Call by Value
0.1637
Arrays: Call by ref vs call by value
PHP 5.1.6: Call by Ref
0.0014
Call by Value
0.0173
PHP 5.2.0: Call by Ref
0.0016
Call by Value
0.0160
Objects: Call by ref vs call by value
PHP 5.1.6: Call by Ref
0.0039
Call by Value
0.0064
PHP 5.2.0: Call by Ref
0.0040
Call by Value
0.0044
Objects: Return by ref vs by value
PHP 5.1.6: Return by Ref $x =& $f()
0.0009
Return by Value
0.0013
PHP 5.2.0: Return by Ref $x =& $f()
0.0011
Return by Value
0.0013
Objects: Return by partial ref vs by value
PHP 5.1.6: Return by Partial Ref $x = f()
0.0012
Return by Value
0.0013
PHP 5.2.0: Return by Partial Ref $x = f()
0.0012
Return by Value
0.0013
Strings: Calling function with short vs long name
PHP 5.1.6: 1 char function name
0.0003
long 72 char function name
0.0006
PHP 5.2.0: 1 char function name
0.0004
long 72 char function name
0.0008
One the functions test the story is a little different. Where PHP 5.2 won on 4 out of
16 test, tied with PHP 5.1.6 on 4 test, and PHP 5.1.6 won out on 8 tests. Particularly the “Call by ref vs call by value for 100K
string” test was interesting since PHP 5.1.6 took half the amount of time. Next on to the
regex tests.
Searching for substring with strpos vs perl-style
regex
PHP 5.1.6: strpos
0.0015
preg_match
0.0032
PHP 5.2.0: strpos
0.0015
preg_match
0.0064
Searching for substring with perl-style regex vs
ereg
PHP 5.1.6: preg_match
0.0027
ereg
0.0100
PHP 5.2.0: preg_match
0.0024
ereg
0.0069
Regular expression is a tad faster in PHP 5.2.0, winning out on 2 our 4 tests. With one tie and one loss left over. Next to the exception handling tests.
Testing PHP5 exceptions (with 1 throw)
PHP 5.1.6: No exceptions
0.0006
With exceptions - throw 1 exception
0.0236
PHP 5.2.0: No exceptions
0.0012
With exceptions - throw 1 exception
0.0208
Testing PHP5 exceptions (no throw)
PHP 5.1.6: No exception code
0.0005
With exception code which is never invoked
0.0010
PHP 5.2.0: No exception code
0.0006
With exception code which is never invoked
0.0010
PHP v5.2.0 wins on 1 test, and 1 tie. Though PHP 5.1.6 wins on two tests. Next the loops
test.
50 ints array - Testing for loop with -- and ++
PHP 5.1.6: for (--)
0.0494
for(++)
0.0475
PHP 5.2.0: for (--)
0.0493
for(++)
0.0470
50 ints array - Testing for loop with more complicated
-- and ++
PHP 5.1.6: for (--)
0.0494
for(++)
0.0494
PHP 5.2.0: for (--)
0.0414
for(++)
0.0552
50 ints array - foreach (no keys) versus for
PHP 5.1.6: Foreach
0.0326
For
0.0504
PHP 5.2.0: Foreach
0.0248
For
0.0422
50 ints array - foreach (no keys) versus reset and next
PHP 5.1.6: Foreach
0.0308
Reset-Next
0.0501
PHP 5.2.0: Foreach
0.0327
Reset-Next
0.0509
50 ints array - foreach (no keys) vs list(¸$v)=each
PHP 5.1.6: Foreach
0.0258
List-Each
0.1060
PHP 5.2.0: Foreach
0.0250
List-Each
0.1088
50 ints array - foreach (with keys) vs list($k¸$v)=each
PHP 5.1.6: Foreach
0.0340
List-Each
0.1175
PHP 5.2.0: Foreach
0.0293
List-Each
0.1204
Testing foreach versus array_map with php function with
50 int element array
PHP 5.1.6: Foreach
0.0264
Array_Map
0.0583
PHP 5.2.0: Foreach
0.0241
Array_Map
0.0707
50 strings array - Testing for loop with -- and ++
PHP 5.1.6: for (--)
0.0392
for(++)
0.0444
PHP 5.2.0: for (--)
0.0424
for(++)
0.0572
50 ints array - Testing for loop with more complicated
-- and ++
PHP 5.1.6: for (--)
0.0409
for(++)
0.0485
PHP 5.2.0: for (--)
0.0382
for(++)
0.0409
50 strings array - foreach (no keys) versus for(++)
PHP 5.1.6: Foreach
0.0266
For
0.0452
PHP 5.2.0: Foreach
0.0247
For
0.0504
50 strings array - foreach (no keys) versus reset and
next
PHP 5.1.6: Foreach
0.0263
Reset-Next
0.0652
PHP 5.2.0: Foreach
0.0292
Reset-Next
0.0585
50 strings array - foreach (no keys) vs list(¸$v)=each
PHP 5.1.6: Foreach
0.0262
List-Each
0.1103
PHP 5.2.0: Foreach
0.0248
List-Each
0.1102
50 strings array - foreach (with keys) vs
list($k¸$v)=each
PHP 5.1.6: Foreach
0.0322
List-Each
0.1179
PHP 5.2.0: Foreach
0.0318
List-Each
0.1284
Testing foreach versus array_map with php function with
50 string element array
PHP 5.1.6: Foreach
0.0544
Array_Map
0.0281
PHP 5.2.0: Foreach
0.0652
Array_Map
0.0316
Testing foreach with crc32 versus array_map with php
function with 50 element array
PHP 5.1.6: Foreach
0.0815
Array_Map
0.0676
PHP 5.2.0: Foreach
0.0798
Array_Map
0.0631
PHP 5.2.0 wins on 17 out 30 test. Next up the Variables test.
Reading CONSTANTS versus Global Variables
PHP 5.1.6: Constants
0.0003
Globals
0.0063
PHP 5.2.0: Constants
0.0005
Globals
0.0005
+ vs += integer operators
PHP 5.1.6: + integer
0.0005
+= integer
0.0003
PHP 5.2.0: + integer
0.0007
+= integer
0.0006
+ vs += string operators
PHP 5.1.6: + strings
0.0018
+= strings
0.0012
PHP 5.2.0: + strings
0.0016
+= strings
0.0047
+= vs + string operators
PHP 5.1.6: += strings
0.0013
+ strings
0.0012
PHP 5.2.0: += strings
0.0017
+ strings
0.0017
short vs long variable names
PHP 5.1.6: short var name (1 char)
0.0012
long var name (72 chars)
0.0007
PHP 5.2.0: short var name (1 char)
0.0003
long var name (72 chars)
0.0004
PHP 5.2.0 wins out on 3 out of 10 test. Particularly the reading of GLOBALS is faster.
PHP 5.1.6 wins on 6 test though.