30

opcache.optimization_level php.ini ディレクティブがあります。これはデフォルトのビットマスクな0xffffffffので、デフォルトでは OPcache がすべての最適化を行います。

OPcache はどのような最適化を行いますか? バイトコードのどのようなパスが行われますか?

フォローアップの質問: OPcache が最適化できるコード パターンはありますか? たとえば、HHVM は、クラス/関数宣言のみを含むファイルの実行をスキップでき、クラス/関数テーブルを埋めるだけです。

4

1 に答える 1

68

のビットは次のものにopcache.optimization_level対応します。

  • ビット 0 - パス 1:
  • ビット 1 - パス 2:
  • ビット 2 - パス 3:
    • $a = $a + expr を $a += expr に変換します
    • $a++ を +++a に変換します
    • 一連のJMPを最適化する
  • ビット 3 - パス 4:
    • PRINT と ECHO の最適化 -削除
  • ビット 4 - パス 5:
    • ブロック最適化 (CFG に基づいてさまざまな最適化パターンを実行する最も高価な最適化パス -制御フロー グラフ)
  • ビット 8 - パス 9:
    • レジスタの割り当て(一時変数の再利用が可能)
  • ビット 9 - パス 10:
    • NOPを削除する

他のコード パターンよりもうまく処理できるコード パターンを見つけられるかどうかを調べてみましたが、うまくいきませんでした。

https://github.com/zendtech/ZendOptimizerPlus/blob/master/Optimizer/zend_optimizer.cおよびhttps://gist.github.com/ck-on/4959032?ocp.phpからの情報

于 2014-01-22T18:59:15.553 に答える