[2008-11-23] curlyBrackets: nové značky {cache} … {/cache}

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 8082
+
0
-

Přidal jsem do filtru curlyBrackets nové značky {cache} ... {/cache}, pomoci kterých lze označit části šablony, které se mají ukládat do cache. Kešování je tak možno velmi snadno doplnit i do vykreslovací části aplikace. Funkce je zatím experimentální.

Označené části se automaticky invalidují, když se změní šablona; a to včetně i všech případných inkludovaných souborů.

Dále je podporováno vnořování značek {cache}. Části šablony se pak invalidují, když se invaliduje kterákoliv vnořená část.

Jako parametry je možné uvést invalidační tagy (více v dokumentaci):

{cache "item/$id", "comments"}
	<h1>{$title}</h1>

	{include 'spot.phtml'}
	{include 'comments.phtml'}
{/cache}
Tomik
Nette Evangelist | 485
+
0
-

Moc pěkné! Hlavně to přesouvá kešování tam, kde je potřeba, tedy do šablon. Je tedy možné toto řešit již v nich. Co mě ale napadlo:

Co udělat i něco jako {nocache}, tedy celá stránka (či kus stránky by se kešoval, jen její část mezi {nocache} a {/nocache} nikoli), protože nyní pokud mám stránku a v ní čtyři místa, která nechci kešovat musím 5× uvádět invalidační tagy, zatímco by to šlo uvést pouze jednou, tedy to značky {cache}, a pak pomocí značek {nocache} – či jinak pojmenovaných – označit co nechci kešovat. Snad by to nemuselo být tak náročné na implementaci (zřejmě by se to dělalo tak, že by se v místě kde začíná značka {nocache} ukončila značka {cache} a v místě, kde {nocache} končí zase začala se stejným invalidačním tagem.

Možná už je to zbytečná „fičura“, ale napadlo mě, že by to celé definování kešování přímo v šablonách velice usnadnilo.

Editoval Tomik (23. 11. 2008 20:14)

David Grudl
Nette Core | 8082
+
0
-

Tomik napsal(a):

Moc pěkné! Hlavně to přesouvá kešování tam, kde je potřeba, tedy do šablon.

No – jak se to vezme. Záleží, jak je aplikace napsaná. Pokud leží hlavní zátěž v místě plnění šablony, tak takové kešování moc nepomůže. Pokud naopak šabloně předáme vazbu na model, který data vrací až „on demand“ nebo-li „lazy“, tak je kešování naopak velmi efektivní.

Samozřejmě velký přínos to může mít pro generování odkazů, (nevyplněných) formulářů atd.

Co udělat i něco jako {nocache}, tedy celá stránka (či kus stránky by se kešoval, jen její část mezi {nocache} a {/nocache} nikoli), protože nyní pokud mám stránku a v ní čtyři místa, která nechci kešovat musím 5× uvádět invalidační tagy, zatímco by to šlo uvést pouze jednou, tedy to značky {cache}, a pak pomocí značek {nocache} – či jinak pojmenovaných – označit co nechci kešovat. Snad by to nemuselo být tak náročné na implementaci (zřejmě by se to dělalo tak, že by se v místě kde začíná značka {nocache} ukončila značka {cache} a v místě, kde {nocache} končí zase začala se stejným invalidačním tagem.

Nad tím jsem taky uvažoval, uvidíme co se víc osvědčí.

Jan Tvrdík
Nette guru | 2595
+
0
-

David Grudl napsal(a): Funkce je zatím experimentální.

Jaký je současný statut této funkce?

David Grudl
Nette Core | 8082
+
0
-

Předpokládám, že se změní význam parametrů, funkce určitě zůstane.