有一个 opcache.optimization_level php.ini 指令。它是一个位掩码,默认为 0xffffffff
- 所以默认情况下 OPcache 会进行所有优化。
OPcache 做了哪些优化?对字节码进行了哪些传递?
追问:有没有OPcache可以很好优化的代码模式?例如,HHVM 可以跳过只包含类/函数声明的文件的执行,它只填充类/函数表。
最佳答案
opcache.optimization_level
的位对应:
- 位 0 - 通过 1:
- CSE - 常量子表达式消除
- ADD_CHAR/ADD_STRING 优化序列
- 将 CAST(IS_BOOL,x) 转换为 BOOL(x)
- 转换INTI_FCALL_BY_NAME + DO_FCALL_BY_NAME进入DO_FCALL
- 位 1 - 通过 2:
- 位 2 - 通过 3:
- 将 $a = $a + expr 转换为 $a += expr
- 将$a++转换为++$a
- 优化 JMP 系列小号
- 位 3 - 传递 4:
- PRINT 和 ECHO 优化 - removed
- 第 4 位 - 第 5 次:
- block 优化(最昂贵的优化过程,它基于 CFG 执行许多不同的优化模式 - control flow graph)
- 第 8 位 - 第 9 次:
- 注册allocation (允许重新使用临时变量)
- 第 9 位 - 通过 10:
- 删除 NOP
我环顾四周,想看看我是否能找到它比其他代码模式处理得更好的任何内容,但我没有找到任何运气。
信息来自 https://github.com/zendtech/ZendOptimizerPlus/blob/master/Optimizer/zend_optimizer.c和 https://gist.github.com/ck-on/4959032?ocp.php
关于PHP OPcache 优化级别 - 它们是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21181045/