The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Сравнение производительности PHP 7.0, PHP 5.6.16 и HHVM 3.10.1

14.12.2015 12:06

Инженеры одного из хостинг-операторов, специализирующегося на размещении сайтов на базе WordPress, опубликовали результаты оценки производительности PHP 7.0 в сравнении с прошлой веткой PHP 5.6 и развиваемой инженерами Facebook виртуальной машины HHVM (HipHop Virtual Machine), снабжённой JIT-компилятором. Следует отметить, что стабильный выпуск HHVM 3.10.1 не является полностью совместимым с PHP 7.0, базовая совместимость с PHP 7.0 пока обеспечена только в экспериментальной ветке HHVM 3.11.

Тестирование проводилось с использованием WordPress 4.3.1, Drupal 8, Magento 2.0 CE, OctoberCMS build 309, PyroCMS v3 beta2, Laravel 5.1.11 и Flarum v0.1.0-beta.4. Во всех тестах, за исключением Laravel, наибольшую производительность продемонстрирвоал HHVM, но отставание PHP 7.0 было не столь существенным, как в случае использования PHP 5.6. Например, в тесте Magento PHP 7.0 и HHVM продемонстрировали 183.87 и 192.19 транзакций в секунду, а в WordPress - 357.69 и 306.24. В тесте Laravel PHP 7.0 даже обогнал HHVM. Тест форумом Flarum провести не получилось, так как его не удалось запустить с HHVM и PHP 7. В тесте Drupal 8 разрыв в производительности оказался почти в два раза 1739.28 у HHVM против 917.10 у PHP 7.0.



  1. Главная ссылка к новости (https://kinsta.com/blog/the-de...)
  2. OpenNews: Проект Wikipedia перешёл на использование HHVM для выполнения PHP-кода
  3. OpenNews: Facebook открыл код транслятора из языка Hack в PHP. Обновление PHP 5.6.3, 5.5.19 и 5.4.35
  4. OpenNews: Facebook представил Hack, вариант языка PHP со статической типизацией
  5. OpenNews: Facebook анонсировал виртуальную машину HipHop и JIT-компилятор для языка PHP
  6. OpenNews: Релиз языка программирования PHP 7.0
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/43515-php
Ключевые слова: php, hhvm, benchmark
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (50) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 12:14, 14/12/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Жаль JIT не вошёл в PHP 7, но зато есть куда двигаться в PHP 8.
     
     
  • 2.3, Anik (?), 12:29, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Может тогда уж сразу переходить на HHVM и не ждать PHP 8?
     
     
  • 3.46, Keltanas (?), 17:05, 15/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    А вы пробовали использовать его в продакшене не перезапуская каждые пол часа?
     
  • 3.48, SubGun (??), 08:11, 17/12/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Он валится от каждого чиха. Там, где php просто в лог ошибку пишет, hhvm падает совсем. Это ппц как тупо.
     
  • 2.49, Аноним (-), 13:19, 18/12/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Лучше пусть SIMD адаптируют, JIT не поможет.
     

  • 1.2, noname.htm (?), 12:26, 14/12/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Жаль, что Jommla! в тест не попала.
     
     
  • 2.24, Нанобот (ok), 17:37, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • –2 +/
    и битрикс
     
     
  • 3.45, Georges (ok), 15:07, 15/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Битрикс не работает на PHP 7.0.0
     

  • 1.4, index.php (?), 12:30, 14/12/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Неплохо
     
  • 1.5, Аноним (-), 12:39, 14/12/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –10 +/
    О как! Слышал от знакомого пхпешника, что скорость PHP уже можно сравнить с С++. А HHVM выходит побыстрее С++ будет. =)
     
     
  • 2.6, Аноним (-), 12:45, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +41 +/
    > Слышал от знакомого пхпешника, что скорость PHP уже можно сравнить с С++

    С кодом на C++, написанным пехапешником? Верю.

     
     
  • 3.50, Ostrich (?), 03:22, 25/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    АХахахахаха
     
  • 2.7, Йода Мастер (?), 13:16, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    сравнить-то, конечно, можно.
    на 30-40% медленнее в сравнении 50-60% пхп5
     
  • 2.8, Аноним (-), 13:48, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Лет десять назад, кажется, в моде было утверждение, что Java код на ассемблере обгоняет.
     
     
  • 3.9, гость (?), 13:52, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Код написанный на С++, обгоняет сам себя, переписанный на PHP. О, как!
     
  • 3.15, rob pike (?), 14:29, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Смотря какой код. За счет JIT в определенных случаях запросто может обгонять.
     
     
  • 4.21, Аноним (-), 15:09, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +7 +/
    JIT'ов написаны уже сотни, но что-то на практике этих "определйнных условий" так ни у кого и не наступило. Забудьте, никогда никакие JITы, а тем более в динамически типизированных языках не обгонят нормальный скомпилированный код.
     
     
  • 5.28, rob pike (?), 18:43, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Про LuaJIT не слышали?
     
  • 5.32, Аноним (-), 19:02, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Срочно гуглить LibJit.
     
  • 3.22, Нимано (?), 15:23, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Лет десять назад, кажется, в моде было утверждение, что Java код на
    > ассемблере обгоняет.

    Особенно если его написал тот же жабо-программист )

    В 2005 уже был GCC4.
    Обогнать его или интеловский/мсовский конечно было можно, но отнюдь уже не "дуриком" и в основном на SIMD.

    За 2005 не скажу, но в 2009, после вдумчивой оптимизации (т.е. изучения документации интеля к конкретному цпу) можно было выжать 10-12 дополнительных процентов. Правда, ЧСХ – для этой самой конкретной модели, т.к. для других производительность падала на этот самый десяток процентов )

     
     
  • 4.36, anonymous (??), 22:34, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Да-да. Как-то пришло ко мне одно чудо с заявой что его программа на жабе быстрее эквивалента на C.

    Ничего не сказала рыбка, лишь посмотрела на вызовы strlen() в условии цикла for() и ушла в глубокое море.

     
  • 2.47, Sen (?), 15:00, 16/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Бесспорно, взять PHP и сравнить эту программу с C++ на каком нибудь IBM PC/AT 286... PHP будет опережать код на C++!
     

  • 1.10, Аноним (-), 14:05, 14/12/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    т.е. движение в сторону типизации/строгости языка и внесения ясности, сказывается положительно на производительности приложений. Главное непереусердствовать.

    Плюс, некоторые фреймворки, демонстрируют неплохие результаты. Видимо сказывается: грамотное использование новых возможностей языка, успешное применение подходов DI/IoC

    Было бы небезинтересно взглянуть тесты на производительность для: массивов, строк, подключений модулей, объектов.

     
     
  • 2.13, Штунц (?), 14:22, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    честно говоря, не ясно, зачем вообще нужны языки без строгой типизации

    неужто всго лишь забота о программистах, которым трудно пару переменных объявить перед использованием?

     
     
  • 3.14, тоже Аноним (ok), 14:25, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Всего лишь забота о программистах, у которых в противном случае 10% типового скрипта будут занимать переводы строки в число и обратно.
     
     
  • 4.27, Crazy Alex (ok), 18:18, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А где они столько строкового ввода берут, на который отдельный код надо писать, а не циклы какие-нибудь? Насчёт "обратно" - тем более бред - код останется РОВНО таким же, как и был. А вообще - такие проблемы решаются удобным синтаксическим сахаром и вменяемым проектированием интерфейсов
     
     
  • 5.33, тоже Аноним (ok), 19:18, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, например, "сырые" данные из БД - это таки строки. Которые, вполне возможно, не требуется преобразовывать для вывода, однако по ходу дела нужно, скажем, отсортировать по одному из столбцов. И в столбце этом может оказаться текст, дата, числа - где целые, где нет... так вот, сейчас в РНР это неважно, сравнение работает без явного приведения. Строки и даты будут сравниваться лексически, числа - по значению. Теоретически неявное приведение может привести к полной неразберихе, но именно в той области, где применяется PHP, оно сплошь и рядом оправдано. Потому что, вполне возможно, даже неверное приведение - совсем не сломает систему, просто порядок сортировки будет не тем, который, возможно, ожидался.
     
     
  • 6.34, DeadMustdie (??), 20:47, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Ну, например, "сырые" данные из БД - это таки строки.

    Это вы где-то ядреной травы покурили.
    Другое дело, что веб-разработка имеет дело в основном со строками, но вот базы данных тут совершенно ни при чем

     
     
  • 7.38, тоже Аноним (ok), 22:45, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Речь про РНР. Функции РНР возвращают результаты из БД в виде массива строк.
     
  • 7.43, cmp (??), 03:07, 15/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Время программулек, которые брали строковые аргументы из шелл, конвертили как им удобно и жили сами в себе, давно ушло. Сейчас межпроцессорное коммуникации строятся на json'оподобных наречиях, а участниками обмена часто является ПО несовместимое на уровне типов переменных, поэтому передавать бинарные структуры как есть даже в голову никому не приходит.
     
  • 6.35, анонимус (??), 21:32, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    не из БД, а из MySQL, но да ее впрочем и БД то назвать сложно.
     
     
  • 7.37, тоже Аноним (ok), 22:42, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    А самой распространенной БД в интернете - еще сложнее. Но придется.
     
  • 5.39, angra (ok), 00:05, 15/12/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну вот тебе простая задача: получить от пользователя два числа, перемножить их и вывести результат. Два преобразования из строки в число, одно полезное действие и преобразование из числа в строку.
    Теперь усложним задачу, при указании типа требуется различать не только строки и числа, но и числа разных типов, самый минимум byte/int/longint/float/double, а лучше больше десятка, известных процессору. Предусмотреть вариант с тем, что введенное или полученное число не влезет в указанный тип. Обеспечить максимальное сохранение мантисы. Все еще не понимаешь, зачем нужны языки в которых можно написать просто 'say $ARGV[0] * $ARGV[1]' ?
     
     
  • 6.41, Аноним (-), 02:15, 15/12/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А теперь учти, что вместо чисел от пользователя может прийти мусор и нужно корректно среагировать а не упасть всем скриптом.
    Может тогда будет понятно, чт простота выражения 'say $ARGV[0] * $ARGV[1]' это иллюзия.
     
     
  • 7.44, angra (ok), 03:39, 15/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ты не поверишь, но никакого падения не произойдет:

    $ perl -E 'say $ARGV[0] * $ARGV[1]'  dsf dsf
    0

     
  • 3.17, rob pike (?), 14:34, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > честно говоря, не ясно, зачем вообще нужны языки без строгой типизации

    Сравните Template Haskell и reader macros в LISP - начнете догадываться.

     
     
  • 4.25, Crazy Alex (ok), 18:11, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Одну экзотику с другой, причём обе вообще не относятся к делу? Зачем?
     
     
  • 5.29, rob pike (?), 18:46, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Для понятности.


     
  • 3.19, Blind Vic (ok), 14:48, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Вы не путаете строгую типизацию со статической?
     
  • 3.20, Нимано (?), 14:51, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > зачем вообще нужны языки без строгой типизации

    Т.е. по вашему, Си не нужен – зато "да здравствует питон!"? 0_o

     
  • 3.23, Аноним (-), 15:55, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, вместо $var = $_GET['id']; нужно будет писать $var = (int)$_GET['id']; Трогедия.
     
     
  • 4.26, Crazy Alex (ok), 18:13, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Например. И получать эксепшн, если оно не преобразуется. Вполне имеющий право на жизнь вариант.
     
     
  • 5.30, rob pike (?), 18:49, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    И не получать если преобразуется. Приехало "улица Ленина", положили в $last_name, порадовались статической типиизации, которая всех спасла.

     
  • 5.31, ram_scan (?), 18:52, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Лучше выловить эксепшн, чем потом в продакшне выяснять какого полового органа оно задним числом погоду в унитазе посчитало из-за того что одна обезьяна проверку ввода не сделала, а вторая вместо десятичной точки запятую поставила.
     
  • 5.40, Аноним (-), 01:38, 15/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ну если вы хотите быть уверены что там именно int, то сейчас вы делаете проверку на is_int(), а завтра будете ловить эксепшен.
     

  • 1.11, Анонимный Grammar (?), 14:12, 14/12/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А б*триксом протестировать слабо?
     
     
  • 2.16, тоже Аноним (ok), 14:32, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Так уже: http://idea.1c-bitrix.ru/to-make-the-product-compatible-with-php7/
    (слеш в конце съедает местный парсер).
     

  • 1.12, george (??), 14:19, 14/12/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А что это за такие мегапопулярные цмс системы OctoberCMS PyroCMS ? Обычные цмски вроде битрикса жумлы и прочей нечести на HHVM видимо не запускаются(в силу отсутствия ПХПшных модулей) ? =)
     
     
  • 2.18, тоже Аноним (ok), 14:39, 14/12/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Про битрикс ссылка выше, Джумла собирается выкатить версию 3.5 с заявленной поддержкой PHP 7 только к концу февраля.
    Так что - кто успел обеспечить совместимость, того и померили.
     

  • 1.42, Корабельная крыса (?), 02:18, 15/12/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Ничего, что жрет на один скрипт HHVM (87MB), PHP 7.0 (16мб)?
     
     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру