2014-01-17 34 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

棒極了!你很好,謝謝。 –