2011-06-29 12 views
5

de mi entender, si utiliza un programa de caché de PHP como APC, eAccelerator, etc., los códigos de operación se almacenarán en la memoria para una ejecución más rápida en las solicitudes posteriores. Mi pregunta es, ¿por qué SIEMPRE no sería mejor/más rápido compilar tus guiones, suponiendo que estés usando un compilador como phc o incluso HPHP (aunque sé que tienen problemas con los constructos dinámicos)? ¿Por qué molestarse en almacenar códigos de operación ya que Zend Engine tiene que volver a leerlos, que usa las funciones C para ejecutarlo, cuando simplemente puede compilar y omitir ese paso?Cuestión de caché de PHP vs compilar

+0

También hay una parte 2 a esta pregunta, que comencé un hilo separado para: http://stackoverflow.com/questions/6525187/why-are-dynamic-constructs-difficult-for-php-compilers-hphp – blacktie24

Respuesta

2

No puede simplemente compilar en c y hacer que su script php se ejecute de la misma manera. HPHP realiza una compilación real, pero no admite todo el superconjunto de las características de php.

Otros compiladores en realidad solo incrustan un intérprete de php en el binario por lo que en realidad no está compilando el código de todos modos.

PHP no está destinado a ser compilado. El almacenamiento en caché de código de operación es muy rápido y lo suficientemente bueno para el 99% de las aplicaciones que existen. Si tiene nivel de tráfico de facebook y ya ha optimizado su back-end db, la compilación podría ser la única forma de aumentar el rendimiento.

PHP no es una capa delgada para la biblioteca estándar.

+0

gracias por tomarse un tiempo para responder. ¿Puedes explicar mejor a qué te refieres cuando dices "PHP no es una capa delgada para la biblioteca estándar"? – blacktie24

1

Si PHP no tiene eval(), probablemente sea posible realizar una traducción binaria directa compilada PHP- con facilidad. Pero dado que PHP puede construir/ejecutar scripts dinámicamente sobre la marcha a través de eval(), no es posible hacer un binario completo. Cualquier binario debería necesariamente contener la totalidad de PHP porque el compilador no tendría idea de lo que su código dinámico podría hacer. Pasarías de un pequeño script de 1 o 2k a un enorme binario de varios megabytes.

+0

thx para responder! Asumiendo que no uso eval(), y solucioné el problema de las construcciones dinámicas (recibí otra pregunta sobre compiladores y construcciones dinámicas en otro hilo, que publiqué como comentario en mi pregunta original), ¿sería entonces? eficiente para compilar? – blacktie24

+0

No sé acerca de 'eficiente', pero no puedo ver por qué no sería posible. –