Я только что прочитал о шаблоне дизайна «ленивый груз».Lazy loading? Лучше ли это избегать?
Можно ли злоупотреблять ленивой загрузкой для загрузки всех классов и забыть о include(..)
целиком?
Каковы недостатки этого подхода?
Я только что прочитал о шаблоне дизайна «ленивый груз».Lazy loading? Лучше ли это избегать?
Можно ли злоупотреблять ленивой загрузкой для загрузки всех классов и забыть о include(..)
целиком?
Каковы недостатки этого подхода?
Пара точки на автозагрузке:
Вы увидите хорошую производительность улучшение при использовании автозагрузки против всегда, включая все ваши файлов всего время (тем более, что количество файлов растет больше и больше).
При реализации автозагрузку, то лучше использовать spl_autoload_register()
чем __autoload()
.
Хотя много раз, когда люди говорят о отложенной загрузки в PHP, они говорят о чем-то вроде следующего:
class Foo {
protected $bar = null;
public function getBar() {
if ($this->bar == null) {
$this->bar = ExpensiveOperation();
}
return $this->bar;
}
}
Тогда вы только загрузить свойство, когда он на самом деле нужно использовать , и не каждый раз, когда вы создаете экземпляр объекта, который потенциально может иметь некоторые хорошие преимущества.
В порядке использования явных включений или для того, чтобы __autoload()
нашел для себя ваши классы. Так или иначе.
Я бы не рекомендовал смешивать две стратегии. Линии include
не нужны.
Одним из преимуществ ленивого загрузчика является то, что он загружает только файлы классов, которые на самом деле необходимы скрипту во время его выполнения, потенциально сохраняя память; в противном случае вы можете включить все файлы классов, независимо от того, нужны они или нет. В зависимости от ваших сценариев это может иметь значение.
Наверняка это ** ** преимущество ленивого загрузчика? –
@Will - Нет необходимости в длинных списках включений, это было бы другим основным преимуществом, и добавление к списку при добавлении нового класса является дополнительным преимуществом; но улучшение памяти/производительности, безусловно, является основным преимуществом. Также предотвращает накладные расходы include_once, в то время как не нужно беспокоиться о дублировании включает –
+1 для spl_autoload_register() –