Как стать автором
Обновить

Как мы сделали PHP 7 в два раза быстрее PHP 5. Часть 1: оптимизация структур данных

Время на прочтение18 мин
Количество просмотров37K
Всего голосов 121: ↑116 и ↓5+111
Комментарии20

Комментарии 20

Офигенная статья, респект автору!
Очень интересно читать, хоть я и не php developer.
Это действительно круто. Редко где можно увидеть чтобы новая версия была в 2 раза быстрее старой без каких-либо ограничений.
Есть похожий лайфхак с базами данных. Вначале создаёшь голые таблички. Потом когда спустя какое то время (в зависимости от нагрузок), всё начинает тормозить — вешаешь индексы, и вот у тебя с лёгкой руки уже ускорение даже не в разы, а на порядок!

Спасибо, очень классно. Мне, как мейнтейнеру скриптового движка, будет над чем подумать.

Мало, что понял, так как все эти оптимизации далеки от меня, но читать было бы интересно.
Если бы php причесали бы, улучшили стандартную библиотеку (убрали текущий цирк) и поубивали старый синтаксис, то была бы уже радость от использования языка, но такой поворот наверно превратил бы php в python 3.

Python… Только с константами, объектной моделью, менеджером зависимостей, трейтами, статическими полями, теперь уже и контролем над типами...

Я имел ввиду, что переход на питон 3 для многих был болезненным, а не в том, что пхп станет выглядить как питон.

Скажите — а при работе php (в качестве модуля apache или php-fpm+nginx) парсинг php-файла происходит при каждом запросе клиента или есть какое-никакое кеширование байткода?
Opcache есть, конечно.
Он (Opcache) встроен в стандартную поставку? А если я поменял файл и нажал обновил страничку — ка PHP об этом догадывается? Он проверяет дату изменения файла при каждом запросе?
Opcache в стандартной поставке с PHP 5.5, до этого был APC. При большом желании его можно выключить или накриворучить настройками.
Стандартно, да, следит на временем изменения файла, если этот файл закеширован. Из кеша можно выпилиться засчет переполнения максимального отведенного объема памяти или количества файлов.
На проде устанавливают
opcache.validate_timestamps=0
и при деплое сбрасывают кеш, искренне считая, что тут код не должен меняться и нечего тратить время на проверки всякие.
Довольно забавно видеть эту эволюцию. Как сначала не типизированность показываться как супер пупер киллер фича во множество языках. а через некоторое время — ой, нам нужны типы для читаемости, ой нам нужны типы для производительности

Ну так и мир вокруг менялся все эти годы и проекты росли.

НЛО прилетело и опубликовало эту надпись здесь
Так результат всегда хуже, когда у нас анонимные типы. По всем параметрам.
Я сейчас честно пытаюсь придумать вариант, где «без типовость» выигрывает… но не получается.
Такая информация из первых рук бесценна. Дмитрий выступал с похожим докладом в 2017 на кодефесте, была возможность послушать в живую. огонь.
Кому интересны еще подробности, на хабре была статья хардкорная статья про внутрянку массивов в семерке: habr.com/ru/company/mailru/blog/308240
PHP переводится как Personal Home Page

Но ведь… Hypertext Preprocessor…
Первоначально именно Personal Home Page (до третьей версии).

Было бы интересно почитать об встроенном сервере, который появился в 5.4
Хотелось бы узнать будет ли расти стандартная библиотека SPL, например хотелось бы увидеть там класс для работы с сокетами, по типу SPLFileObject
Какие расширение планируются добавиться в common
Какие расширения будут выпилены, есть куча расширении для xml

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