da quanto ho capito, se si utilizza un programma di caching PHP come APC, eAccelerator, ecc. Allora gli opcodes saranno archiviati in memoria per un'esecuzione più rapida su richieste successive. La mia domanda è, perché non sarebbe SEMPRE meglio/più veloce compilare i tuoi script, supponendo che tu stia usando un compilatore come phc o persino HPHP (anche se so che hanno problemi con i costrutti dinamici)? Perché preoccuparsi di memorizzare gli opcode poiché devono essere riletti da Zend Engine, che usa le funzioni C per eseguirlo, quando puoi semplicemente compilare e saltare questo passaggio?Domanda di PHP cache vs compile
risposta
Non puoi semplicemente compilare a c e far eseguire lo script php allo stesso modo. HPHP esegue una vera compilazione, ma non supporta l'intero superset delle funzionalità di php.
Altri compilatori in realtà incorporano solo un interprete PHP nel binario, quindi non si sta veramente compilando il codice.
PHP non è pensato per essere compilato. Il caching opcode è molto veloce e abbastanza buono per il 99% delle applicazioni disponibili. Se hai il livello di traffico di Facebook e hai già ottimizzato il db back-end, la compilazione potrebbe essere l'unico modo per aumentare le prestazioni.
PHP non è un livello sottile per la libreria std c.
gracias per aver dedicato del tempo a rispondere. Puoi spiegare ulteriormente cosa intendi quando dici "PHP non è un sottile strato nella libreria std c"? – blacktie24
Se PHP non disponesse di eval()
, probabilmente sarebbe possibile eseguire una traduzione binaria di tipo PHP-> compilato con facilità (relativa). Ma dal momento che PHP è in grado di creare dinamicamente/eseguire script al volo tramite eval(), non è possibile eseguire un file binario completo. Qualsiasi binario dovrebbe necessariamente contenere l'intera gamma di PHP perché il compilatore non avrebbe idea di cosa potrebbe fare il tuo codice dinamico. Passeresti da un piccolo script 1 o 2k in un enorme binario multi-megabyte.
thx per rispondere! Supponendo che io non usi eval(), e ho aggirato il problema dei costrutti dinamici (ho ottenuto un'altra domanda sui compilatori e costrutti dinamici in un altro thread, che ho postato come commento sotto la mia domanda originale), sarebbe allora efficiente da compilare? – blacktie24
Non so "efficiente", ma non vedo perché non sarebbe possibile. –
C'è anche una parte 2 a questa domanda, che ho avviato un thread separato per: http://stackoverflow.com/questions/6525187/why-are-dynamic-constructs-difficult-for-php-compilers-hphp – blacktie24