Šťoural obecný Mastodontus albensis má tentokrát dvě připomínky:
Kešovací obal nad časově náročnou funkcí jsem moc nepochopil, stačí
jedna funkce namísto dvou (kešování přímo v tělu dané funkce).
Tagování je prima věcička, dalo by se ovšem zabudovat přímo do storage
vrstvy a starat se jen o přiřazování tagů. Ale to je opravdu jen
drobnost :)
Názory k článku
Nette Framework: Cache
Rejpy rejpy po ránu
celé vláknoRe: Rejpy rejpy po ránu
celé vláknoSpájanie do jednej funkcie nemusí byť vždy najlepším riešením. Čo ak by si po čase chcel pridať ešte nejakú inú funkcionalitu pre prácu s cache (šifrovanie, komprimovanie, …)? Myslím, že cache je dobrý adept pre vzor Dekorátor
Re: Rejpy rejpy po ránu
celé vláknoad Mastodont: snažím se v článku nabádát k tomu, že spojení do jedné funkce je obvykle návrhovou chybou. Proto ten příklad a proto zmínka, že kešování je „další vrstva“.
ad memoization: Nette má pro něco takového integrovanou podporu, která dojela na to, že na řadě hostingů beží eAccelerator s bugem, který tohle znemožňuje :-( Velmi nepříjemná věc, takže se o použití anotací ani nezmiňuju. Dokud nevznikne workaround, nebo inkriminovaná verze eAcceleratoru nevymizí.
Re: Rejpy rejpy po ránu
celé vláknoktera posledni verze na to trpi?
Re: Rejpy rejpy po ránu
celé vláknoCache jako dekorátor je samozřejmě možná, ale psát extra wrapper pro každou kešovanou funkci?
Tagy? Super!
celé vláknoJsem rád že se v nějakém frameworku objevila tagovaná cache – už dlouho přemýšlím, že by se velmi hodila do Drupalu, jenže tam by přidání tagů do cache vyžadovalo přepsání tak 90% jádra a modulů (aby svůj kešovaný obsah správně tagovaly).
Ale zpět k tématu – Davide, přemýšlel jsi i nad tím, že by klíčem do cache nebyl jen string, ale množina stringů (tagů)? Umožnilo by to třeba cachovat obsah bloků které jsou závislé na uživateli, nějak takhle:
$cache->put(
array(
'module' => 'MyModule',
'blockId' => $blockId,
'user-id' => $currentUserId
),
$cachedContent,
$cacheTimeout
);
I když, asi by to šlo řešit i nějakým wrapperem nad cache co by tu array nějak jednoznačně kanonizoval do stringu (hmm, serialize()?)…
A jinak, těším se na lambdy v PHP 5.3, to wrapování funkcí mi přijde jako děsná duplikace kódu:
function GetArticles($from, $to) {
$cache->get(
'myKey',
function ($from, $to) {
...
return $articles;
}
);
}
Re: Tagy? Super!
celé vláknoV drupalu:
Pri ukladani dat: cache_set(‚kafka:article:‘ . $node->nid,
$data);
Pri udalosti, kdy musim invalidovat cache:
cache_clear_all(‚kafka:article:‘ . $node->nid)
Pripadne, kdyz chci smazat vse s article:
cache_clear_all(‚kafka:article:‘, ‚cache‘, TRUE);
Jak se to efektivne lisi od tagu?
Není tam chyba?
celé vláknoV těch array na konci by mělo být ⇒ místo =, ne?
Vypnutí cache
celé vláknoJde nějak cache vypnout? Nemůžu najít kde. Laděnka při chybách za běhu vyhazuje chyby v cache souborech, kde už jsou některé věci (Latte) přeložené, a nesedí číslo řádku. Většinou to není problém, ale občas přemýšlím, kde co se stalo – třeba když píšu víc kódu a testuji až pak.
Re: Vypnutí cache
celé vláknoCache zkompilovaných šablon? Je možné ji smazat. Bývá uložena v tempu.
Čísla řádků trošku problém jsou, chce to trošku hledat podle okolí. Ono by to asi šlo udělat líp, shrnul jsem to zde: http://forum.nettephp.com/cs/3682-generovane-prekladane-zdrojaky-a-cisla-radku-typicky-sablony?pid=27015#p27015