PHP Profi

Сравнение PHP 7.1 и 7.2 производительности (на Docker и Symfony Flex) Перевод

РНР 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?

PHP 7.1 vs PHP 7.2 Dead Code Elimination Benchmarks for JSON API call

При вызове API-шного backend-контроллера без какого-либо Twig-рендеренга, различия между 7.1, 7.2 и 7.2-DCE довольно значительны. Похоже, оптимизации вступают в игру на 50 и 100 конкурентных запросах, где 7.1 начинает сдавать, а 7.2 остается постоянной.

PHP 7.1 vs PHP 7.2 Dead Code Elimination Benchmarks for JSON API call

Как обычно это происходит при изменении минорных версий, результаты тестов должны быть совсем мизерными, но, кажется, 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.

2017-10-29 оригинал

Последние посты

Комментарии

авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий