За обновлениями можно следить в telegram-канале https://t.me/quasiart

Всё ближе и ближе дата выпуска PHP7, обещающего двукратное увеличение скорости работы PHP-скриптов по сравнению с PHP 5.6. Тем не менее, всегда есть способы оптимизировать скорость ещё больше, и одним из них является профильная оптимизация — PGO. Данная техника призвана увеличить производительность программ путём профилирования. В контексте этой статьи данной программой является PHP. Нет, не PHP-скрипты, а тот самый PHP, написанный на C и C++ и занимающийся трансляцией и интерпретацией PHP-скриптов.

Обычно PHP-скрипты, написанные веб-разработчиками, запускаются на сервере, программное обеспечение которого уже скомпилировано и интегрировано. Обычно программное обеспечение уже скомпилировано и распространяется в готовом виде, например, командой какого-нибудь Linux-дистрибутива. Программное обеспечение компилируется с помощью компиляторов, установленных на их системе, обычно это GCC или MS Visual C++ compiler. 

Во время компиляции можно устанавливать различные опции, влияющие на результат: степень оптимизации, вид оптимизации и пр. PGO является тем видом оптимизации, доступным в современных компиляторах. Если вкратце, то её принцип заключается в следующем: компилятор анализирует скомпилированную программу и, исходя из наиболее вероятных сценариев её использования, производит оптимизацию. Таким образом, программа компилируется как минимум дважды. Сначала PHP компилируется с использованием профилирующих инструментов, а затем вы запускаете ваше PHP-приложение (фреймворк, CMS и пр.). После этого создастся файл с профильной информацией, которая будет использована при второй компиляции. Так можно получить несколько версий PHP, оптимизированных под разные платформы: MODX, Laravel и так далее. 

К таким способам оптимизации обычно прибегают хостинг-провайдеры, специализирующиеся на определённом наборе PHP-приложений. Согласно исследованиям Intel, производительность может достигать 7-8%. 

Но ничто не ново под Луной. Впервые профильная оптимизация была применена к PHP ещё версии 5.3.