Idé til caching i Smarty
På BedsteVen.dk viser jeg de seneste aktiviteter på forsiden. Det samme gør jeg på aktivitetssiden. Hver aktivitet indeholder en del databaseopslag. Eftersom min database-klasse som nævnt før automatisk gi’r mig en getFoo() og setFoo() hvis tabellen indeholder feltet foo. Valgte jeg at implementere noget simpelt caching på følgende måde:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | {* Jeg har tilføjet et 'cache' felt i min aktivitetstabel *} {assign var="cache" value=$activity->getCache()} {if $cache} {$cache} {else} {capture name=act} {* Her hentes og vises den enkelte aktivitet *} {/capture} {* Jeg viser det fangede indhold *} {$smarty.capture.act} {* Måske lidt grimt, men templaten kan også gemme indhold. Derfor gemmer jeg det genererede indhold her *} {$activity->setCache($smarty.capture.act)} {/if} |
Nem caching af statiske filer
Apache har et lækkert mod_expires modul der gør det muligt at cache bestemte filer via nogle retningslinier i fx .htaccess.
Typisk vil man jo gerne være interesseret i at cache billeder, ikoner, stylesheets, javascript m.m. så meget som muligt. Det gøres nemt ved at indsætte følgende i ens .htaccess:
1 2 3 4 5 6 | <IfModule mod_expires.c> ExpiresActive On ExpiresByType image/png "access 1 days" ExpiresByType application/javascript "access 1 days" ExpiresByType text/css "access 1 days" </IfModule> |
Linie 1 checker om moduler er tilgængelig, og nummer 2 aktiverer det.
I de efterfølgende linier angiver jeg en Content-Type og en levetid. I levetiden kan man bruge begreber som years, months, days, hours osv. Angiver man “access 1 days” som jeg har gjort sætter Apache-serveren to headere:
1 2 | Expires: Sun, 02 Nov 2008 21:39:27 GMT Cache-Control: max-age=86400 |
Hvor tidspunktet i Expires er en dag ind i fremtiden, og max-age er tilsvarende det antal sekunder et døgn varer.

Jeg hedder Morten, og jeg har udviklet webapplikationer siden slutningen af 90'erne.