Do nový verzí balíčku nw7 a nw7-module vznikla podpora pro lazy-loadované komponenty, umožňující načíst se ajaxem po načtení stránky, voltitelně i až se zobrazním ve viewportu nebo se spožděním.
Podstatou lazy-loadovaných komponent je odložit vykreslení složitých komponent - tj. se sestavením stránky je vůbec nevykreslovat (aby se zbytečně nezpomalovalo načtení stránky). Toho je docíleno tak, že onu složitou komponentu obalíme jinou, který zajistí vykreslení té vnitřní - složité - až po přijetí signálu (ajaxem - obstarává obslužný JS).
Lazy-loadované komponeny je možné vykreslit, jakmile:
/**
* @param IFactory $factory
*
* @return BigComplexControl
*/
protected function createComponentBigComplexControl(IFactory $factory)
{
return $factory->create($this->service->getAll());
}
/**
* @param IFactory $factory
*
* @return LazyLoadComponent
*/
protected function createComponentBigComplexControl(IFactory $factory)
{
return $this->lazyLoadComponentFactory->create(function() use ($factory) {
return $factory->create($this->service->getAll());
});
// mozno take dal nakonfigurovat:
// ->setLoadInViewport() // nacitat az s presunem do viewportu
// ->setDelay(500); // nacitat az se spozdenim 500ms
}
Čili stačí jen zabalit tovární metodu do anonymní funkce, předávané do create metody továrny ILazyLoadComponentFactory. Tato anonymní funkce je poté volána až v okamžiku odloženého vykreslení - tedy ani drahé volání $this->service->getAll(), ani vykreslení se neděje při vykreslení stránky, ale až samostatně při odloženém vykreslení AJAXem.