2014-01-17 76 views
20

有一个opcache.optimization_level php.ini指令。这是一个位掩码,默认为0xffffffff - 所以默认情况下,OPcache会执行所有优化。PHP OPcache优化级别 - 它们是什么?

OPcache做什么样的优化?在字节码上传递什么?

后续问题:是否有OPcache可以优化的代码模式?例如,HHVM可以跳过只包含类/函数声明的文件的执行,它只是填充类/函数表。

回答

48

opcache.optimization_level的比特对应于:

  • 位0 - 通过1:
  • 位1 - 通过2:
    • 转换恒定的操作数的预期类型
    • 转换条件JMP具有恒定的操作数
    • 优化静态BRKCONT
  • 位2 - 通过3 :
    • 将$ a = $ a + expr转换为$ a + = EXPR
    • 转换$一个++成++ $一个
    • 优化一系列JMP小号
  • 位3 - 通过4:
  • 位4 - 通过5:
    • 块优化(执行人的最昂贵的优化传递基于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

+0

棒极了!你很好,谢谢。 –