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

Существует директива opcache.optimization_level php.ini. Это 0xffffffff по умолчанию равна 0xffffffff – поэтому по умолчанию OPcache выполняет все оптимизации.

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

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

Биты 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 с постоянными операндами
    • Оптимизировать статические BRK и CONT
  • бит 2 – проход 3:
    • Преобразовать $ a = $ a + expr в $ a + = expr
    • Преобразование $ a ++ в ++ $ a
    • Оптимизация серии JMP s
  • бит 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