W tym poradniku chciałbym poruszyć kwestię optymalizacji plików PHP. Przedstawię w nim bardzo ciekawe darmowe narzędzie PHP Comments Cleaner. Program został stworzony do usuwania z kodu zbędnych elementów tj. komentarzy oraz pustej przestrzeni (nadmiarowych spacji). Rezultatem działania programu jest plik wynikowy, który cechuje się znacznie zmniejszoną wagą oraz krótszym czasem wykonywania. Niestety tego typu optymalizacja wiąże się także z częściową reorganizacją kodu i pogorszeniem jego czytelności.
W poprzednich artykułach opisywałem już, w jaki sposób zoptymalizować grafikę stosując specjalistyczne skrypty jak ScriptJPG czy ScriptPNG. Tym razem przyszła pora na optymalizację plików PHP 😉
Usuwanie komentarzy i pustej przestrzeni z plików PHP
Pobieramy i instalujemy PHP Comments Cleaner. Aplikacja prawidłowo funkcjonuje we wszystkich wersjach Windows.
Interfejs programu jest przejrzysty, oferuje wszystkie niezbędne funkcje, do których należą (Parsing options):
- recoursive – optymalizacji zostaną poddane wszystkie pliki znajdujące się w bieżącym katalogu oraz we wszystkich podkatalogach,
- remove code spaces – usuwa z kodu pustą przestrzeń (wycina z kodu niepotrzebne spacje),
- obfuscate – optymalizacja ekstremalna, zastosowanie opcji spowoduje dodatkowe zmniejszenie rozmiaru pliku, lecz dodatkowo pogorszy czytelność kodu. Mogą także wystąpić błędy w plikach wynikowych.
Można zoptymalizować jeden plik lub cały zestaw plików znajdujących się w danym katalogu i/lub podkatalogach. Po wskazaniu pliku i folderu docelowego oraz funkcji parsowania, aby rozpocząć proces optymalizacji klikamy parse. We wskazanej lokalizacji powstanie zoptymalizowana wersja pliku. Jeśli w menu Parsing options nie wskażemy żadnych opcji, z kodu zostaną usunięte same komentarze.
Wykonanie kopii zapasowej przed przystąpieniem do optymalizacji jest kluczowym elementem. Dodatkowo, jeśli zależy nam na niezawodności witryny, przed wdrożeniem jakiegokolwiek nowego pliku, należy wpierw przetestować działanie na lokalnym serwerze, czy też w inny sposób np. na domenie testowej. Nie eksperymentujmy na żywym organizmie!
Przykład dla pliku wp-load.php (tylko komentarze).
- Rozmiar przed optymalizacją: 2606 bajtów (2,54 KB)
- Rozmiar po optymalizacji: 1668 bajtów (1,62 KB)
W drugim wariancie usunięto komentarze + pustą przestrzeń, kod został maksymalnie zredukowany. Rozmiar po optymalizacji to zaledwie 1584 bajtów (1,54 KB).
UWAGA! Jeśli będziemy optymalizować pliki skórek/dodatków należy liczyć się z sytuacją, w której reorganizacja kodu spowoduje niekompatybilność pliku tłumaczeń (spolszczenia).
Przedstawiona metoda optymalizacji może nie przynieść oczekiwanych efektów jeśli witryna korzysta z kompresji gzip/deflate i/lub wyposażona jest w mechanizm buforowania (cache). Przy takim układzie zarówno zmniejszenie ilości przesyłanych danych jak również skrócenie czasu wykonywania może być nieodczuwalne, choć po wykonaniu benchmarku będzie widać różnice.
Należy tutaj jeszcze wspomnieć o drugim negatywnym czynniku, a mianowicie z uwagi na znikomą czytelność kodu, zawsze należy mieć pod ręką oryginalne pliki, z których w razie sytuacji podbramkowej będziemy mogli skorzystać. Zatem dla bezpieczeństwa powinniśmy przechowywać na serwerze dwie wersje plików, co wiąże się z dodatkowym ubytkiem przestrzeni dyskowej.
Pomimo wad niniejszej metody, stosuję ją lecz tylko dla tych plików, które są najczęściej wykorzystywane (wywoływane). W przypadku gdy muszę wprowadzić poprawki do kodu, korzystam z kopii zapasowej oryginalnego pliku, dokonuje w nim odpowiednich modyfikacji i ponownie przekształcam do postaci zoptymalizowanej.
Aplikacja na pewno ciekawa, ale nie polecał bym jej początkującym bo można narobić sobie problemów. Ja jednak nie będę tego używać, jakoś nie mam przekonania co do sposobu działania programu, jest zbyt agresywny w optymalizacji.
Zgodzę się jeśli użyjemy opcji „Obfuscate”, natomiast samo usuwanie komentarzy jest bezpieczne, choć sam program ma pewną wadę i czasami może usunąć więcej niż trzeba, dlatego przy tego typu optymalizacji bardzo ważne jest przetestowanie danego pliku przed wrzuceniem go na witrynę produkcyjną.
Zaciemnianie kodu zawsze niesie jakieś ryzyko, które znacznie wzrasta przy złożonych projektach (includowanie plików, itp). Z tym trzeba się obchodzić ostrożnie i tyle. A samo usuwanie komentarzy i niepotrzebnych pustych miejsc (nadmiary spacji, tabulatorów, nowe linie, itp) jest w 99% bezpieczne 🙂
„Rezultatem działania programu jest plik wynikowy, który cechuje się znacznie zmniejszoną wagą oraz krótszym czasem wykonywania.”
O ile zgadzam się, że sam plik zostanie zmniejszony, o tyle skrócenie czasu wykonywania to niebezpieczna mikrooptymalizacja i lepiej jest nie szerzyć tego typu argumentów, bo nie są prawdziwe – w „gołym” interpreterze różnica będzie rzędu mikrosekund, czyli nie warta pracy. Szczególnie w przypadku, kiedy używamy jakiegokolwiek optymalizatora PHP to nie będzie miało żadnego znaczenia, bo przechowuje on już „skompilowany” plik skryptu i nie dokonuje ponownej analizy pliku.
Jednak należy to nazwać optymalizacją, czasy tylko na jednym z plików oscylowały w granicach 81 milisekund. Nie jest to jakiś porywający wynik, mimo to z uwagi na efekt – zmniejszenie czasu wykonywania + zmniejszenie rozmiaru pliku należy to nazwać optymalizacją. Z uwagi na charakter samej metody stosuję ją tylko do tych plików, w których można uzyskać największy stopień optymalizacji.
Nie chcę podważać Twoich empirycznych wyników, ale… 81ms różnicy poprzez usunięcie komentarzy i zbędnych spacji? To jaki był rozmiar pliku / czas wykonania generowanej strony przed optymalizacją?
Rozmiar pliku ponad 100KB, taki zysk był na functions.php, musiałbym powtórzyć test, aby podać dokładne czasy wykonywania przed optymalizacją.
Wiesz, bo ~100ms to jest poważna różnica w czasie wykonania strony, w moim przypadku zawsze zawiera się to w przedziale 50-300ms, więc 80ms to olbrzymia optymalizacja niewymagająca praktycznie żadnego nakładu pracy. Jeśli możesz, to zreprodukuj całą sytuację i opisz dokładnie np. w kolejnym wpisie – masz już jednego Czytelnika, który na to czeka. ;]
Zapiszę sobie to do listy TO DO, niestety ostatnio u mnie krucho z czasem, przez co nawet nie mam kiedy skończyć zaległych artykułów, ale zobaczymy, będzie czas ponowie testy i udokumentuję je wraz z opisem metodologii badania.
Muszę powiedzieć, że to świetne narzędzie, pozwala na zaoszczędzenie sporo naszego czasu. Używam go od pewnego czasu i do tej pory nie miałem żadnych negatywnych zdarzeń.