Производительность Zend Framework (автозагрузка) - PullRequest
3 голосов
/ 01 мая 2011

Я прочитал много статей о производительности ZF и до сих пор не могу понять, имеет ли смысл использовать некоторые другие приемы, если я включил кэширование байт-кода (APC)? Например. отключить автозагрузку и использовать вместо этого один большой php-файл со всеми необходимыми классами.

1 Ответ

11 голосов
/ 01 мая 2011

Я был удивлен, обнаружив, что это единственный вопрос на сайте с меткой производительности, автозагрузка, 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 фесту.

...