Опкод — промежуточное представление кода, которое исполняется Zend VM. PHP, как и Java, сначала транслирует код в опкоды. Только если Java сохраняет байткод в
.class, то PHP — нет. Для этого и существует OPcache.⚠️ Проблема:
При вызове стандартных функций без обратного слэша (например,
explode()), PHP сначала пытается найти функцию в текущем пространстве имён. Это резолвинг — лишнее действие, которого можно избежать.💡 Решение:
Добавить
\ перед вызовами глобальных функций (\explode(), \strlen() и т.д.), тем самым указывая интерпретатору сразу на нужное пространство.🔬 Бенчмарки:
Проведено сравнение двух версий кода — с бэкслешами и без:
0.576μs → без бэкслешей 0.536μs → с бэкслешамиРазница — 7%, или 40 наносекунд. Мизер? Да. Но в случае 1000+ вызовов — уже ощутимо. В контексте фреймворков, обрабатывающих сотни запросов в секунду, это может суммарно повлиять.
🛠️ Что делать:
• Включить в проекте
PHP-CS-Fixer с правилом native_function_invocation• Или приучиться добавлять
\ вручную• Для любителей хардкора — реанимировать устаревший PHP_CodeSniffer с нестабильным плагином
📌 Вывод:
Это не про магию ускорения. Это микрооптимизация, и в большинстве случаев она не даст серьёзного прироста. Но она точно иллюстрирует, как работает PHP под капотом — и где теряется время.
🔗 Хабр
Библиотека пхпшника