Квест → Как хакнуть форму
Прошли: 77
РНР 7.2 выйдет в ближайшее время и на самом деле он уже достиг статуса релиз-кандидата. Недавно я исследовал Symfony Flex с Docker-ом, и подумал, что неплохо бы сделать небольшой тест-драйв для сравнения различий в PHP 7.1 и 7.2(RC4) относительно производительности по нескольким критериям.
Как и PHP 7.1, версия 7.2 не обещает каких-либо значительных улучшений производительности. Но она идет с некоторыми улучшениями, такими, как хэширование пароля Argon2 и набором обновлений для большинства современных PHP-проектов. С помощью контейнеров, ставших нормой, переключение версий на хостинге стало простой операцией. Так что сравнить 7.1 и 7.2 не составит труда. Итак.
Тестируемое приложение — гибридное приложение портированное на Symfony Flex, которое я сделал еще в январе. Проект теперь имеет конфигурацию, необходимую для запуска его с Docker, а весь исходный код доступен на GitHub. Настройка Docker-а основана на примере для Symfony Flex Кевина Дунгласа (Kevin Dunglas), работать с которым одно удовольствие.
Тесты запускались на виртуальном выделенном сервере (VPS) с процессором a1 и 1 Гб оперативной памяти. Для установки PHP использовались официальные образы PHP-FPM для PHP 7.2 RC4 и PHP 7.1. В качестве базы данных используется SQLite, с контроллером API, который делает несколько простых кэширований чтобы удостовериться, что мы не тестируем БД.
Тесты запускались три раза, и брался средний результат. В дополнение к стандартной конфигурации PHP 7.2, я также протестировал с включенной оптимизацией Dead Code Elimination (DCE), которая будет развиваться в PHP 7.3.
Используя контроллер первой страницы с Twig-рендеренгом обнаружились некоторые различия в PHP 7.1 и 7.2, которые выражаются в нескольких процентах разницы. DCE, похоже, еще больше повышает производительность, что делает разницу между PHP 7.1 и 7.2 значительной на более высоком количестве конкурентных запросов. Возможно в результате улучшений OPCache?
При вызове API-шного backend-контроллера без какого-либо Twig-рендеренга, различия между 7.1, 7.2 и 7.2-DCE довольно значительны. Похоже, оптимизации вступают в игру на 50 и 100 конкурентных запросах, где 7.1 начинает сдавать, а 7.2 остается постоянной.
Как обычно это происходит при изменении минорных версий, результаты тестов должны быть совсем мизерными, но, кажется, PHP 7.2 поставляется с ощутимым повышением скорости — по крайней мере с Symfony Flex (с компонентами из 3.3) при работе на большом количестве конкурентных запросов. Конечно, тут нет такого рывка, как в PHP 5.7 и 7.0, но, как говорится, это было ожидаемо. Тем временем команда PHP продолжает работать над 7.3 с дальнейшими DCE-улучшениями и JIT-движком, над которым сейчас ведётся работа.
Стоит отметить, что существует утечка памяти в PHP 7.2 (RC4) при запуске бенчмарков, так что вы, возможно, захотите установить PHP-FPM настройку pm.max_requests на что-то другое, чем дефолтное значение 0, чтобы избежать свопинга при долго запущенных потоках. В частности, это происходит только при вызове отображаемой (с Twig-рендерингом) страницы, но не при вызове API.