Я прочитал много статей о производительности ZF и до сих пор не могу понять, если я включил кэширование байт-кода (APC), есть ли смысл использовать какие-то другие трюки? Например. отключив автозагрузку и используя вместо этого один большой php-файл со всеми необходимыми классами.
Производительность Zend Framework (автозагрузка)
Ответы (1)
Я был удивлен, обнаружив, что это единственный вопрос на сайте с тегами производительности, автозагрузки, php. Что может быть лучше, чем это, чтобы развеять миф об автозагрузке № 1:
Современные, хорошо спроектированные автозагрузчики не сломают APC (или OPcache PHP 5.5) и не хуже по производительности, чем require_once
(за исключением накладных расходов на вызов функции, конечно).
Почему? Что ж, теперь у нас есть spl_autoload_register
, который позволяет добавлять несколько обработчиков автозагрузки. Это позволяет каждой сторонней библиотеке поставлять свой собственный автозагрузчик, который знает, как загружать файлы этой библиотеки, и пропускать остальные.
Например, Zend_Loader_Autoloader
Zend Framework 1 ограничивает себя попыткой загрузить классы, которые начинаются с определенного псевдопространства имен -- Zend_
(и все остальное, что пользователь попросит загрузить). Если он не запускается с желаемым псевдопространством имен, он просто возвращается и позволяет запуститься следующему загрузчику в стеке. Он также знает, что может найти Zend_Foo_Bar_Baz
в Zend/Foo/Bar/Baz.php
, поэтому ему не нужно искать путь включения вручную. Как и другие автозагрузчики современных фреймворков, он следует стандарту автозагрузки PSR-0.
Любые зависимости, установленные через composer, также таким же образом получают автоматически созданные автозагрузчики с пространством имен.
Именно это включает в себя очистку пути, что делает плохо спроектированные автозагрузчики отстойными. Обычно вы не видите их в современном PHP-коде. Интенсивные вызовы файловой системы stat
, возникающие в результате попыток найти файлы, часто снижают производительность. Ознакомьтесь с этой презентацией создателя PHP Расмуса Лердорфа, в которой он увеличивает производительность Wordpress посредством сравнительного анализа, профилирование и тщательное удаление медленных операций, таких как вызовы stat
.
require_once
-все, что было в прошлом, не нужно, когда вы используете современные библиотеки и у вас нет отстойного автозагрузчика. Это большая победа только тогда, когда вы отключаете apc.stat
если вы используете APC или возитесь с параметрами OPcache validate_
, revalidate_
и enable_file_override
INI если вы используете OPcache.
tl;dr: Если вы не знаете, что stat
включение включаемых файлов является самым большим узким местом, автозагрузчик Zend вполне подойдет, и вам не нужно прибегать к require_once
фестивалю.