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