Уровни оптимизации PHP OPcache-что это такое?

есть opcache.optimization_level php.директива Ини. Это битовая маска по умолчанию 0xffffffff - поэтому по умолчанию OPcache выполняет все оптимизации.

какие оптимизации делает OPcache? Что происходит с байт-кодом?

последующий вопрос: есть ли шаблон кода, который OPcache может оптимизировать очень хорошо? Например, HHVM может пропустить выполнение файлов, содержащих только объявления класса / функции, и просто заполняет класс / функцию таблицы.

1 ответов


бит 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:
    • преобразовать постоянное операнды ожидаемых типов
    • преобразовать условную JMP С постоянным операндов
    • оптимизировать статический!--33-->БРК и прод
  • бит 2-pass 3:
    • преобразовать $a = $a + expr в $a += expr
    • преобразование $a++ в ++$A
    • оптимизация серии JMPs
  • бит 3-проход 4:
  • бит 4-проход 5:
    • block optimization (самый дорогой оптимизационный проход, который выполняет множество различных шаблонов оптимизации на основе CFG -график потока управления)
  • бит 8-pass 9:
    • зарегистрироваться распределение (позволяет повторно использовать временные переменные)
  • бит 9-проход 10:
    • удалить NOPs

я осмотрелся, чтобы увидеть, могу ли я найти что-нибудь на любых шаблонах кода, которые он обрабатывает лучше, чем другие, но мне не повезло.

информация из https://github.com/zendtech/ZendOptimizerPlus/blob/master/Optimizer/zend_optimizer.c и https://gist.github.com/ck-on/4959032?ocp.php