PHP Benchmarks

Изучение производительности PHP-скриптов

Настройки отображения темы Показывать по сообщений с сортировкой .
Выводить , отправленные .
Одна страница
Распечатать
4X_Pro
Создатель сайта
Всего сообщений: 3443
Зарегистрирован: 9 дек. 2015 г., 19:20
Рейтинг пользователя: 1658

0
. Редактировалось 1 раз, последний — #1
Как известно, я помешан на производительности и периодически тестирую разные аспекты языков программирования с этой точки зрения. Результаты буду выкладывать в эту тему. Если есть идеи, что еще можно померить, пишите.

Ребята, давайте жить спокойно!

4X_Pro
Создатель сайта
Всего сообщений: 3443
Зарегистрирован: 9 дек. 2015 г., 19:20
Рейтинг пользователя: 1658

0
. Редактировалось 1 раз, последний — #2
Сегодня решил проверить, остается ли верным утверждение, что for быстрее foreach, в PHP 7 (впервые с этим утверждением я столкнулся во времена PHP4 на сайте PHPClub). Как выяснилось, разница несущественна и находится в пределах погрешности измерений. Более того, в разных измерениях получались разные результаты: иногда быстрее оказывался for, иногда — foreach.

Вот результаты, полученные на моем компьютере:
1 испытание:
For exec time: 13.21497797966
Foreach exec time: 13.658958911896

2 испытание:
For exec time: 13.949849128723
Foreach exec time: 13.773871898651

3 испытание:
For exec time: 13.587599039078
Foreach exec time: 13.758492946625

4 испытание:
For exec time: 13.502116918564
Foreach exec time: 13.538818120956

5 испытание:
For exec time: 13.450010061264
Foreach exec time: 13.487359046936

6 испытание:
For exec time: 13.711478948593
Foreach exec time: 13.646157026291

Условия измерения:
Процессор: Intel(R) Core(TM) i7-3537U CPU @ 2.00GHz, cpu family : 6, model : 58, stepping : 9, cache size : 4096 KB
Оперативная память — 6 Гб, swap отсутствует.
Версия PHP:
PHP 7.0.32-0ubuntu0.16.04.1 (cli) ( NTS )
Copyright © 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright © 1998-2017 Zend Technologies
   with Zend OPcache v7.0.32-0ubuntu0.16.04.1, Copyright © 1999-2017, by Zend Technologies

Исходный код скрипта для измерения — см. в приложенном файле.

Еще в процессе измерения заметил периодические «всплески» времени выполнения до 15 секунд и даже более. Сначала я их списывал на то, что процессор нагревается и начинает пропускать такты. Но даже когда я принял меры (перед каждым измерением выдерживал компьютер в режиме ожидания и убеждался, что он охладился до 48 градусов — его нормальной рабочей температуры), эти всплески никуда не исчезали. Более-менее стабильные результаты стали появляться только после того, когда я отключил сеть.
Прикрепленные файлы:

Ребята, давайте жить спокойно!

4X_Pro
Создатель сайта
Всего сообщений: 3443
Зарегистрирован: 9 дек. 2015 г., 19:20
Рейтинг пользователя: 1658

0
. Редактировалось 2 раза, последний — #3
Еще один вопрос, которым я часто задавался — что лучше: работать с массивами или объектами.
Сделал скрипт, который создает массив из 10 тысяч либо массивов-хешей, либо объектов, содержащих по 50 строковых полей в каждом, и измерил время создания всего перечисленного и объем пикового использования памяти. Результаты:

Массивы:
Memory used: 63955960 bytes, time: 0.32594585418701 seconds.
Memory used: 63955960 bytes, time: 0.3428430557251 seconds.
Memory used: 63955960 bytes, time: 0.28496503829956 seconds.
Memory used: 63955960 bytes, time: 0.33560585975647 seconds.
Memory used: 63955960 bytes, time: 0.33985209465027 seconds.

Объекты:
Memory used: 64478816 bytes, time: 0.3552839756012 seconds.
Memory used: 64478816 bytes, time: 0.35315895080566 seconds.
Memory used: 64478816 bytes, time: 0.36479520797729 seconds.
Memory used: 64478816 bytes, time: 0.34801006317139 seconds.
Memory used: 64478816 bytes, time: 0.34800601005554 seconds.

Таким образом, достаточно четко видно, что массивы и более экономны по памяти, и работа с ними, хоть и незначительно, всего на несколько процентов, но происходит быстрее. Поэтому для простого хранения данных (например, извлеченных из базы или предназначенных для шаблонизатора), когда возможности ООП не нужны, использование массивов более предпочтительно.

Условия измерения — те же самые, что и в предыдущем сообщении, скрипты прилагаются.
Прикрепленные файлы:

Ребята, давайте жить спокойно!

4X_Pro
Создатель сайта
Всего сообщений: 3443
Зарегистрирован: 9 дек. 2015 г., 19:20
Рейтинг пользователя: 1658

0
#4
Еще одно мое старое исследование: XML или JSON — скорость десерализации данных из JSON и XML. Из него видно, что JSON выгоднее по скорости, XML — по памяти. Возможно, со временем проведу измерение и для сериализации.

Ребята, давайте жить спокойно!

4X_Pro
Создатель сайта
Всего сообщений: 3443
Зарегистрирован: 9 дек. 2015 г., 19:20
Рейтинг пользователя: 1658

0
. Редактировалось 2 раза, последний — #5
Задался вопросом, что эффективнее: собирать длинную строку через множество операций конкатенации или же заполнять строками массив, а потом делать join. Оказалось, что первое — почти на порядок эффективнее по времени и в несколько раз — по памяти:

Использование массива с последующим объединением:
Время: 0.01195502281189  (11.9 мс)
Память: 2 203 672 байтов

Конкатенация строк:
Время: 0.0018341541290283 (1.8 мс)
Память: 663 552 байтов

Скрипт для тестирования прикладываю.
Прикрепленные файлы:

Ребята, давайте жить спокойно!

Одна страница
Распечатать

У вас нет прав для отправки сообщений в эту тему.

Задать вопрос

Здесь можно задать мне вопрос или спросить совета по любой теме, затронутой в блогах или на форуме. После того, как я отвечу, вопрос и ответ появятся в соответствующем разделе. Но не забываем, что я — сторонник slow life, поэтому каких-либо сроков ответов не обещаю. Самые интересные вопросы станут основой для новых тем на форуме или записей в блоге.
Сразу предупреждаю: глупости, провокации, троллинг и тому подобное летит прямо в /dev/null.