present - Niveles de optimización de PHP OPcache: ¿qué son?
php71 opcache (1)
Los bits de opcache.optimization_level
corresponden a:
- bit 0 - paso 1:
- CSE - Eliminación de subexpresiones de constantes.
- Secuencias de optimización ADD_CHAR / ADD_STRING
- convertir CAST (IS_BOOL, x) en BOOL (x)
- convertir INTI_FCALL_BY_NAME + DO_FCALL_BY_NAME en DO_FCALL
- bit 1 - paso 2:
- bit 2 - paso 3:
- Convierta $ a = $ a + expr en $ a + = expr
- Convertir $ a ++ en ++ $ a
- Optimizar series de JMP s.
- bit 3 - paso 4:
- PRINT y optimización ECHO - removed
- bit 4 - paso 5:
- optimización de bloques (el paso de optimización más caro que realiza muchos patrones de optimización diferentes basados en CFG - gráfico de flujo de control )
- bit 8 - paso 9:
- allocation registros (permite la reutilización de variables temporales).
- bit 9 - paso 10:
- eliminar NOPs
He mirado a mi alrededor para ver si puedo encontrar algo en algún patrón de código que se maneje mejor que otros, pero no he tenido suerte.
Información de https://github.com/zendtech/ZendOptimizerPlus/blob/master/Optimizer/zend_optimizer.c https://gist.github.com/ck-on/4959032?ocp.php
Hay una directiva opcache.optimization_level php.ini. Es una máscara de bits y por defecto es 0xffffffff
, por lo que, de forma predeterminada, OPcache realiza todas las optimizaciones.
¿Qué tipo de optimizaciones hace OPcache? ¿Qué pasa en bytecode se hacen?
Pregunta de seguimiento: ¿existe un patrón de código que OPcache pueda optimizar muy bien? Por ejemplo, HHVM puede omitir la ejecución de archivos que contienen solo declaraciones de clase / función y solo llena las tablas de clase / función.