|
4.19 Jak zoptymalizować kod napisany w PHP?Ostatnia modyfikacja: 2002-07-23 14:29:06- Podmiana znaków: jeśli wiemy co podmieniamy i gdzie nie używajmy funkcji operujących na wyrażeniach regularnych. - Nie powtarzaj się! Jeśli wykonujesz jakieś działania a ich wynik będzie potrzebny kilkukrotnie zapisz go w zmiennej i później wykorzystaj. Dotyczy to również operacji wykonywanych przy każdym przebiegu pętli. np: for($i=0; $i < count($i); $i++) można zastąpić wywołaniem foreach bądź wcześniej zapamiętać ile razy będziemy musieli wykonać pętle. - Uważaj by nie tworzyć zbyt wielu zmiennych tymczasowych (np aktualny numer indeksu przy przejściu pętli). Pamiętaj, że w PHP dostępne są referencje więc nie zawsze musisz tworzyć kopii zmiennej by użyć jej wewnątrz np jakiejś funkcji. Stworzenie własnej notacji bądź przyjęcie jakiejś określonej pozwoli też nie zgubić się w gąszczu zmiennych. - Nie daj się skusić na $array = file(). To bardzo wygodne, lecz tylko jeśli wiemy co wczytujemy do tablicy i ile tego jest. Domyślnie jeden skrypt PHP ma prawo skonsumować do 8M pamięci, więc nawet prosta analiza logów może skończyć się tragicznie. Znacznie lepszym rozwiązaniem jest zastosowanie pętli while() w połączeniu z funkcją fgets(). - Ustaw error_reporting na E_ALL w php.ini. Znawcy problemu twierdzą, że dopiero wówczas rozpoczyna się prawdziwa przygoda z PHP :-) - Ciapki pojedyncze vs. podwójne: gdzie tylko możesz stosuj ciapki pojedyncze, gdyż string nimi objęty jest uwolniony od dalszego zainteresowania parsera, który milcząco zakłada że może zostawić go w spokoju, natomiast gdy ciapki są podwójne parser jest bardziej dociekliwy i analizuje zawartość stringa próbując znaleźć w nim zmienne lub znaki specjalne. - Nie mieszaj ogórków z dżemem, czyli HTML-a z PHP-em: jeśli nie zdecydowałeś się na korzystanie z szablonów, a co za tym idzie odseparowanie logiki od warstwy prezentacyjnej staraj się aby html był poza zasięgiem znaczników <?php ?> - Pamiętaj, iż jeśli przygotowałeś kilka rozwiązań i nie wiesz które z nich będzie działać szybciej, po prostu to zmierzyć. Patrz tez FAQ 6.14. - Sprawdź, które części twojego skryptu są najwolniejsze i pomyśl jak można by je przyspieszyć. Jeśli np. operujesz na wielu plikach tekstowych to może warto użyć bazy danych. Jeśli twoje zapytania wykonują się za długo to spróbuj znaleźć sposób by je ulepszyć (np zamiast SELECT kod FROM adresy WHERE miasto='Wroclaw' AND ulica='Szczytnicka' lepiej napisać SELECT kod FROM adresy WHERE ulica='Szczytnicka' AND miasto='Wroclaw' bo mniej mamy ulic 'Szczytnicka' w Polsce niż ulic we Wroclawiu), możesz też użyć polecenia EXPLAIN w MySQL'u by zobaczyć jak działa twoje zapytanie. - Nie próbuj zabijać muchy z armaty - część danych istotnie musi być generowana automatycznie dla każdego wchodzącego na stronę. Niektóre jednak informacje rzadko się zmieniają - np. kto danego dnia ma imieniny, czy całodzienna prognoza pogody. Możesz więc te informacje generować tylko raz na dzień, bądź co najwyżej cyklicznie co kilka godzin, a nie z każdym wejściem gościa na twoją stronę. Szczególnie wyczulamy na nadmiarowe korzystanie z nie najszybszych bibliotek (np GD). W tym momencie tracąc trochę miejsca na naszym dysku twardym zyskujmy sporo mocy procesora. - Software: jeśli musisz znacznie przyspieszyć wykonywanie skryptów a nie masz na to czasu możesz użyć programów temu przeznaczonych. Zestawienie kilku popularnych aplikacji znajdziesz na stronie http://php.weblogs.com/php_debugger_cache - Nie bój się czytelnego formatowania kodu. Fakt że dla maszyny to wszystko jedno (czasem nawet przełknie brak nawiasu zamykającego blok warunkowy), lecz pamiętaj że im czytelniej tym łatwiej wypatrzyć błędy i niedociągnięcia. Jeśli powyższe wskazówki sprawiły że twój skrypt jest szybki jak burza to wspaniale, a jeśli nie... Cóż, prześpij się jeszcze jedną noc i zacznij wszystko od początku. Wiele przydatnych wskazówek można znaleźć pod adresem http://phplens.com/lens/php-book/optimizing-debugging-php.php Powrót do indeksu |