2011-06-29 19 views
5

z mojego rozumowania, jeśli korzystasz z programu do buforowania PHP takiego jak APC, eAccelerator, itd., To opkody będą przechowywane w pamięci dla szybszego wykonania po kolejnych żądaniach. Moje pytanie brzmi: dlaczego NIE ZAWSZE lepiej/szybciej kompilowałbyś swoje skrypty, zakładając, że używasz kompilatora takiego jak phc lub nawet HPHP (chociaż wiem, że mają problemy z dynamicznymi konstrukcjami)? Po co zawracać sobie głowy przechowywaniem kodów, ponieważ muszą one zostać ponownie odczytane przez Zend Engine, który używa funkcji C, aby go wykonać, skoro można po prostu skompilować i pominąć ten krok?Pytanie o pamięć podręczną PHP vs kompilacja

+0

Istnieje również część 2 na to pytanie, którą zacząłem osobny wątek dla: http://stackoverflow.com/questions/6525187/why-are-dynamic-constructs-difficult-for-php-compilers-phphp – blacktie24

Odpowiedz

2

Nie można po prostu skompilować do c, a skrypt PHP należy wykonać w ten sam sposób. HPHP wykonuje prawdziwą kompilację, ale nie obsługuje całego zestawu funkcji php.

Inne kompilatory faktycznie po prostu osadzają interpretera php w pliku binarnym, więc i tak nie kompilujesz kodu.

PHP nie jest skompilowane. buforowanie kodu jest bardzo szybkie i wystarczająco dobre dla 99% aplikacji. Jeśli masz ruch na Facebooku i już zoptymalizowałeś bazę danych, kompilacja może być jedynym sposobem na zwiększenie wydajności.

PHP nie jest cienką warstwą biblioteki std c.

+0

gracias za poświęcenie czasu na odpowiedź. Czy możesz wyjaśnić, co masz na myśli, mówiąc "PHP nie jest cienką warstwą do biblioteki STD"? – blacktie24

1

Jeśli PHP nie ma eval(), prawdopodobnie będzie możliwe proste, skompilowane tłumaczenie binarne z (względną) łatwością. Ale ponieważ PHP może sam dynamicznie budować/wykonywać skrypty w locie za pośrednictwem eval(), nie jest możliwe zrobienie pełnego pliku binarnego. Każdy plik binarny musiałby zawierać cały PHP, ponieważ kompilator nie miałby pojęcia, co może zrobić twój kod dynamiczny. Przejdziesz z małego skryptu o wielkości 1 lub 2k do ogromnego pliku wielomegajowego pliku binarnego.

+0

thx za odpowiedź! Zakładając, że nie używam eval(), i obejrzałem kwestię konstrukcji dynamicznych (dostałem kolejne pytanie o kompilatory i konstrukcje dynamiczne w innym wątku, który napisałem jako komentarz pod moim pierwotnym pytaniem), czy byłby to wydajny do kompilacji? – blacktie24

+0

Nie wiem o "skuteczny", ale nie widzę, dlaczego nie byłoby to możliwe. –

Powiązane problemy