Czy jest sens minifikacja PHP?

101

Wiem, że możesz minifikować PHP, ale zastanawiam się, czy jest jakiś sens. PHP jest językiem interpretowanym, więc będzie działał trochę wolniej niż język kompilowany. Moje pytanie brzmi: czy klienci zauważyliby widoczną poprawę szybkości wczytywania stron i takie, gdybym zminimalizował PHP?

Czy istnieje sposób na skompilowanie PHP lub czegoś podobnego?

Bojangles
źródło
Jednym z oczywistych punktów jest zaciemnianie kodu, aby uczynić kod mniej przenośnym, co może być ważnym celem.
John
Kolejną kwestią jest oszczędność miejsca na serwerze (jeśli to ważne)
George Ogden

Odpowiedzi:

161

PHP jest kompilowane do kodu bajtowego, który jest następnie interpretowany na podstawie czegoś przypominającego maszynę wirtualną. Wiele innych języków skryptowych stosuje ten sam ogólny proces, w tym Perl i Ruby. Tak naprawdę nie jest to tradycyjny język interpretowany, jak powiedzmy BASIC.

Nie byłoby efektywnego wzrostu prędkości, gdybyś próbował „zminimalizować” źródło. Znaczny wzrost uzyskasz używając pamięci podręcznej kodu bajtowego, takiej jak APC .

Facebook wprowadził kompilator o nazwie HipHop, który przekształca źródło PHP na kod C ++. Rasmus Lerdorf, jeden z wielkich ludzi PHP, przeprowadził na początku tego roku prezentację dla Digg, która omawia ulepszenia wydajności wprowadzone przez HipHop. Krótko mówiąc, nie jest to dużo szybsze niż optymalizacja kodu i użycie pamięci podręcznej kodu bajtowego. HipHop to przesada dla większości użytkowników.

Facebook zaprezentował również niedawno HHVM , nową maszynę wirtualną opartą na ich pracy nad HipHop. Wciąż jest dość nowy i nie jest jasne, czy zapewni on ogółowi społeczeństwa znaczny wzrost wydajności.

Aby upewnić się, że zostało to wyraźnie określone, przeczytaj tę prezentację w całości. Wskazuje liczne sposoby testowania porównawczego i profilowania kodu oraz identyfikowania wąskich gardeł za pomocą narzędzi takich jak xdebug i xhprof , również z Facebooka.

Charles
źródło
2
Zwróć uwagę, że cała rzecz z kodem bajtowym / maszyną wirtualną w rzeczywistości niczego nie kupi bez zewnętrznej (!) Pamięci podręcznej kodu bajtowego. Nie rozumiem, dlaczego PHP domyślnie
Wyobrażam sobie, że jest to wspólny problem z hostingiem. APC jest domyślnie dołączone do PHP od starego łącza opartego na wersji 6.0. Nie jestem pewien, czy zobaczymy to domyślnie w 5.4 lub jakikolwiek inny nowy bagażnik zostanie nazwany ...
Charles
Bardzo dziękuję za informację. Niestety nie mam głębokiej kontroli nad moim serwerem (jest wynajęty). Czy jest prawdopodobne, że hosty internetowe używają APC?
Bojangles
3
Większość dostawców hostingu współdzielonego nie korzysta z APC. Powinieneś zajrzeć do wirtualnego serwera prywatnego, aby móc kontrolować konfigurację. VPSy są często droższe niż zwykły hosting współdzielony, ale znacznie tańsze niż prawdziwy serwer dedykowany. Popularni dostawcy VPS to Slicehost i Linode. Nie zapominaj, że powinno być benchmarkingu i profilowania kodu pierwszy !
Charles
15

Zrezygnuj z pomniejszania PHP na rzecz użycia pamięci podręcznej kodu operacji, na przykład PHP Acceleratorlub APC.

Albo coś innego memcached

Stephen
źródło
18
Powiedziałem „coś innego”.
Stephen
3
z tego nie wynika jasno, że masz na myśli coś innego niż pamięć podręczna kodu operacyjnego.
Treffynnon
5
memcached to doskonały sposób na poprawę wydajności ... po wykonaniu testów porównawczych i profilowaniu oraz ustaleniu, że buforowanie samo w sobie zapewni najlepszy możliwy wzrost wydajności.
Charles
1
jeśli używasz PHP 5.5, nie musisz instalować żadnej pamięci podręcznej opcode, ponieważ jest ona teraz dostępna domyślnie.
zapora ogniowa
1
Właściwie wyszukałem cromulent :(. Zgadzam się z innymi, używanie memcached w tym kontekście jest mylące. Buforowanie danych jako część procesu kompilacji nie jest tym samym, co wynikowy kod operacyjny.
Mike Purcell
3

Przy pewnym przepisywaniu (krótsze nazwy zmiennych) można zaoszczędzić kilka bajtów pamięci, ale to też rzadko ma znaczenie.

Jednak projektuję niektóre z moich aplikacji w sposób, który pozwala łączyć skrypty razem. Dzięki php -wniemu można go znacznie zmniejszyć, dodając niewielki wzrost prędkości przy uruchamianiu skryptu. Na serwerze obsługującym opcode zapisuje to jednak tylko kilka sprawdzeń czasu plików.

mario
źródło
3

To mniej odpowiedź niż reklama. Pracuję nad rozszerzeniem PHP, które tłumaczy kody operacyjne Zend do uruchamiania na maszynie wirtualnej ze statycznym typowaniem. Nie przyspiesza dowolnego kodu PHP. Pozwala na pisanie kodu działającego znacznie szybciej niż pozwala na to zwykły PHP. Kluczem jest tutaj statyczne pisanie. Na nowoczesnym procesorze dynamiczny język zjada karę za błędne przewidywanie gałęzi z lewej i prawej strony. Fakt, że tablice PHP są tablicami mieszającymi, również wiąże się z wysokimi kosztami: wiele błędnych przewidywań dotyczących gałęzi, nieefektywne wykorzystanie pamięci podręcznej, słabe wstępne pobieranie pamięci i brak jakiejkolwiek optymalizacji SIMD. W szczególności błędne przewidywania gałęzi i pomyłki w pamięci podręcznej są piętą achillesową dzisiejszych procesorów. Moja mała maszyna wirtualna omija ten problem, używając typów statycznych i tablicy C zamiast tabeli skrótów. W rezultacie działa mniej więcej dziesięć razy szybciej. To używa interpretacji kodu bajtowego. Rozszerzenie może opcjonalnie skompilować funkcję za pomocą gcc. W takim przypadku uzyskasz od dwóch do pięciu razy większą prędkość.

Oto link dla wszystkich zainteresowanych:

https://github.com/chung-leong/qb/wiki

Ponownie, rozszerzenie nie jest ogólnym akceleratorem PHP. Musisz napisać odpowiedni dla niego kod.

cleong
źródło
3

Tak, jest jeden (nietechniczny) punkt.

Twoja firma hostingowa może szpiegować Twój kod na swoim serwerze. Jeśli go zminimalizujesz i uszlachetnisz, szpiegom trudniej będzie ukraść twoje pomysły.

Jednym z powodów minimalizowania i upiększania php może być ochrona przed szpiegami. Myślę, że brzydki kod powinien być jednym krokiem w automatycznym wdrożeniu.

Dieter Porth
źródło
1

Istnieją kompilatory PHP ... zobacz listę w poprzednim pytaniu ; ale (chyba że jesteś wielkości Facebooka lub chcesz, aby Twoja aplikacja działała po stronie klienta) generalnie są o wiele bardziej kłopotliwi niż są tego warci

Proste buforowanie kodu operacyjnego zapewni większe korzyści za włożony wysiłek. Lub sprofiluj swój kod, aby zidentyfikować wąskie gardła, a następnie zoptymalizuj go.

Mark Baker
źródło