ProCloud Yandex
06.03.2023
читать 12 минут

Обзор PHP 8: что изменилось, рекомендации по тонкой настройке

/upload/iblock/fe4/i86zq1ycm47ts8cpp8drtzt8e4lyq4za/hex-textured-background-networking.jpg

С выходом PHP 8 разработчики получили доступ ко множеству новых функций и улучшений, которые делают написание кода на PHP более быстрым, безопасным и эффективным.

В этой статье мы рассмотрим некоторые из наиболее значительных изменений и новых возможностей, представленных в PHP 8, включая JIT-компилятор, поддержку типов union и именованные аргументы. Также мы приведем несколько рекомендаций по оптимизации и тонкой настройке.

PHP 8: Что нового?

Именованные аргументы (Named arguments)

Эта функция позволяет разработчикам передавать аргументы в функции, используя их имена, а не позиции. С их помощью разработчики могут пропускать необязательные аргументы, имеющие значения по умолчанию, и передавать только те, которые им нужны, причем в любом порядке. Это делает код более читабельным и снижает вероятность передачи неверного значения неверному параметру.

Named arguments
Named arguments

Поддержка атрибутов

Это нововведение позволяет добавлять структурированные метаданные к свойствам, методам, функциям и параметрам классов. Метаданные можно использовать для различных целей, например, для документирования кода или добавления информации для других инструментов.

Один из примеров использования этой функции ― автоматическая генерация документации API. Другой пример ― автоматическая проверка параметров функций на основе их метаданных. Таким образом, атрибуты обеспечивают PHP-разработчикам большую гибкость и расширяемость кода.

Поддержка атрибутов
Поддержка атрибутов

Продвижение свойств конструктора (Constructor property promotion)

Эта функция упрощает процесс определения и инициализации свойств объекта. До этого разработчикам приходилось определять свойства объекта, а затем инициализировать их в методе конструктора, что отнимало время и могло приводить к ошибкам.

Благодаря функции Constructor Property Promotion разработчики теперь могут определять и инициализировать свойства объектов непосредственно в методе конструктора, сокращая объем необходимого кода и улучшая его читабельность.

Constructor property promotion
Constructor property promotion

Поддержка типов union

В PHP 8 разработчики могут указывать, что аргумент функции или возвращаемое значение может быть одним из нескольких возможных типов, а не только одним конкретным типом. Например, функция, ожидающая в качестве аргумента целое число или число float, теперь может быть определена как принимающая тип union "int|float".

Аналогично, функция, возвращающая строку или null, может быть определена как возвращающая тип union "string|null". Union-типы обеспечивают большую гибкость в определении функций и могут облегчить чтение и поддержку кода.

Union types
Union types

Поддержка выражений Match

Выражение Match позволяет сопоставить заданное значение с набором возможных случаев и соответствующих им действий. Синтаксис похож на оператор switch, но с большей гибкостью в плане шаблонов, которые могут быть сопоставлены. Выражения Match могут применять различные типы шаблонов, такие как литералы, переменные и другие, а также иметь несколько условий и действий в одном операторе. Таким образом, Match-выражения ― это полезный инструмент для оптимизации кода.

Match expression
Match expression

JIT-компилятор

JIT, или Just-In-Time компиляция ― это технология, значительно повышающая скорость выполнения кода в языках программирования. Механизм JIT в PHP 8 компилирует машинный код непосредственно перед его исполнением. Движок JIT также способен определять части кода, которые выполняются чаще всего, и компилировать их в машинный код, повышая общую производительность приложения.

Особенно значительный прирост скорости получается в тех случаях, когда нужно выполнять много математических операций. Хотя JIT-компиляция не включена по умолчанию в PHP 8, ее можно легко включить, изменив настройки конфигурации.

Just-In-Time compilation

Слабые карты (weak maps)

Слабые карты предоставляют возможность связывать объекты с метаданными, не мешая при этом сборщику мусора удалять объекты из памяти. Это полезно в сценариях, когда вам нужно связать некоторые данные с объектом, но при этом автоматически удалять объект, когда он больше не нужен. Данные также будут автоматически удалены вместе с объектом. Это поможет предотвратить утечки памяти и повысить производительность в долгоиграющих процессах. Например, слабая карта может быть использована для запоминания результата вычислений.

Weak maps

Как использовать преимущества PHP 8 для лучшей производительности?

Вот несколько советов, как вы можете оптимизировать производительность PHP 8:

Используйте кэширование OpCode

В PHP 8 появился новый кэш OpCode под названием "Zend OPCache", который может значительно ускорить работу вашего приложения. Обязательно включите его в файле php.ini и настройте параметры под ваше конкретное приложение.

Оптимизируйте запросы к базе данных

Запросы к базе данных часто являются узким местом в веб-приложениях. Убедитесь, что вы используете максимально эффективные запросы, с надлежащим индексированием и кэшированием, где это возможно. Кроме того, можно использовать конструктор запросов, который генерирует оптимизированные запросы.

Сократите количество вызовов функций

Вызовы функций могут снизить производительность вашего приложения, особенно если вы вызываете одну и ту же функцию несколько раз. Рассмотрите возможность кэширования результатов вызовов функций или, по возможности, объедините их в один вызов.

Используйте lazy loading

Загрузка ресурсов только тогда, когда они необходимы (lazy loading) может значительно повысить производительность вашего приложения. Например, вы можете использовать методы "ленивой" загрузки для таких объектов, как изображения, видео и большие наборы данных.

Минимизируйте файловый ввод-вывод

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

В заключение

Наше облако поддерживает PHP8
arrow
arrow hover

С выходом PHP 8 веб-разработчики получили доступ к целому ряду новых функций и улучшений, позволяющих оптимизировать безопасность, эффективность и скорость работы веб-приложений. Последняя версия включает в себя мощный JIT-компилятор, Constructor Property Promotion, а также другие значительные обновления. Создаете ли вы веб-приложение с нуля или обновляете уже существующее, новые функции PHP 8 открывают широкие возможности для повышения производительности вашего сайта, оптимизации процессов разработки и повышения удобства работы пользователей.


Новости
27 декабря 202327.12.2023
Продуктовый дайджест 2023
20 декабря 202320.12.2023
читать 2 минутычитать 2 мин
Новые тарифы и возможности