Optymalizacja skryptów PHP

Autor: Tomasz Jędrzejewski
Data publikacji: 29.12.2002, 15:08 | Ostatnia modyfikacja: 19.09.2006, 14:54

UmiejÄ™tność programowania to nie tylko wiedza o tym, że w danym jÄ™zyku jest to a to, że zawiera takie, a takie funkcje. UmiejÄ™tność programowania to umiejÄ™tność wykorzystywania możliwoÅ›ci jÄ™zyka do tworzenia algorytmów oraz wiedza, jak wszystko zoptymalizować, by dziaÅ‚aÅ‚o z przyzwoitÄ… prÄ™dkoÅ›ciÄ….

Problem optymalizacji zostaÅ‚ dostrzeżony jeszcze przed stworzeniem pierwszych komputerów. ÓwczeÅ›ni matematycy, zajmujÄ…cy siÄ™ problematykÄ… obliczalnoÅ›ci różnych dziwnych rzeczy, stworzyli wtedy podstawy algorytmiki. Kiedy ludzkość miaÅ‚a wreszcie do swej dyspozycji jakieÅ› maszyny liczÄ…ce, byÅ‚y one znacznie wolniejsze od dzisiejszych kalkulatorów kieszonkowych. Problem znalezienia jak najszybszego algorytmu rozwiÄ…zujÄ…cego konkretne zadanie byÅ‚ miaÅ‚ wtedy najwyższy priorytet.

Choć dzisiaj komputery sÄ… nieporównywalnie szybsze, niż 70 lat temu, choć potrafiÄ… symulować efekty detonacji bomby atomowej, optymalizacja ani trochÄ™ nie straciÅ‚a na znaczeniu. Okazuje siÄ™ bowiem, że tak naprawdÄ™ wydajność komputera jest jedynie dodatkiem, a prawdziwe zmartwienie stanowi tzw. zÅ‚ożoność obliczeniowa algorytmów. Nie wdajÄ…c siÄ™ w rozwlekÅ‚e szczegóÅ‚y, pragnÄ™ pokazać to na prostym przykÅ‚adzie: weźmy sobie trzy algorytmy sortowania: Bubble Sort, Selection Sort oraz Quick Sort. Wszystkie one dajÄ… poprawne rezultaty, ale na co dzieÅ„ wykorzystuje siÄ™ tylko trzeci z nich. Dlaczego? Okazuje siÄ™, że pierwsze dwa majÄ… Å›redniÄ… zÅ‚ożoność rzÄ™du O(n^2), co oznacza, że wraz ze wzrostem iloÅ›ci danych (n), czas wykonywania roÅ›nie kwadratowo. Tymczasem dla Quick Sort wynosi ona O(n log n) - czas wzrasta tutaj tylko logarytmicznie, czyli niesamowicie wolno, zwÅ‚aszcza dla dużych wartoÅ›ci n. Wydaje Ci siÄ™, że gÅ‚oszÄ™ herezje, podważajÄ…c sens prac nad nowymi procesorami i kierujÄ…c siÄ™ w stronÄ™ matematyki? Nic bardziej mylnego! Swego czasu przeprowadziÅ‚em prosty eksperyment: daÅ‚em każdemu z tych algorytmów do posortowania listÄ™ 100 000 liczb; komputer wyposażony byÅ‚ w procesor AMD Sempron 2200+. Quick Sort daÅ‚ poprawny wynik już po trzech sekundach, Selection Sort po upÅ‚ywie póÅ‚torej minuty, a w przypadku Bubble Sort czas ten wynosiÅ‚ jakieÅ› siedem minut. Zwróć uwagÄ™: ten sam sprzÄ™t, inne algorytmy, a jaka różnica w wynikach!

PrzenieÅ›my to teraz na grunt PHP. Wprawdzie maÅ‚o który skrypt zajmuje siÄ™ rozwiÄ…zywaniem skomplikowanych problemów decyzyjnych, lecz z drugiej strony przez takie piekÅ‚o przechodzi sam interpreter. Musimy uÅ›wiadomić sobie, że byle odwoÅ‚anie do zmiennej uruchamia caÅ‚y skomplikowany mechanizm przeszukiwania listy zmiennych globalnych, lokalnych itd. tylko po to, aby pobrać wartość. Musimy wiedzieć, że utworzenie nowej zmiennej wymaga, aby systemy zarzÄ…dzania pamiÄ™ciÄ… przydzieliÅ‚y jej trochÄ™, co również nie jest takie proste. UmiejÄ™tnie piszÄ…c skrypty, poznajÄ…c sztuczki i triki, jesteÅ›my w stanie wycisnąć wiÄ™cej z serwera WWW. Jak miÅ‚o jest wszak zobaczyć, że nasza witryna bez trudu radzi sobie z liczbÄ… 10 000 odwiedzin dziennie, a kolegi ledwo dyszy już przy tysiÄ…cu, a on sam żali siÄ™, że musi kupić szybsze maszyny :). W myÅ›l powyższego wprowadzenia pamiÄ™taj, im wiÄ™cej zainwestujesz w optymalizacje swego skryptu, tym mniej i rzadziej wydasz później na rozbudowÄ™ serwera, aby mógÅ‚ przyjąć nowy ruch.

Potrzebne oprogramowanie

Aby rozpocząć optymalizacjÄ™ skryptów PHP, warto zaopatrzyć siÄ™ w kilka przydatnych narzÄ™dzi. Pierwszym z nich bÄ™dzie aplikacja do profilowania kodu. DziÄ™ki niej poznasz czas wykonywania poszczególnych fragmentów skryptu z dokÅ‚adnoÅ›ciÄ… do tysiÄ™cznych części sekundy. Można wprawdzie korzystać tutaj z usÅ‚ug samego PHP, lecz musimy być Å›wiadomi, iż nasz pomiar bÄ™dzie odrobinÄ™ niedokÅ‚adny z powodu wliczenia doÅ„ także czasu wykonywania samych funkcji liczÄ…cych czas. Innym rozwiÄ…zaniem jest instalacja specjalnego, darmowego moduÅ‚u XDebug. Pierwsze jego wersje zostaÅ‚y opracowane jeszcze dla PHP 4, lecz najnowsze wydania obsÅ‚ugujÄ… również PHP 5. W przypadku systemu Windows instalacja jest dziecinnie prosta. ÅšciÄ…gamy ze strony projektu odpowiedni DLL i umieszczamy go w katalogu /php5/ext. Później otwieramy plik php.ini, dopisujemy w sekcji extensions linijkÄ™:

zend_extension_ts = php_xdebug.dll

i całość kończymy restartem serwera WWW.

Autor: Tomasz "Zyx" Jędrzejewski, www.zyxist.com.

Do góry

Waszym zdaniem:

Nikt jeszcze nie dodał swojego komentarza. Możesz być pierwszy!


Twoim zdaniem:

Reklama

banner

Partnerzy

CityDesign.pl
phpSolutions