2014-01-17 4 views
20

Es gibt eine opcache.optimization_level php.ini Direktive. Es ist eine Bitmaske, die standardmäßig 0xffffffff ist - also führt OPcache standardmäßig alle Optimierungen durch.PHP OPcache-Optimierungsstufen - was sind sie?

Welche Art von Optimierungen macht OPcache? Was passiert mit Bytecode?

Folgefrage: Gibt es ein Codemuster, das OPcache sehr gut optimieren kann? Beispielsweise kann HHVM die Ausführung von Dateien überspringen, die nur Klassen-/Funktionsdeklarationen enthalten, und füllt nur Klassen-/Funktionstabellen.

Antwort

48

Die Bits opcache.optimization_level entsprechen:

  • Bit 0 - Durchlauf 1:
  • Bit 1 - Durchlauf 2:
    • Konvertieren konstante Operanden zu erwartete Typen
    • bedingte JMP Konvertieren mit konstanten Operanden
    • Optimierungs statisch BRK und CONT
  • Bit 2 - 3 passieren :
    • Konvertieren Sie $ a = $ a + expr in $ a + = Ausdr
    • Convert $ a ++ in ++ $ a
    • optimieren Reihe von JMP s
  • Bit 3 - Zug 4:
    • PRINT und ECHO-Optimierung - removed
  • Bit 4 - Pass 5:
    • Blockoptimierung (der teuerste Optimierungsdurchlauf, der man ausführt y verschiedene Optimierungsmuster basierend auf CFG - control flow graph)
  • Bit 8 - pass 9:
    • Register allocation (Wiederverwendung von temporären Variablen)
  • Bit 9 erlaubt - 10 übergeben:
    • entfernen NOPs

Ich habe mich umgesehen, ob ich irgendetwas auf irgendeinem Codemuster finden kann, das es besser als andere behandelt, aber ich hatte kein Glück.

Informationen vom https://github.com/zendtech/ZendOptimizerPlus/blob/master/Optimizer/zend_optimizer.c und https://gist.github.com/ck-on/4959032?ocp.php

+0

Superb! Du bist großartig, danke. –