2009-12-21 3 views
9

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

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

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

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

+4

от того, что я помню из моих дней Mediawiki + APC, авто нагруженных классов будут получать кэшируются APC. – jldupont

+0

@jldupont - я только что обновил ссылку на конкретный ответ, который заинтриговал меня, чтобы написать этот пост. –

ответ

5

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

Хорошего список рассылки нить для чтения будет это один на Zend рамочного списка рассылки:

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

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

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

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

+2

[обновленная ссылка] (http://osdir.com/ml/php.zend.framework.general/2007-01/msg00132.html) для полной цитаты. – Xeoncross

Смежные вопросы