Cacheování kompletního výstupu
- lunak83
- Člen | 47
Ahoj,
chtěl bych udělat aplikaci, kde bude poměrně dost lidí přistupovat k jedné a té samé stránce, která je tvořená mnoha dotazy do databáze a několika provázanými foreachi v šablonách.
Pokud bych tedy chtěl tato data nějak cacheovat, je správné řešení udělat přes model dotaz do databáze, v presenteru tento objekt uložit do cache (fáze 1), pak jej předat šabloně, kde se blok okolo foreachů také uloží do cache (fáze 2), nebo by se cacheování mělo řešit nějak jinak?
Edit: Používám dibi, kde neumím použít lazy dotaz do db až v šabloně jako to jde u Nette\Database
Chtěl bych de facto docílit toho že normální návštěvníci dostanou HTML které jim na základě práce v backendu předgenerovává admin tak aby se co nejméně zatěžoval server.
Děkuji moc za názory a rady.
Editoval lunak83 (27. 12. 2013 23:51)
- enumag
- Člen | 2118
$presenter
se do šablony předává automaticky. Myslel jsem to
ale trochu jinak:
public function renderDefault()
{
$this->template->dataAccessor = function () {
return $this->model->getData(); // $this here requires PHP 5.4, hack it with $that if you need 5.3
}
}
{foreach $dataAccessor() as $item}
{* ... *}
{/foreach}
- nAS
- Člen | 277
Případně si můžeš v Application->onResponse
uložit
celý výstup. Potom se v bootstrapu, ještě před načtení Nette, podívat,
jestli už tato stránka není vygenerovaná a případně ji vypsat. To má tu
výhodu, že se vůbec nemusí načítat a parsovat desítky/stovky souborů,
takže to je ohromný boost výkonu u hodně navštěvovaných aplikací. Ale
zase je s tím trochu práce, tak bych to dělal až se to bude opravdu hodit a
ne pro strýčka Příhodu :) Je tam potřeba ošetřit různé cookies,
přihlášené uživatele, .. prostě vše, co tvoje aplikace používá.