Jak kodować optymalnie i wydajnie?
Częstym błędem programistów jest to, że nie zawsze systematycznie poszerzają swoją wiedzę o nowe metody optymalnego i wydajnego programowania. Poniżej przedstawiamy porównanie wydajności różnych fragmentów kodu dla różnych wersji PHP. Na pierwszy rzut oka zaobserwować można jakie praktyki warto zacząć stosować w naszej pracy, a jakich najlepiej unikać.
Łączenie ciągów znaków (Ilość powtórzeń: 10000000)
Wersja PHP |
5.2.17
|
5.3.29
|
5.4.43
|
5.5.28
|
5.6.12
|
7.0.11
|
'Hello ' . $tttt |
4.357 |
7.356 |
3.209 |
3.171 |
3.272 |
1.728 |
"Hello $tttt" |
4.329 |
7.888 |
3.605 |
3.284 |
3.412 |
1.590 |
"Hello {$tttt} " |
4.276 |
7.593 |
3.642 |
3.538 |
3.305 |
1.457 |
'Hello ' . $tttt . ' -- ' . $tttt |
7.468 |
13.52 |
6.271 |
6.264 |
6.133 |
3.801 |
"Hello $tttt -- $tttt" |
6.752 |
12.896 |
6.014 |
5.765 |
5.597 |
2.832 |
'Hello ' . $tttt . ' -- ' . $tttt . ' -- ' . $tttt . ' -- ' . $tttt |
13.869 |
25.731 |
12.313 |
12.381 |
11.851 |
7.819 |
"Hello $tttt -- $tttt -- $tttt -- $tttt" |
12.028 |
22.618 |
11.241 |
10.365 |
10.570 |
5.017 |
Porównania (Ilość powtórzeń: 10000000)
Wersja PHP |
5.2.17
|
5.3.29
|
5.4.43
|
5.5.28
|
5.6.12
|
7.0.11
|
'111' == 111 |
2.334 |
3.969 |
1.959 |
1.947 |
2.005 |
1.224 |
'111' === 111 |
1.492 |
2.541 |
1.01 |
1.046 |
0.993 |
0.516 |
'111' != 111 |
2.331 |
4.045 |
1.94 |
1.997 |
2.018 |
1.189 |
'111' !== 111 |
1.517 |
2.58 |
0.987 |
1.004 |
0.995 |
0.514 |
'false' == false |
1.74 |
2.904 |
1.158 |
1.155 |
1.209 |
0.681 |
'false' === false |
1.511 |
2.469 |
0.983 |
0.991 |
1.000 |
0.519 |
'false' != false |
1.72 |
2.867 |
1.159 |
1.155 |
1.185 |
0.677 |
'false' !== false |
1.476 |
2.506 |
0.987 |
1.08 |
1.026 |
0.53 |
'1' == 0 |
2.279 |
3.613 |
1.731 |
1.71 |
1.751 |
1.093 |
'1' === 0 |
1.495 |
2.477 |
0.987 |
0.987 |
1.047 |
0.519 |
'1' != 0 |
2.370 |
3.655 |
1.727 |
1.708 |
1.758 |
1.141 |
'1' !== 0 |
1.489 |
2.592 |
0.989 |
1.081 |
0.997 |
0.523 |
if($d) |
1.277 |
1.946 |
0.771 |
0.782 |
0.77 |
0.248 |
if($d !== false) |
1.452 |
2.399 |
0.964 |
1.048 |
0.962 |
0.534 |
if(!$d) |
1.248 |
1.945 |
0.771 |
0.781 |
0.769 |
0.254 |
if($b) |
1.296 |
1.944 |
0.771 |
0.787 |
0.769 |
0.249 |
if($b !== false) |
1.485 |
2.402 |
0.968 |
0.972 |
0.962 |
0.549 |
if(!$b) |
1.248 |
1.945 |
0.772 |
0.781 |
0.763 |
0.253 |
if($b > 0) |
1.725 |
2.500 |
0.96 |
0.973 |
0.979 |
0.529 |
if($b != 0) |
1.731 |
2.448 |
0.972 |
0.968 |
0.962 |
0.500 |
if($b !== 0) |
1.477 |
2.464 |
0.984 |
0.99 |
0.978 |
0.559 |
if(0 < $b) |
1.713 |
2.519 |
0.960 |
0.968 |
0.957 |
0.505 |
if(0 != $b) |
1.742 |
2.601 |
0.960 |
0.972 |
0.960 |
0.508 |
if(0 !== $b) |
1.478 |
2.549 |
1.013 |
0.985 |
1.015 |
0.541 |
if(isset($b)) |
1.761 |
2.411 |
1.015 |
1.019 |
1.081 |
0.512 |
if(empty($b)) |
1.801 |
2.490 |
1.039 |
1.088 |
1.035 |
0.553 |
if(!empty($b)) |
1.735 |
2.487 |
1.04 |
1.054 |
1.036 |
0.549 |
if([]) |
1.301 |
1.946 |
0.774 |
0.814 |
0.767 |
0.250 |
if(['yyy']) |
1.249 |
2.038 |
0.773 |
0.874 |
0.771 |
0.248 |
if(false) |
1.162 |
1.759 |
0.664 |
0.672 |
0.657 |
0.249 |
if(0) |
1.142 |
1.74 |
0.662 |
0.664 |
0.658 |
0.249 |
if(null) |
1.107 |
1.889 |
0.665 |
0.673 |
0.658 |
0.250 |
isset (Ilość powtórzeń: 10000000)
Wersja PHP |
5.2.17
|
5.3.29
|
5.4.43
|
5.5.28
|
5.6.12
|
7.0.11
|
if(isset(5555)) |
1.583 |
2.860 |
1.164 |
1.148 |
1.116 |
0.724 |
if(isset($GLOBALS["foo"])) |
2.47 |
4.984 |
1.492 |
1.475 |
1.385 |
0.867 |
if(isset($_SESSION["foo"])) |
2.01 |
3.989 |
1.362 |
1.304 |
1.255 |
0.757 |
isset vs key_exist (Ilość powtórzeń: 10000000)
$array1 = array ( 'a' => 'aa', 'b' => 'bb', 'c' => 'cc', 'd' => 'dd', )
Wersja PHP |
5.2.17
|
5.3.29
|
5.4.43
|
5.5.28
|
5.6.12
|
7.0.11
|
if(isset($array1['c'])) |
1.898 |
3.145 |
1.169 |
1.147 |
1.186 |
0.626 |
if(empty($array1['c'])) |
1.916 |
3.275 |
1.144 |
1.144 |
1.147 |
0.625 |
if(array_key_exists('c', $array1)) |
4.043 |
11.875 |
3.690 |
3.691 |
3.375 |
1.112 |
$array2 = array ( 0 => 'aa', 1 => 'bb', 2 => 'cc', 3 => 'dd', )
Wersja PHP |
5.2.17
|
5.3.29
|
5.4.43
|
5.5.28
|
5.6.12
|
7.0.11
|
if(isset($array2[3])) |
1.543 |
2.87 |
1.085 |
1.073 |
1.071 |
0.682 |
if(empty($array2[3])) |
1.761 |
2.85 |
1.174 |
1.124 |
1.102 |
0.697 |
if(array_key_exists(3, $array2)) |
3.5 |
10.268 |
3.324 |
3.304 |
3.149 |
1.055 |
deklaracja zmiennych (Ilość powtórzeń: 10000000)
Wersja PHP |
5.2.17
|
5.3.29
|
5.4.43
|
5.5.28
|
5.6.12
|
7.0.11
|
$rrr = $test[0] |
2.135 |
4.232 |
1.394 |
1.383 |
1.347 |
0.621 |
$rrrr = $GLOBALS["foo"] |
3.339 |
7.33 |
1.933 |
1.872 |
1.794 |
0.891 |
$rrrr = $_SESSION["foo"] |
7.513 |
14.095 |
6.504 |
5.779 |
6.811 |
4.740 |
reset vs array_shift vs current vs array[0]
Liczba powtórzeń w pętli: 30000
Ilość elementów w tablicy: 100000
array_shift($obj->arr) |
6.1289 |
reset($obj->arr) |
0.0039 |
current($obj->arr) |
0.0012 |
$obj->arr[0] |
0.0007 |
array_shift($obj->getArr()) |
9.31672 |
reset($obj->getArr()) |
7.20533 |
current($obj->getArr()) |
0.00147 |
$obj->getArr()[0] |
0.0019 |