Страсть делает наилучшие наблюдения и наихудшие выводы (Ж.-П. Рихтер).

4 мин для чтенияЧто нового в PHP 8 (функции, улучшения и JIT-компилятор)

FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
1 июня 2020
Что нового в PHP 8 (функции, улучшения и JIT-компилятор)
PHP 8, как ожидается, будет выпущен в декабре 2020 года и принесет нам целый ряд мощных функций и значительных улучшений языка.

Многие RFC уже были одобрены и внедрены, поэтому нам пора погрузиться в некоторые из самых интересных дополнений, которые должны сделать PHP быстрее и надежнее.
Поскольку PHP 8 все еще находится в стадии разработки, мы могли увидеть несколько изменений до финальной версии.

Итак, какие функции и улучшения следует ожидать с PHP 8? Что самое большое в PHP 8, следующей основной версии языка?

 

PHP JIT (Компилятор Just in Time)

Самая известная особенность PHP 8 – это компилятор Just-in-time (JIT) . Что такое JIT?

Предложение RFC описывает JIT следующим образом:

«PHP JIT реализован как почти независимая часть OPcache. Это может быть включено/отключено во время компиляции PHP и во время выполнения. Когда этот код включен, нативный код файлов PHP хранится в дополнительной области общей памяти OPcache, а обработчики op_array → opcodes []. Обработчики сохраняют указатели на точки входа в код JIT».

 

Итак, как мы попали в JIT и в чем разница между JIT и OPcache?

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

Выполнение PHP – это 4 этапа:

  • Лексирование/токенизация: Сначала интерпретатор читает код PHP и создает набор токенов.
  • Синтаксический анализ: интерпретатор проверяет, соответствует ли сценарий правилам синтаксиса, и использует токены для построения абстрактного синтаксического дерева (AST), которое представляет собой иерархическое представление структуры исходного кода.
  • Компиляция: Интерпретатор обходит дерево и переводит узлы AST в низкоуровневые коды операций Zend, которые являются числовыми идентификаторами, определяющими тип инструкции, выполняемой Zend VM.
  • Интерпретация: коды операций интерпретируются и запускаются на Zend VM.

На следующем рисунке показано визуальное представление основного процесса выполнения PHP.

Что нового в PHP 8 (функции, улучшения и JIT-компилятор)

Базовый процесс выполнения PHP

 

Итак, как OPcache делает PHP быстрее? А что меняется в процессе исполнения с JIT?

  1. Расширение OPcache
  2. Предварительная загрузка
  3. JIT – Компилятор Just in Time
Читать  Как исправить ошибки соединения с базой данных в WordPress

 

Расширение OPcache

PHP – это интерпретируемый язык. Это означает, что при запуске сценария PHP интерпретатор анализирует, компилирует и выполняет код снова и снова при каждом запросе. Это может привести к потере ресурсов процессора и дополнительного времени.

Вот где расширение OPcache вступает в игру:

«OPcache повышает производительность PHP, сохраняя байт-код предварительно скомпилированного скрипта в общей памяти, тем самым устраняя необходимость в PHP загружать и анализировать скрипты при каждом запросе».

 

При включенном OPcache интерпретатор PHP проходит 4-этапный процесс, упомянутый выше, только при первом запуске сценария. Поскольку байт-коды PHP хранятся в общей памяти, они сразу же доступны как низкоуровневое промежуточное представление и могут быть сразу выполнены на виртуальной машине Zend.

Процесс выполнения PHP с включенным OPcache

Процесс выполнения PHP с включенным OPcache

 

Начиная с PHP 5.5 расширение Zend OPcache доступно по умолчанию, и вы можете проверить правильность его настройки, просто вызвав скрипт  phpinfo() на своем сервере или проверив файл php.ini.

Раздел Zend OPcache на странице phpinfo

 

Предварительная загрузка

OPcache был недавно улучшен за счет реализации предварительной загрузки , новая функция OPcache добавлена ​​в PHP 7.4. Предварительная загрузка обеспечивает способ сохранения указанного набора сценариев в памяти OPcache «до запуска любого кода приложения», но это не приносит ощутимого улучшения производительности для типичных веб-приложений.

С JIT PHP делает шаг вперед.

 

JIT – Компилятор Just in Time

Даже если коды операций имеют форму низкоуровневого промежуточного представления, они все равно должны быть скомпилированы в машинный код. JIT «не вводит никакой дополнительной формы IR (промежуточное представление)», но использует DynASM (Dynamic Assembler для механизмов генерации кода) для генерации нативного кода непосредственно из байт-кода PHP.

Короче говоря, JIT переводит горячие части промежуточного кода в машинный код. Обойдя компиляцию, она сможет значительно улучшить производительность и использование памяти.

Но сможет ли JIT эффективно улучшить производительность WordPress?

 

JIT для Live Web Apps

Согласно JIT RFC, своевременная реализация компилятора должна улучшить производительность PHP. Но действительно ли мы испытали бы такие улучшения в реальных приложениях, таких как WordPress?

Читать  Что это: роль пользователя

Ранние тесты показали, что JIT заставил бы загруженные с высокой нагрузкой процессоры работать значительно быстрее, однако RFC предупреждает:

«… Как и предыдущие попытки – в настоящее время он, похоже, не значительно улучшает реальные приложения, такие как WordPress (с opcache.jit = 1235 326 запросов/сек против 315 запросов/сек).

Планируется приложить дополнительные усилия, улучшая JIT для реальных приложений, используя профилирование и умозрительную оптимизацию».

 

Если JIT включен, код будет выполняться не виртуальной машиной Zend, а самим процессором, что повысит скорость вычислений. Веб-приложения, такие как WordPress, также зависят от других факторов, таких как TTFB, оптимизация базы данных, HTTP-запросы и т. д.

Поэтому, когда речь заходит о WordPress и аналогичных приложениях, не стоит ожидать значительного увеличения скорости выполнения PHP. Тем не менее, JIT может принести ряд преимуществ для разработчиков.

По словам Никиты Попова:

«Преимущества JIT-компилятора приблизительно (и как уже было указано в RFC):

  • Значительно лучшая производительность для числового кода.
  • Немного лучшая производительность для «типичного» кода PHP веб-приложения.
  • Потенциал для переноса большего количества кода с C на PHP, потому что PHP теперь будет достаточно быстрым».

 

Итак, хотя JIT вряд ли принесет значительные улучшения производительности WordPress, он будет обновлять PHP до следующего уровня, делая его языком, на котором многие функции теперь могут быть написаны непосредственно.

Недостатком, однако, будет большая сложность, которая может привести к увеличению затрат на обслуживание, стабильность и отладку.

По словам Дмитрия Стогова:

«JIT чрезвычайно прост, но в любом случае увеличивает уровень сложности PHP, риск появления новых ошибок и стоимость разработки и обслуживания».

 

Предложение включить JIT в PHP 8 было принято 50 голосами против 2.

 

Продолжение:

  1. Что нового в PHP 8 (функции, улучшения и JIT-компилятор). Часть 2
  2. Что нового в PHP 8 (функции, улучшения и JIT-компилятор). Часть 3

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читайте также

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close