Niveles de optimización de PHP OPcache - ¿qué son?


Hay un opcache.optimization_level php.directiva ini. Es una máscara de bits a por defecto 0xffffffff - por lo que por defecto OPcache hace todas las optimizaciones.

¿Qué tipo de optimizaciones hace OPcache? ¿Qué pasa en bytecode se hacen?

Pregunta de seguimiento: ¿hay un patrón de código que OPcache puede optimizar muy bien? Por ejemplo, HHVM puede omitir la ejecución de archivos que contienen solo declaraciones de clase/función y solo rellena tablas de clase/función.

Author: AstroCB, 2014-01-17

1 answers

Los bits de opcache.optimization_level corresponden a:

  • bit 0-paso 1:
  • bit 1-pass 2:
    • Convertir operandos constantes a tipos esperados
    • Convertir condicional JMP con constante operandos
    • Optimizar estática BRK y CONT
  • bit 2-pass 3:
    • Convertir $a= exp a + expr en {a + = expr
    • Convertir++ a ++en ++ {a
    • Optimizar series de JMP s
  • bit 3-pass 4:
  • bit 4-pass 5:
    • optimización de bloques (el pase de optimización más caro que realiza muchos patrones de optimización diferentes basado en CFG - gráfico de flujo de control )
  • bit 8-pass 9:
    • register allocation (permite la reutilización de variables temporales)
  • bit 9-pass 10:
    • eliminar NOPs

He mirado alrededor para ver si puedo encontrar algo en cualquier patrón de código que maneje mejor que otros, pero no he tenido suerte.

Información de https://github.com/zendtech/ZendOptimizerPlus/blob/master/Optimizer/zend_optimizer.c y https://gist.github.com/ck-on/4959032?ocp.php

 49
Author: G-Nugget,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-22 19:15:32