Уровни оптимизации 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:
- бит 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