La documentación de apc.enable_cli
, que controlan si APC debe ser activado en el modo CLI, dice (citando):
todo para las pruebas y la depuración. Al configurar esto, se habilita APC para la versión CLI de PHP. Bajo circunstancias normales, no es ideal para crear, rellenar y destruir el caché de APC en cada petición CLI, pero para diversos escenarios de prueba es útil podrá habilitar APC para la versión CLI de PHP con facilidad.
Quizás APC almacene los códigos de operación en la memoria, pero como el ejecutable PHP muere al final del script, esa memoria se perderá: no persistirá entre las ejecuciones del script.
Así que el opcode-cache en APC es inútil en el modo CLI: no optimizará nada, ya que PHP tendrá que volver a compilar el código fuente cada vez que se ejecute el ejecutable de PHP.
En realidad, APC no "optimizar": la forma estándar de la ejecución de un script PHP es así:
- leer el archivo y compilarlo en códigos de operación
- ejecutar los códigos de operación
lo que hace APC es tienda en códigos de operación en la memoria, por lo que la ejecución de un script PHP se convierte en:
- leer los códigos de operación de la memoria (mucho más rápido que compilar el código fuente)
- ejecutar los códigos de operación
Pero esto significa que debe tener un lugar en la memoria para almacenar los códigos de operación. Al ejecutar PHP como un módulo de Apache, Apache es responsable de la persistencia de ese segmento de memoria ... Cuando PHP se ejecuta desde CLI, no hay nada para mantener el segmento de memoria allí, por lo que se destruye al final de la ejecución de PHP.
(no sé cómo funciona exactamente, pero es algo así, por lo menos en los principios, incluso si mis palabras no son muy "técnica" ^^)
O, por "optimización" significa algo más que la memoria caché de códigos de operación, como la directiva de configuración apc.optimization? Si es así, éste ha sido retirado de APC 3.0.13
De la documentación de PHP: APC es un marco libre, abierto y robusto para el almacenamiento en caché de PHP y la optimización de código intermedio. Supongo que me pregunto acerca de la optimización del código intermedio. Planeo ejecutar el script CLI solo una vez y luego se ejecutará durante unos días, ejecutando algún código dentro de un bucle. ¿Entonces APC realmente no acelera la ejecución en sí misma, solo el tiempo que lleva comenzar a ejecutar? – Matic
http://pecl.php.net/package-info.php?package=APC&version=3.0.13 dice "Obsoleto y eliminar el optimizador de la APC"; Nunca escuché que APC (al menos en versiones recientes) hiciera algún tipo de "optimización" como lo que se podría pensar que el compilador puede hacer cuando se está programando en C. Y no creo que reduzca el tiempo para comenzar a ejecutar, ya que el PHP tendrá que ser compilado a código de operación (es en esta parte que APC permite una gran ganancia ... cuando puede mantener esos códigos de operación en la memoria entre las ejecuciones del script, lo que no creo puede hacerlo en CLI) –
Para ser claros, el uso de APC en modo CLI sigue siendo bastante útil para el almacenamiento en caché de objetos generados por el usuario. En un script en el que estoy trabajando, usamos apc_store() y apc_fetch() para aprovechar el almacenamiento en memoria caché de objetos de usuario de APC en un trabajo cron de larga ejecución. – rinogo