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

Существует директива opcache.optimization_level php.ini. Это битовая маска по умолчанию 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 с постоянными операндами
    • Оптимизировать статические BRK и CONT
  • бит 2 - проход 3:
    • Конвертировать $a = $a + expr в $a += expr
    • Конвертировать $a++ в ++$a
    • Оптимизация серии JMP
  • бит 3 - проход 4:
  • бит 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

Другие вопросы по тегам