Рамки PHP5: автозагрузка и кеширование кода

Ряд фреймворков использует spl_autoload_register() для динамически загружаемых классов (т.е. контроллеров и моделей). Есть несколько сообщений о проблеме автозагрузки и кэширования кода операции. В одном из сообщений, в частности, есть ответ от @cletus, который ссылается на @Rasmus на ряд утверждений, которые оказываются сомнительными для тех, кто использует APC в качестве кэша операций операций:

  • Работает ли кеш-код opcode PHP с __autoload?

По всей видимости, нет никаких обсуждений относительно возможных альтернатив автозагрузке, которые не влияют на производительность кэша кода операции.

Есть ли способ обойти факт, что автозагруженные классы не добавляются в кеш-код байта?

Если нет, существуют ли альтернативные методы для динамической загрузки классов, которые будут кэшироваться?

Кажется, все еще есть путаница в этой теме, однако в большинстве случаев это сводится к снижению производительности.

Хорошая строка списка рассылки для чтения будет такой в ​​списке рассылки Zend Frameworks:

http://n4.nabble.com/ZF-and-Autoloading-td640085i20.html

Теперь корреляция здесь, потому что если вы наследуете еще не определенный класс, вы можете полагаться на автозагрузку, чтобы определить его (хотя вы также можете положиться на include), и на самом деле наличие средства автозагрузки может побудить вас использовать такие наследование. Но это не автозагрузка, которая приносит проблемы (см. После того, как Рамус «это не просто автозагрузка» в блоге для некоторых примеров неприятных вещей). Таким образом, правильная фраза будет «люди, которые склонны полагаться на автозагрузку, также должны использовать код, который бросает вызов связыванию времени компиляции». Конечно, это не может считаться ошибкой автозагрузки, и просто избегать автозагрузки не поможет с этим – вам также придется переписать свой код, чтобы скомпилировать время. И это не имеет никакого отношения к использованию автозагрузки с «новым», например.

Что касается замедления описанных выше эффектов, т. Е. Отсутствия привязки времени компиляции, то код действительно становится немного медленнее, и такой код может привести к некоторым неясным случаям к некоторым проблемам для операций с кешами (не в случаях автозагрузки), но в случаях, когда классы определяются внутри условий, или, не дай бог, в зависимости от условия создается другое определение), но он почти не имеет ничего общего с использованием автозагрузки. Тем не менее, уровень замедления, по-видимому, сильно усугубляется людьми – это ничто (и я повторяю, что ясное – НИЧЕГО ) по сравнению с преимуществами производительности, предоставляемыми кешем opcode из-за отсутствия операций на диске и этапа компиляции. Вероятно, вы могли бы составить искусственный бенчмарк, который продемонстрировал бы значительное замедление, но я не думаю, что какое-либо реальное приложение даже заметило бы.

источник: http://n4.nabble.com/ZF-and-Autoloading-td640085i20.html#a640092