2011-01-04 4 views
7

Я только что прочитал о шаблоне дизайна «ленивый груз».Lazy loading? Лучше ли это избегать?

Можно ли злоупотреблять ленивой загрузкой для загрузки всех классов и забыть о include(..) целиком?
Каковы недостатки этого подхода?

ответ

6

Пара точки на автозагрузке:

  1. Вы увидите хорошую производительность улучшение при использовании автозагрузки против всегда, включая все ваши файлов всего время (тем более, что количество файлов растет больше и больше).

  2. При реализации автозагрузку, то лучше использовать spl_autoload_register() чем __autoload().

Хотя много раз, когда люди говорят о отложенной загрузки в PHP, они говорят о чем-то вроде следующего:

class Foo { 
    protected $bar = null; 

    public function getBar() { 
     if ($this->bar == null) { 
      $this->bar = ExpensiveOperation(); 
     } 
     return $this->bar; 
    } 
} 

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

+5

+1 для spl_autoload_register() –

2

В порядке использования явных включений или для того, чтобы __autoload() нашел для себя ваши классы. Так или иначе.

Я бы не рекомендовал смешивать две стратегии. Линии include не нужны.

3

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

+0

Наверняка это ** ** преимущество ленивого загрузчика? –

+0

@Will - Нет необходимости в длинных списках включений, это было бы другим основным преимуществом, и добавление к списку при добавлении нового класса является дополнительным преимуществом; но улучшение памяти/производительности, безусловно, является основным преимуществом. Также предотвращает накладные расходы include_once, в то время как не нужно беспокоиться о дублировании включает –