Narzędzia PHP - zastosowania i komercja

Kodowanie PHP

Ciekawym komercyjnym narzędziem jest ZendEncoder. To specjalny produkt "kodujący" witrynę napisaną w PHP. Dzięki wstępnemu przetworzeniu witryny powstaje kod, który może być bezpośrednio wykonywany przez motor PHP, ale na jego podstawie trudno jest odtworzyć kod źródłowy. ZendEncoder ma dwa główne zadania. Po pierwsze, pozwala ukryć przed użytkownikiem szczegóły rozwiązania (w przypadku ISP przed firmami współużytkującymi dany serwer WWW). Po drugie, przyspiesza działanie witryny.

ZendEncoder jest narzędziem typu offline. Przygotowane pliki PHP należy najpierw przetworzyć przy użyciu Zend-Encoder. Wtedy powstaje specjalny kod, który może być wykonywany bezpośrednio (bez analizy składni) przez motor PHP. Należy podkreślić, że kod ten jest niezależny od platformy - podobnie jak w przypadku Javy (nie wiadomo tylko, czy z czasem nie okaże się, iż kod wyprodukowany przez ZendEncoder będzie musiał być dostosowywany do konkretnej wersji/platformy PHP).

Podczas tworzenia kodu jest stosowany ZendOptimizer. W tym przypadku optymalizacja przypomina to, co się dzieje podczas kompilacji programu np. w C. Tak więc ZendOptimizer zawsze przyspiesza działanie kodu (optymalizacja jest wykonywana tylko raz, podczas kodowania plików PHP). Wersje testowe ZendEncoder są specjalnie ograniczone i generują kod dwa razy wolniejszy niż kod bezpośrednio analizowany syntaktycznie przez PHP. Przedstawiciele Zend zapewniają, że w przypadku wersji komercyjnej te ograniczenia nie występują.

Kolejnym produktem przyspieszającym działanie skryptów PHP jest ZendCache. To specjalny moduł, przechowujący w pamięci operacyjnej skompilowane wersje skryptów. O ile Zend-Engine wbudowany w PHP analizuje strony w prywatnym obszarze pamięci dla danej sesji/połączenia, o tyle ZendCache ma wspólną pamięć dla wszystkich połączeń/żądań. W ten sposób strona jest tylko raz analizowana. ZendCache (przy dostatecznie dużej ilości pamięci RAM serwera) przyspiesza działanie złożonych witryn nawet o 600%.

Połączenie ZendEncoder i Zend- Cache nie daje w efekcie dużego wzrostu wydajności (główną zaletą ZendEncoder jest to, że PHP przetwarza prekompilowany kod). ZendCache wykonuje to samo, tylko że w sposób dynamiczny (w tym przypadku czas związany z dłuższą kompilacją ZendOptimizer jest mało istotny).

Zarządzanie ZendCache jest bardzo łatwe. Administrator w zasadzie musi tylko określić wielkość pamięci przeznaczonej na skrypty i sposób sprawdzania pojawienia się nowej wersji pliku PHP. Dostępny jest wygodny interfejs pozwalający na analizowanie współczynnika trafień, najczęściej odczytywanych stron itp. API ZendCache jest dostępne także z poziomu kodu PHP, dlatego łatwo można samodzielnie opracowywać statystyki.

Licencja ZendCache na jeden procesor kosztuje ok. 1500 USD. Cena Zend-Encoder wynosi ok. 2400 USD, natomiast ZendOptimizer jest dostępny za darmo.

Inne projekty open source

Istnieje kilka projektów open source, które mają na celu stworzenie alternatywnego w stosunku do Zend rozwiązania: APC (Alternative PHP Cache) i bardzo mały afterBURNER*Cache. Ten drugi wykorzystuje modułową budowę PHP i dołącza się do motoru skrytpowego jako element, który decyduje, czy składnia danego pliku ma być badana, czy ma być wykonana wcześniej skompilowana wersja.

APC także może być modułem PHP, jednak dysponuje znacznie bardziej rozbudowanymi możliwościami od afterBURNER*Cache. APC można wkompilować w PHP lub stworzyć dynamicznie wczytywany moduł. Można też dokładnie określić, które z plików mają być przechowywane w pamięci cache. Skompilowane instrukcje PHP (kod pośredni, który może być od razu wykonywany przez motor) są przechowywane w pamięci dzielonej albo w tzw. plikach pamięciowych (Memory mapped file). Jest to rozwiązanie o tyle interesujące, że nie można jednoznacznie stwierdzić, który system cache będzie szybszy. Pamięć dzielona pozwala na ustalenie "czasu życia" obiektu, ale wówczas bardzo intensywnie są wykorzystywane semafory, a ten zasób może przy silnie obciążonym serwerze WWW szybko się skończyć. Jednocześnie pliki pamięciowe pozwalają na bardzo dokładny monitoring procesu tworzenia pamięci podręcznej i działają szybciej w przypadku gdy witryna jest bardzo rozbudowana, obsługuje niewielki ruch i dużo małych plików. Natomiast przy tej implementacji system operacyjny ma dużą liczbę otwartych plików.

Niestety, oba rozwiązania cache niezbyt dobrze współpracują z ZendOptimizer. Oba motory przyspieszają wykonywanie kodu PHP o ok. 200-300%, z tym że aBC nie jest dostosowane do pracy wielowątkowej. Ma mniejsze wymagania systemowe niż APC.


TOP 200