background

Optymalizacja kodu PHP

W tym krótkim artykule pozwolę sobie wziąć na tapetę pisanie optymalnego kodu w dość popularnym języku tworzenia stron WWW. Proste kroki pozwolą, aby strona generowana była znacznie szybciej niż dotychczas. Omówione zostanie to w punktach według poprawy wydajności w przeprowadzonych testach. Zatem:

Pętle zamiast:

for($i=0;$i<count($array);$i++){}

Używaj:

$end_i = count($array);
for($i=0;$i<$end_i;$i++){}

Optymalizacja samego kodu odpowiedzialnego za pętle może przynieść wymierne korzyści, zwłaszcza przy dużych tablicach, a tyczy się przeprowadzenia kalkulacji długości trwania pętli poza nią. Drugi warunek pętli sprawdzany jest przy każdej iteracji wraz z wykonaniem kodu odpowiedzialnego za zliczanie elementów występującym w tablicy. Oczywistym jest, że zliczanie można przeprowadzić raz i wykorzystać wynik w każdej iteracji, o ile kod w ciele pętli nie zmieni zawartości tablicy. Rożnica przy 1000 elementach może wynieść nawet +2090%.

Najlepszy sposób po iterowaniu po tablicy asocjacyjnej
Przyjrzyjmy się linijką poniżej:

foreach($aHash as $val) $val = $val . "a";
foreach($aHash as $key=>$val) $key = $val . "a";
while(list($key) = each($aHash)) $aHash[$key] .= "a" ;

a poniższym:

$key = array_keys($aHash);
$size = sizeOf($key);
for ($i=0; $i<$size; $i++) $aHash[$key[$i]] = $aHash[$key[$i]]. "a";

Pierwsze listingi są wolniejsze od drugiego do 10 razy - jako programista żałuje ponieważ prezentują się on znacznie lepiej.

Magia podwójnego cudzysłowowa
Podwójny cudzysłów pozwala na łatwe umieszczanie treści w wypisywanym ciągu jednakże, jeśli przyjrzymy się

$tmp[] = 'aa $ aaaa $ aaaa $ a';
$tmp[] = "aa $ aaaa $ aaaa $ a";

Pierwsza linijka wykona się do 6 razy szybciej niż druga, dopiero po dodaniu ukośników przebieg obu linijek jest zbliżony. Po za przypadkiem pojedynczego $ nie ma różnic pomiędzy obiema metodami.

 

.. ciąg dalszy nastąpi