Каждый год мы стараемся тщательно измерять производительность разных версий PHP и HHVM на различных платформах. В этом году мы измерили четыре версии PHP и HHVM на 20 платформах/конфигурациях, включая WordPress, Drupal, Joomla!, Laravel, Symfony и многие другие. Также мы протестировали популярные решения для электронной коммерции вроде WooCommerce, Easy Digital Downloads, Magento and PrestaShop.
Мы всегда рекомендовали пользователям WordPress не пренебрегать преимуществами свежайших поддерживаемых версий PHP. Не только ради безопасности, но и ради повышения производительности. Причём речь идёт не только о WordPress, это по большей части справедливо для всех платформ. И сегодня мы продемонстрируем, как PHP 7.2 одерживает сокрушительную победу!
В этом году результаты бенчмарков очень сильно отличаются от прошлогодних, когда победителем стал HHVM. Нас впечатлило, что PHP 7.2 вырвался в лидеры по скорости работы. Нужно отметить, что применительно к WordPress HHVM больше не поддерживается и будет постепенно сходить со сцены. Мы больше не рекомендуем своим клиентам переходить на HHVM и отмечаем, что его поддержка другими платформами также снизилась.
Это хорошие новости для разработчиков и конечных пользователей, поскольку теперь можно сосредоточиться на PHP и создавать более быстрые сайты и веб-сервисы.
Мы протестировали 20+ платформ/конфигураций с пятью разными движками, и PHP 7.2 завоевал золотую медаль с результатом 14/20!
Бенчмарки PHP и HHVM (2018)
Для каждого теста мы брали последнюю версию каждой платформы и в течение минуты измеряли работу главной страницы с 15 одновременными пользователями. Тестовый стенд:
- Машина: 8x Intel® Xeon® CPU, 2,20 ГГц (работала в Google Cloud Platform и исполнялась в изолированном контейнере)
- ОС: Ubuntu 16.04.3 LTS
- Стек Docker: Debian 8, Nginx 1.13.8, MariaDB 10.1.31
- Движки PHP: 5.6, 7.0, 7.1, 7.2
- HHVM: 3.24.2
- OPCache: для WordPress, Joomla и Drupal мы использовали официальный образ Docker. Для остальных — тот же образ с включённым OPCache и рекомендованными настройками php.ini.
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
Тесты выполнял Торик Фирдаус (Thoriq Firdaus), один из разработчиков WordPress и инженер поддержки в Kinsta. Торик участвовал в создании WordPress Core и редактора локализации WordPress для Индонезии.
Что такое PHP?
PHP — это гипертекстовый препроцессор. Сегодня это один из самых популярных скриптовых языков в сети. Согласно W3Techs, PHP применяется на 83 % сайтов, использующих языки программирования на стороне сервера.
Что такое HHVM?
Из-за проблем с производительностью PHP команда Facebook разработала HipHop Virtual Machine (HHVM). Это система, использующая JIT-компиляцию (just-in-time) для преобразования PHP-кода в машинный код ради синергии PHP и железа, на котором этот код исполняется.
Протестированные платформы и конфигурации
Мы протестировали 20 платформ/конфигураций. В некоторых случаях из-за отсутствия поддержки конкретной версии PHP пришлось протестировать по несколько версий. Все измерения — количество запросов в секунду. Чем больше значения, тем лучше.
- WordPress 4.9.4
- WordPress 4.9.4 + WooCommerce 3.3.1
- WordPress 4.94 + Easy Digital Downloads 2.8.18
- Drupal 8.4.4
- Joomla! 3.8.5
- Magento 2 (CE) 2.1.11 + 2.2.2
- Grav CMS 1.3.10
- October CMS 1.0.433
- Laravel 5.4.36 + 5.6
- Symfony 3.3.6 + 4.0.1
- PyroCMS 3.4.14
- Pagekit 1.0.13
- Bolt CMS 3.4.8
- AnchorCMS 0.12.6 (pre-release)
- PrestaShop 1.7.2.4
- CraftCMS 2.6.3011
- ForkCMS 5.2.2
WordPress 4.9.4
Первой протестированной платформой стал, конечно же, наш любимый WordPress (возможно, мы немного предвзяты, поскольку ежедневно живём этой CMS). По сути, WordPress — ПО с открытым исходным кодом, которое можно использовать для создания прекрасных сайтов, блогов или приложений. Сегодня на WordPress приходится около 29 % всех сайтов в интернете, то есть более четверти.
Для измерения производительности WordPress мы использовали бесплатную тему Twenty Seventeen. Для заполнения взяли фальшивый контент из wptest.io и в течение минуты тестировали главную страницу, которую одновременно просматривают 15 пользователей.
- Количество публикаций на странице: 10, сгенерированы wptest.io.
- На боковой панели (Sidebar) есть только поиск.
Образ Docker взят из https://hub.docker.com/_/wordpress/
WordPress benchmarks
Результаты бенчмарков
- WordPress 4.9.4 PHP 5.6: 49,18 запроса в секунду
- WordPress 4.9.4 PHP 7.0: 133,55 запроса в секунду
- WordPress 4.9.4 PHP 7.1: 134,24 запроса в секунду
- WordPress 4.9.4 PHP 7.2: 148,8 запроса в секунду
- WordPress 4.9.4 HHVM: 144,76 запроса в секунду
Победил PHP 7.2, он оказался чуть быстрее HHVM. Это важная перемена по сравнению с бенчмарками 2016 года, когда однозначным победителем был HHVM. Кроме того, PHP для WordPress работает гораздо стабильнее. Мы сами сталкивались с многочисленными проблемами при эксплуатации HHVM. А если сравнить PHP 7.2 с PHP 5.6, то разница в производительности оказывается трёхкратной!
WordPress 4.9.4 + WooCommerce 3.3.1
WooCommerce — полностью кастомизируемая open-source платформа на основе WordPress. К тому же это одно из самых популярных решений для электронной коммерции, на нём работает свыше 42 % всех коммерческих сайтов.
Для этого теста мы взяли WordPress с установленным WooCommerce и бесплатной темой Storefront eCommerce.
- Количество товаров: 8 (по два в ряд).
- Страница магазина задана в качестве главной.
Образ Docker взят из https://hub.docker.com/_/wordpress/
WordPress + WooCommerce
Результаты бенчмарков
- WordPress 4.9.4 + WooCommerce 3.3.1 PHP 5.6: 34,47 запроса в секунду
- WordPress 4.9.4 + WooCommerce 3.3.1 PHP 7.0: 84,89 запроса в секунду
- WordPress 4.9.4 + WooCommerce 3.3.1 PHP 7.1: 86,04 запроса в секунду
- WordPress 4.9.4 + WooCommerce 3.3.1 PHP 7.2: 92,6 запроса в секунду
- WordPress 4.9.4 + WooCommerce 3.3.1 HHVM: 69,58 запроса в секунду
WooCommerce с трудом работал с HHVM, а PHP 7.2 победил PHP 7.1 с небольшим преимуществом.
WordPress 4.9.4 + Easy Digital Downloads 2.8.18
Easy Digital Downloads (EDD) создал Пипин Уильямсон (Pippin Williamson). Это бесплатный WordPress-плагин, помогающий авторам и разработчикам продавать цифровые продукты.
Посмотрев, как работает WooCommerce, мы протестировали WordPress с одним лишь установленным Easy Digital Downloads. Использовалась бесплатная тема EDD Starter Theme.
- Количество товаров: 6 (товары по умолчанию из самого плагина).
- Две картинки в списке продуктов отсутствуют.
Образ Docker взят из https://hub.docker.com/_/wordpress/
WordPress + Easy Digital Downloads
Результаты бенчмарков
- WordPress 4.9.4 + EDD 2.8.18 PHP 5.6: 76,71 запроса в секунду
- WordPress 4.9.4 + EDD 2.8.18 PHP 7.0: 123,83 запроса в секунду
- WordPress 4.9.4 + EDD 2.8.18 PHP 7.1: 124,82 запроса в секунду
- WordPress 4.9.4 + EDD 2.8.18 PHP 7.2: 135,74 запроса в секунду
- WordPress 4.9.4 + EDD 2.8.18 HHVM: 127,74 запроса в секунду
PHP 7.2 доминирует.
Drupal 8.4.4
Drupal — open-source CMS, заслужившая популярность благодаря модульной системе и сильному сообществу разработчиков. Она появилась в 2000-м и, согласно W3Techs, используется примерно на 2,2 % всех сайтов, занимая 4,4 % рынка CMS.
Мы использовали бесплатную тему Bartik 8.4.4. Отметим, что Drupal 8.4.x несовместима с PHP 7.2 (#2932574), поэтому движок мы не тестировали.
- Количество публикаций: 10, сгенерированы модулем Devel.
- Кеширование страницы выключено: https://www.drupal.org/node/2598914
- Образ Docker взят из https://hub.docker.com/_/drupal/
Drupal
Результаты бенчмарков
- Drupal 8.4.4 PHP 5.6: 7,05 запроса в секунду
- Drupal 8.4.4 PHP 7.0: 15,94 запроса в секунду
- Drupal 8.4.4 PHP 7.1: 19,15 запроса в секунду
- Drupal 8.4.4 PHP 7.2: не поддерживается
- Drupal 8.4.4 HHVM: 19,57 запроса в секунду
Поскольку последняя версия Drupal не поддерживает PHP 7.2, победителем стал HHVM. Хотя если посмотреть на улучшения производительности в предыдущих версиях PHP, то можно смело предположить, что 7.2 работал бы ещё быстрее.
Joomla! 3.8.5
Joomla! — бесплатная CMS с открытым исходным кодом для публикации контента. Она впервые вышла в августе 2005-го. Joomla! построена на основе фреймворка для веб-приложений по схеме «модель-представление-контроллер» и, согласно W3Techs, используется на 3,1 % всех сайтов в интернете.
Для тестирования Joomla мы использовали бесплатный шаблон Beez3.
- Количество публикаций: 4 (добавленные при установке образцы публикаций по умолчанию)
- Панели по умолчанию не использованы.
- Образ Docker взят из https://hub.docker.com/_/joomla/
Joomla!
Результаты бенчмарков
- Joomla! 3.8.5 PHP 5.6: 26,42 запроса в секунду
- Joomla! 3.8.5 PHP 7.0: 41,46 запроса в секунду
- Joomla! 3.8.5 PHP 7.1: 41,17 запроса в секунду
- Joomla! 3.8.5 PHP 7.2: 42,36 запроса в секунду
- Joomla! 3.8.5 HHVM: 51,84 запроса в секунду
На примере Joomla мы видим стабильный рост производительности PHP от версии к версии. Но HHVM всё ещё лидирует.
Magento 2 (CE) 2.1.11 + 2.2.2
Magento — популярная open-source платформа, написанная на PHP. Она появилась в марте 2008-го. Согласно W3Techs, Magento работает на 1,2 % всех сайтов.
Для тестирования Magento 2 benchmark мы использовали бесплатную тему Luma. Поскольку PHP 5.6 поддерживался только версией 2.1.11, нам пришлось прогонять бенчмарки на двух версиях Magento. Мы установили её с образцами данных и темой, идущими в комплекте. Для дополнительного тестирования использовали версию 2.2.2. Magento 2 пока не поддерживает PHP 7.2 и последнюю версию HHVM.
- Количество позиций: 7
- http://pubfiles.nexcess.net/magento/ce-packages/
Magento 2
Результаты бенчмарков
- Magento 2 (CE) 2.1.11 PHP 5.6: 10,75 запроса в секунду
- Magento 2 (CE) 2.1.11 PHP 7.0: 20,87 запроса в секунду
- Magento 2 (CE) 2.1.11 PHP 7.1: 29,84 запроса в секунду
- Magento 2 (CE) 2.1.11 PHP 7.2: не поддерживается
- Magento 2 (CE) 2.1.11 HHVM: не поддерживается
Поскольку Magento 2 не поддерживает PHP 7.2 и последнюю версию HHVM, победителем стал PHP 7.1. Впечатляет рост производительности от версии к версии.
Grav CMS 1.3.10
Grav — простая, но мощная open-source CMS, которой не требуется база данных. Её ещё иногда называют «CMS на основе неструктурированных файлов (flat-file)».
Мы использовали бесплатный пакет Clean Blog. Обратите внимание, Grav CMS больше не совместима с компилятором HHVM, а из сборки Travis удалена среда HHVM.
- Количество публикаций: 4 (предустановленные образцы в Clean Blog)
Выключено кеширование страниц и файлов https://learn.getgrav.org/advanced/performance-and-caching, кеширование Twig работает.
Grav CMS
Результаты бенчмарков
- Grav CMS 1.3.10 PHP 5.6: 34,83 запроса в секунду
- Grav CMS 1.3.10 PHP 7.0: 53,37 запроса в секунду
- Grav CMS 1.3.10 PHP 7.1: 53,37 запроса в секунду
- Grav CMS 1.3.10 PHP 7.2: 55,12 запроса в секунду
- Grav CMS 1.3.10 HHVM: не поддерживается
PHP 7.2 снова одержал убедительную победу.
October CMS 1.0.433
October CMS — бесплатная open-source модульная CMS-платформа с собственным сервером, построенная на базе PHP-фреймворка Laravel. Впервые она вышла в мае 2014-го.
Мы использовали бесплатную тему Clean Blog. October CMS больше не совместима с PHP 5.6 и HHVM. И хотя мы cмогли обмануть инсталлятор, убрав проверку PHP, мастер конфигурирования вылетел с ошибкой 500.
Количество публикаций: 5 с двумя панелями слева (Recent posts и Follow me)
October CMS
Результаты бенчмарков
- October CMS 1.0.433 PHP 5.6: не поддерживается
- October CMS 1.0.433 PHP 7.0: 43,83 запроса в секунду
- October CMS 1.0.433 PHP 7.1: 47,95 запроса в секунду
- October CMS 1.0.433 PHP 7.2: 48,87 запроса в секунду
- October CMS 1.0.433 HHVM: не поддерживается
Два движка не поддерживаются, однако PHP 7.2 снова победил.
Приятно, что все эти не столь крупные CMS отказываются от поддержки старых версий PHP. Это одно из преимуществ, свойственных не слишком большим продуктам. К сожалению, когда речь заходит о WordPress и прочих платформах с большими долями рынка, прогресс замедляется из-за соображений обратной совместимости.
Laravel 5.4.36 + 5.6
Laravel — очень популярный open-source PHP-фреймворк, использующийся для создания веб-приложений. Он был разработан Тейлором Отвеллом (Taylor Otwell) и выпущен в июне 2011-го.
В этом тестировании мы использовали чистую HTML-тему. Тесты были прогнаны несколько раз, взято среднеарифметическое. Подробности можно найти здесь.
- Количество публикаций: 10, с циклом Blade
- База данных содержит одну таблицу
posts
- Таблица содержит шесть колонок
post_title
,post_content
,post_author
,created_at
иupdated_at
. - Сессии отключены.
Перед бенчмарками выполнены команды composer dump-autoload –classmap-authoritative, php artisan optimize –force, php artisan config:cache, php artisan route:cache.
Laravel 5.4.36
Результаты бенчмарков
- Laravel 5.4.36 PHP 5.6: 66,57 запроса в секунду
- Laravel 5.4.36 PHP 7.0: 114,55 запроса в секунду
- Laravel 5.4.36 PHP 7.1: 113,26 запроса в секунду
- Laravel 5.4.36 PHP 7.2: 114,04 запроса в секунду
- Laravel 5.4.36 HHVM: 394,31 запроса в секунду
HHVM — несомненный победитель.
Laravel 5.6 несовместим с HHVM и требует PHP 7.1 или выше.
Laravel 5.6
Результаты бенчмарков
- Laravel 5.6 PHP 5.6: не поддерживается
- Laravel 5.6 PHP 7.0: не поддерживается
- Laravel 5.6 PHP 7.1: 411,39 запроса в секунду
- Laravel 5.6 PHP 7.2: 442,17 запроса в секунду
- Laravel 5.6 HHVM: не поддерживается
Поразительная разница между результатами Laravel 5.6 PHP 7.2 и Laravel 5.4.36! Последние версии PHP явно пошли на пользу Laravel.
Symfony 3.3.6 + 4.0.1
Symfony — это набор многократно используемых PHP-компонентов и PHP-фреймворк для создания веб-приложений, API, микросервисов и веб-сервисов. Он вышел в октябре 2005-го.
Здесь мы использовали Symfony Demo с MySQL (по умолчанию используется SQLite). Тесты проведены несколько раз, взято среднеарифметическое. HHVM выкидывал ошибку 500. Подробности можно почитать здесь.
- Количество публикаций: 10
- Тестовый URL: /en/blog/
- composer dump-autoload -o, php bin/console doctrine:database:create, php bin/console doctrine:schema:create, php bin/console doctrine:fixtures:load, php bin/console cache:clear –no-warmup –env=prod
В основном файле (app.php) отключено кеширование (AppCache).
Symfony 3.3.6
Результаты бенчмарков
- Symfony 3.3.6 PHP 5.6: 81,78 запроса в секунду
- Symfony 3.3.6 PHP 7.0: 184,15 запроса в секунду
- Symfony 3.3.6 PHP 7.1: 187,6 запроса в секунду
- Symfony 3.3.6 PHP 7.2: 196,94 запроса в секунду
- Symfony 3.3.6 HHVM: не поддерживается
PHP 7.2 снова победил!
Symfony 4.0.1 требуется PHP 7.1 или выше. И снова HHVM выкидывал ошибку 500.
В версии 4.0.1 в основном файле (index.php) не реализован AppCache.
Symfony 4.0.1
Результаты бенчмарков
- Symfony 4.0.1 PHP 5.6: не поддерживается
- Symfony 4.0.1 PHP 7.0: не поддерживается
- Symfony 4.0.1 PHP 7.1: 188,12 запроса в секунду
- Symfony 4.0.1 PHP 7.2: 197,17 запроса в секунду
- Symfony 4.0.1 HHVM: не поддерживается
PHP 7.2 опять царь горы.
PyroCMS 3.4.14
PyroCMS — open-source расширение для Laravel, ускоряющее создание сайтов и приложений с помощью этого фреймворка.
Мы использовали бесплатную тему Accelerant Theme (идёт по умолчанию в PyroCMS). PyroCMS не работает в HHVM, вероятно, из-за Laravel.
- Количество публикаций: 5
Включён режим отладки (APP_DEBUG=true)
PyroCMS
Результаты бенчмарков
- PyroCMS 3.4.14 PHP 5.6: не поддерживается
- PyroCMS 3.4.14 PHP 7.0: 27,33 запроса в секунду
- PyroCMS 3.4.14 PHP 7.1: 27,81 запроса в секунду
- PyroCMS 3.4.14 PHP 7.2: 29,28 запроса в секунду
- PyroCMS 3.4.14 HHVM: не поддерживается
Результаты близки к PyroCMS, но PHP 7.2 опять был лучшим.
Pagekit 1.0.13
Pagekit — лёгкая модульная open-source CMS, позволяющая создавать прекрасные сайты. Она вышла весной 2016-го.
Мы использовали бесплатную тему One (идёт в Pagekit по умолчанию).
- Количество публикаций: 5
- Кеш отключён
Тестовый URL: /blog
Pagekit
Результаты бенчмарков
- Pagekit 1.0.13 PHP 5.6: 51,7 запроса в секунду
- Pagekit 1.0.13 PHP 7.0: 108,61 запроса в секунду
- Pagekit 1.0.13 PHP 7.1: 112,3 запроса в секунду
- Pagekit 1.0.13 PHP 7.2: 116,18 запроса в секунду
- Pagekit 1.0.13 HHVM: 61,16 запроса в секунду
Pagekit с трудом работал с HHVM. PHP 7.2 — безусловный победитель.
Bolt CMS 3.4.8
Bolt — это open-source инструмент управления контентом, который авторы стараются сделать как можно проще. Он построен на основе компонентов Silex и Symfony, использует Twig, а также SQLite, MySQL или PostgreSQL.
Мы использовали бесплатную тему Bolt Base 2016. HHVM не поддерживается (#6921).
- Количество публикаций: 5
- Тестовый URL: /entries
Сессии включены
Bolt CMS
Результаты бенчмарков
- Bolt CMS 3.4.8 PHP 5.6: 33,45 запроса в секунду
- Bolt CMS 3.4.8 PHP 7.0: 60,21 запроса в секунду
- Bolt CMS 3.4.8 PHP 7.1: 67,96 запроса в секунду
- Bolt CMS 3.4.8 PHP 7.2: 72,05 запроса в секунду
- Bolt CMS 3.4.8 HHVM: не поддерживается
Хорошо видно, что с каждой новой версией PHP производительность Bolt CMS растёт.
Anchor CMS 0.12.6 (pre-release)
Anchor — очень простая и компактная open-source система для ведения блогов.
Мы использовали бесплатную тему Default Theme.
Количество публикаций: 5
Anchor CMS
Результаты бенчмарков
- Anchor CMS 0.12.6 PHP 5.6: 495,33 запроса в секунду
- Anchor CMS 0.12.6 PHP 7.0: 546,02 запроса в секунду
- Anchor CMS 0.12.6 PHP 7.1: 565 запросов в секунду
- Anchor CMS 0.12.6 PHP 7.2: 561,73 запроса в секунду
- Anchor CMS 0.12.6 HHVM: 487,71 запроса в секунду
Результаты PHP 7.1 и PHP 7.2 очень близки, но PHP 7.1 оказался чуть быстрее.
PrestaShop 1.7.2.4
PrestaShop — популярное и очень быстро развивающееся open-source решение для интернет-магазинов. Первая версия вышла в 2008-м, и, согласно W3Techs, PrestaShop используется на 0,6 % всех сайтов.
Мы взяли бесплатную тему Classic Theme. PrestaShop не поддерживает HHVM.
- Количество товаров: 7 (примеры по умолчанию)
- Тестовый URL: /index.php
Кеширование страниц отключено, умное кеширование включено
PrestaShop
Результаты бенчмарков
- Prestashop 1.7.2.4 PHP 5.6: 61,96 запроса в секунду
- Prestashop 1.7.2.4 PHP 7.0: 108,34 запроса в секунду
- Prestashop 1.7.2.4 PHP 7.1: 111,38 запроса в секунду
- Prestashop 1.7.2.4 PHP 7.2: 111,48 запроса в секунду
- Prestashop 1.7.2.4 HHVM: не поддерживается
Результаты почти одинаковые, но PHP 7.2 на полноздри вырвался вперёд.
Craft CMS 2.6.3011
Craft CMS — продукт для разработчиков, дизайнеров и веб-специалистов, отличающийся гибкостью применения, широкими возможностями и простой использования.
Мы взяли бесплатную тему по умолчанию.
- Количество публикаций: 5
- Тестовый URL: /index.php?p=news
CraftCMS поставляется с собственным файлом Docker. Мы немножко настроили его ради совместимости с Nginx.
Craft CMS
Результаты бенчмарков
- Craft CMS 2.6.3011 PHP 5.6: 131,04 запроса в секунду
- Craft CMS 2.6.3011 PHP 7.0: 266,54 запроса в секунду
- Craft CMS 2.6.3011 PHP 7.1: 272,14 запроса в секунду
- Craft CMS 2.6.3011 PHP 7.2: 280,02 запроса в секунду
- Craft CMS 2.6.3011 HHVM: 26,28 запроса в секунду
Craft CMS плохо работает с HHVM. Но зато PHP 7.2 опять на коне!
Fork CMS 5.2.2
Fork — простая open-source CMS, в которой применяются компоненты Symfony. Здесь мы использовали бесплатную тему, идущую по умолчанию, Fork Theme. Fork CMS требуется PHP 7.1 или выше, она не поддерживает HHVM.
- Количество публикаций: 2 (идущие по умолчанию данные из ForkCMS)
Тестовый URL: /modules/blog
Fork CMS
Результаты бенчмарков
- Fork CMS 5.2.2 PHP 5.6: не поддерживается
- Fork CMS 5.2.2 PHP 7.0: не поддерживается
- Fork CMS 5.2.2 PHP 7.1: 10,68 запроса в секунду
- Fork CMS 5.2.2 PHP 7.2: 12,83 запроса в секунду
- Fork CMS 5.2.2 HHVM: не поддерживается
PHP 7.2 превзошёл по производительности PHP 7.1.
Мы в Kinsta перешли на PHP 7.2
Если эти результаты вас не убедили, то мы уж и не знаем, что вас вообще убедит. Просто дружеское напоминание, если вы клиент Kinsta: мы выпустили PHP 7.2 в декабре 2017-го. Если вам нужно увеличить производительность, можете легко перейти на PHP 7.2 одним кликом в панели MyKinsta.
Если вас беспокоит несовместимость со сторонними плагинами (это возможно), то именно для этого нужны площадки для стейджинга. Можете потестировать без риска для вашего production-сайта.
Впечатления от результатов бенчмарков
Как видите, PHP 7.2 по производительности лидирует на всех платформах.
- PHP 7.2 оказался самым быстрым движком в 14 из 20 конфигураций. Ещё две конфигурации (Drupal и Magento) пока не поддерживают PHP 7.2, так что результат вполне мог быть 16/20.
- Применительно к WordPress PHP 7.2 был самым быстрым во всех тестах (стоковый сайт WordPress, WooCommerce и Easy Digital Downloads).
- На примере многих результатов можно отметить рост производительности PHP от версии к версии. Поэтому так важно тестировать свой сайт, плагины и прочее и регулярно обновлять движок. Это пойдёт на пользу вашим посетителям и клиентам!
- Если ваш хостинг-провайдер не предлагает новые версии PHP, возможно, пора переезжать.
Комментарии (50)
maksold
09.03.2018 16:25Было бы здорово посмотреть на результаты Magento CE 1.9.3.8 и сравнить их с Magento 2.
vlx
09.03.2018 17:11Это две абсолютно разные платформы. Там общего только то, что они обе — ecommerce. С тем же успехом можно престашоп стравливать.
Вообще смущает 30 запросов в секунду на M2. Если это с включенным FPC то по сути автор тестировал memcached/redis/filesystem. Или FPC был выключен?iproger
10.03.2018 03:51Не менее важно чтобы там был продакшн-режим и разогретый кэш.
vlx
10.03.2018 12:20вся проблема в том, что если тестировать домашнюю страницу m2 и тестировать корзину — на luma производительность будет абсолютно разной. Потому что первая — закеширована в хлам, а во второй закеширован только хидер и футер.
В интернет-магазинах показатель для бенчмарка — количество заказов в минуту: это самая важная и тормознутая часть, обычно, а не RPS.iproger
10.03.2018 22:05В мадженте даже purchase order занимает до 3 секунд на хорошей машине, что уже говорить про всякие credit card. Правда, там сильное влияние 3-party сервисов.
vlx
11.03.2018 01:33Кокразтыке, всякие creditcard ненамного дольше выполняются, чем purchase order. Основной тормоз это sales/order. Тот же hosted payment это и есть purchase order просто с дополнительным редиректом на HPP и обратно.
youlose
09.03.2018 19:28А почему в ларавеле всё накешировали, а в симфони отключили appCache?
На сайте симфони опубликовали ссылку где в тестировании в 2 раза получилась разница в производительности www.phpbenchmarks.com/en
Как думаете почему у вас другие результаты?Akdmeh
09.03.2018 21:57Думаю, задачей было не сравнение фреймворков, а сравнение именно версий PHP.
Поэтому можно было включить какую-то опцию или отключить — важнее было узнать, как скрипт работает на конкретном PHP.youlose
10.03.2018 17:30Ну раз бенчмарки фреймворков неправильные, значит и вклад интерпретаторов неправильно отображается (на том сайте разница процентов в 15% между 7.1 и 7.2 только на симфони, а в посте её не видно)
Labutin
09.03.2018 21:18А кто-нибудь знает use case когда 7-я версия вдруг проигрывает 5-й? Не может же это выглядеть как серебрянная пуля. Или это тот самый случай, когда «серебряная пуля бывает»?
sumanai
09.03.2018 21:39Скорее это тот случай, когда прежнее решение было настолько кривым, что новое делает его по всем параметрам.
dzsysop
09.03.2018 21:49Согласен. Вообще, мне кажется, это нормально когда следующая версия лучше предыдущей. Мне кажется это нормальное ожидаемое поведение. :-) Ненормально обратное поведение, когда следующая версия значительно хуже предыдущей.
Akdmeh
09.03.2018 22:01PHP 7 это и есть серебрянная пуля (особенно в режиме PHP-FPM — прозрачная и понятная система, в которой понятно, на что идет память и мощь в отличии от менее очевидного режима работы как модуля). Иногда торчать на 5.6 приходится только ради библиотеки mysql_, когда проект переписывать не рентабельно и он работает в режиме совместимости.
popov654
09.03.2018 23:14А то, что было в версиях 5.2 — 5.4, на ваш взгляд, вообще трэш и угар? Интересно просто мнение профи, подскажите.
Akdmeh
09.03.2018 23:23Да я еще помню PHP 4.4.9, в которой ООП было больше на словах как немного усложненные массивы без областей видимости.
Я не такой уж и профи, чтобы свободно об этом говорить, но революционным показался именно 5.3, когда появились неймспейсы (хотя я тогда мало работал с большими скриптами и не до конца мог понять преимущества), а также анонимные функции, а в PHP 5.4 хорошо запомнился синтаксический сахар объявления массивов с помощью [].
Ну по сути 5.3 стал промышленным стандартом, до сих пор, наверное, можно было бы найти несколько хостингов с этой патченой версией.
Каждая версия добавляла немного в производительности, но только в 7.0 случился столь сильный рывок из-за плотного переписывания внутренностей.
Ну а второе важное явление в языке — это развитие экосистемы, которая помогала избегать велосипедостроения. Composer ну очень сильно упростил жизнь в поддержке модулей и фреймворков в более-менее актуальном состоянии.
Отделить собственно мое развитие от параллельного развития языка довольно сложно, но, думаю, если что — меня дополнят.popov654
11.03.2018 19:44Спасибо! Про синтаксис объявления массивов — читал, и правда удобно. ПРо неймспейсы знал, но не пользовался)
А если код совсем ООП не использует (и неймспейсы тоже), то есть сплошная лапша — будет ли выгода от переезда на семёрку, или ничего не изменится?
Просто вспоминается история из реальной практики, когда некий несложный код работал на 5.2, внезапно, чуть быстрее чем на 5.4, хотя, казалось бы…sumanai
11.03.2018 22:38В семёрке здорово ускорили работу с массивами, и я плохо представляю себе сложный код, пусть даже в лапшестиле, без массивов.
Tyranron
10.03.2018 11:03Целая горсть таких. К счастью,
composer require dshafik/php7-mysql-shim
«works like a charm». Больше проблем доставили другие несовместимости между 5 и 7. Но, в целом, даже дремучее legacy за один рабочий день вполне себе втаскивается на 7.2.Akdmeh
10.03.2018 11:05Знаю, но не в тех случаях, когда включая показ Notice, сталкиваешься с тысячами, тысячами подобных ошибок и не знаешь, что привнесено из-за изменения версии, а что из-за раздолбайства программистов.
Поэтому иногда подобные проекты доживают последние дни на комфортном 5.6
ExileeD
10.03.2018 20:23К слову. библиотека mysql_ никуда не делась, ее просто выкинули из поставки по умолчанию и перенесли в pecl. Ее уже не развивают, но поддерживают для работы в php 7 и выше. Как временное решение пойдет.
popov654
11.03.2018 19:45Опять же, давно интересовало — в чём причина отказа от этой библиотеки? Писали, что она морально устарела — так что мешало переписать её саму изнутри, сохранив полностью API? Это не потребовало бы менять клиентский код, писавшийся под неё, во многих проектах. Чем API mysqli лучше (про PDO не будем, там в принципе иной подход)?
sumanai
11.03.2018 22:42так что мешало переписать её саму изнутри, сохранив полностью API?
Получится mysqli. АПИ там не сильно отличается, в функциональном плане.
Чем API mysqli лучше
Там есть объектный подход, что позволяет не писать свою обёртку, так же там есть поддержка подготовленных запросов, что позволяет забыть о SQL инъекциях.
achekalin
09.03.2018 21:47Не к обеду, конечно, но насколько в России популярен движок Битрикса, а про него ни слова.
Это от «местами несовместимости», или просто возиться не хотелось?dzsysop
09.03.2018 21:50Думаю, просто многие избегают даже произносить это слово :-)
popov654
09.03.2018 23:14-1Просто Битрикс очень тяжёлый)
dzsysop
10.03.2018 01:30А может он просто не очень грамотно написан с точки зраения архитектуры? и подталкивает программистов к работе в режиме «костыль лучшее лекарство»? я не эксперт по битриксу, но из того что слышал это как бы не сборник «best practices», а скорее наоборот. Не хочу никого обидеть. :-) Кстати php ы этом смысле особенно до 7 не очень настаивает сам по себе на best practices. Считается практически одним из самых простых, порог входа в индустрию программирования со стороны php очень низкий. То есть доля недообразованных программистов в php значительно выше чем в других языках. Но зато нас намного больше! Берем количеством, а не качеством, так сказать :-(
popov654
11.03.2018 19:47Но Битрикс такой медленный не поэтому. Тем более, CMS Wordpress, которая вообще не использует ООП подход (раньше как минимум так было, сейчас не в курсе) — одна из самых быстрых. Так что ИМХО, проблема в излишней сложности архитектуры и навороченности…
AlexLeonov
09.03.2018 21:58Это же перевод. Не думаю, что за пределами ex-USSR кто-то вообще знает о существовании этой CMS.
bat
10.03.2018 09:47Было интересно кроме самих цифр увидеть какой-то анализ, почему в одних случаях разница между 7.0/7.1/7.2 существенна а в других нет, или почему так выбивается laravel c hhvm?
progress_man
10.03.2018 11:03Скажите пожалуйста, а почему, на ваш взгляд, не рассматривался Yii2? Разве он настолько не популярен?
SilverFire
10.03.2018 12:35Забавно, что в бенчмарк попал Craft CMS, сделанный на Yii2, но не попал сам Yii2 :)
annenkov
12.03.2018 00:13Возможно удивлю, но скорее там все таки еще Yii1
craftcms.com/changelog
Released on Jun 9, 2017 Updated Yii to 1.1.19.
Yii2 не упоминается здесь не разуSilverFire
12.03.2018 13:33Да, тестировали версию 2.6, которая на Yii1. Сейчас в разработке версия 3.0, которая на Yii2.
amr-dallin
10.03.2018 11:03Было любопытно посмотреть на тестирование версий PHP по отношению к Laravel. А что на счёт других фреймворков? Может кто видел свежие статьи на эту тему?
MrMiller
11.03.2018 13:45-1Не очень понимаю смысл сравнения производительности разных версий, в чем суть выпуска новой версии без увеличения скорости работы, было бы полезнее провести сравнения скорости работы php vs c#, java, nodejs, golang. Ах да, пыхыпэ там будет сильно отставать.
apapacy
11.03.2018 16:08Это ещё нужно проверить что будет отставать. Если говорить о php5 + symfony 2 то это так. Но теперь есть
Php7 + symfony 4. И все нужно проверять заново и на реальных задачах и с включенными кэшами и с insert в базы данных. И с 1000 конкурентных обращений. Эта статья мне понравилась не столько цифрами и выводами, сколько самим перечнем cms в которых авторы явно знают толк. Кстати если уже на то пошло не попала базовая cms от сообщества symfony — zulupopov654
11.03.2018 19:51Я в своё время написал микро-движок для блога, хранящий посты в файлах и не нуждающийся в БД. Было бы интересно потестить под нагрузкой в режиме «на чтение» и сравнить производительность с традиционными CMS. С одной стороны, СУБД очень умно кэшируют наиболее частые запросы, и там есть горячий кэш. С другой стороны, обращение к СУБД — это или межпроцессный обмен данными через сокет, или даже TCP запрос на другой узел, что как бы уже заведомо создаёт задержки =) Плюс управление сессиями, авторизация, проверка прав доступа на стороне СУБД.
AlexLeonov
11.03.2018 20:59>> межпроцессный обмен данными через сокет, или даже TCP запрос на другой узел
Конкурентный доступ к файлу на медленном диске всяко будет проигрывать нормальной БД.
youROCK
Странно, что не приведены настройки HHVM. Они тоже сильно влияют. Например, если собрать .hhbc файл, то ускорение составляет до 30% (этот режим является основным для фейсбука).
adeptoleg
Я думаю показательным тут является то что мордокнига делает HHVM под (а лучше сказать в основном для) себя, а пыха делается для всех. результат в графиках. Для некоторых задач лучше HHVM а ежели хочется стабильности + скорость то 7,2