Фреймворки PHP5: автозагрузка и кэширование кода операции - PullRequest
10 голосов
/ 21 декабря 2009

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

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

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

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

1 Ответ

5 голосов
/ 22 декабря 2009

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

Хорошая ветка для списка рассылки, которую можно прочитать, будет в списке рассылки Zend Frameworks:

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

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

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

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

...