PHP i OpCody

0

Hej,

Jak ktoś pisał w Pythonie wie, że Python w cachuje OpCody i tworzy do każdego skryptu Pythona plik z rozszerzeniem pyc w którym znajdują się OpCody i w efekcie, mimo że Python sam z siebie ma porównywalną prędkość do PHP to skrypty wykonują się tak szybko jak PHP z APC. Tymczasem wszystkie biblioteki PHP do OpCodów zapisują je w RAMie przez co nie można w zasadzie uruchomić APC na shared hostingu.

I teraz pytanie. Czy ktoś wie czemu tak jest? Czemu PHP wzorem Pythona nie może tworzyć plików np. phpc z OpCodami? A może da się jakoś to zakodować w PHP bez jakiś dziwnych bibliotek?

0

Na typowym hostingu nic takiego raczej nie wycudujesz, ale jeżeli masz jakieś rozwiązanie zawsze można próbować prosić o instalację jakiejś biblioteki (szczególnie, że jej celem ma być zmniejszenie obciążenia).
Dlaczego 'tak jest' w PHP? Tak zrobili twórcy. Dziwne pytanie.

0

Co jest dziwnego w tym pytaniu? Odpowiedź "bo tak" jest dziwna ;-). Interesuje mnie czemu "bo tak". Wiesz jak działa PHP? PHP działa w oparciu o schemat JIT. Tj. najpierw kod jest kompilowany do OpCodów co może zajmować ponad 50% czasu wykonania kodu a potem OpCody są wykonywane. I większość języków JIT (jak wspomniany Python) cachuje OpCody aby wykonywać kod szybciej. A PHP jest dziwnym wyjątkiem który pozwala cachować kody tylko w RAMie i zastanawia mnie jakie powody mieli ku temu programiści PHP. Owszem to jest szybsze ale to się sprawdza TYLKO dla stron które są odpalane na dedykowanych serwerach. Na współdzielonym hostingu kilka stron zeżre cały dostępny RAM. Do tego żadne z rozwiązań cachowania OpCodów nie jest przystosowane do działania w systemie z wieloma użytkownikami (tj da się ale wymaga to niezłego gimnastykowania i nie masz gwarancji, że po updacie wszystko się nie sypnie bo nie jest to rozwiązanie wspierane). I w teorii wzorem Pythona wystarczyłoby zapisywać cache do równoegłych plików np. z rozszerzeniem phpc i na prawdę nie mogę zrozumieć czemu PHP tego nie robi. W teorii dałoby to wzrost wydajności o co najmniej 50%. Istnieje co prawda rozszerzenie bcompiler które pozwala uzyskać to o czym pisze ale jego rozwój stoi praktycznie w miejscu i jest dość mocno zabugowane. Próbowałem też tak skonfigurować APC aby można było ładować do niego cache tylko za pomocą apc_bin_load i wyłaczyć cache zmiennych (co byłoby poważnym zagrożeniem dla bezpieczeństwo bo każdy user może odczytać zmienne pozostałych użytkowników) ale tak się nie da. Wyłączenie automatycznego cachowania OpCodów wyłącza także apc_bin_dump i apb_bin_load chyba, że czegoś nie zauważyłem.

Liczę na odpowiedź kogoś kto wie co siedzi w głowach twórców PHP ;-)

0

kogoś kto wie co siedzi w głowach twórców PHP

Czasami wątpię, czy oni sami wiedzą...
http://use.perl.org/use.perl.org/_Aristotle/journal/33448.html

0

Haha... dobre :D My w pracy migrujemy teraz na Pythona ale pińcet projektów PHP dalej trzeba utrzymywać ;-( A to jest chore, że serwer który jest wstanie utrzymać setki stron na Pythonie zaczyna dławić się przy stu w PHP bez APC.

1 użytkowników online, w tym zalogowanych: 0, gości: 1