Hvordan og hvorfor implementere et cachingsystem

Dagens nettlesere har støtte for avanserte former for caching som gir effektiv surfing hvor man slipper å vente på at tidligere besøkte statiske nettsider skal laste. Dette begrenser båndbredden på hver eneste Internettside da statiske elementer ikke trenger å laste på nytt hver gang, samtidig som den lagrede informasjonen automatisk blir oppdatert for å sikre at man ikke ser utdatert innhold for alltid.
Det er dessuten like viktig å ta i bruk caching direkte på nettsiden for å spare båndbredde og nedlastningstid ytterligere. F.eks. bør undersider som ikke oppdateres ofte caches – det samme kan annen type informasjon som krever mye av serveren ved hver sidevisning. F.eks. kan man optimalisere bildegallerier veldig mye med noen enkle triks.
Se for deg et administrasjonspanel for bildegallerier. Først må alle lagrede filnavn hentes ut av en database, før informasjonen skal sjekkes opp mot filene direkte for å se at de eksisterer og deretter vise informasjon om hver enkelt filt. Erfaringsmessig vil dette begynne å gå uutholdelig tregt når man nærmer seg 100 bilder. I stedet for å kjøre disse operasjonene ved hver sidevisning, kan man f.eks. ha en tekstfil i bildemappen som inneholder alle bildenavnene. På denne måten slipper man flere ledd i genereringen og det er nå kun nødvendig å hente inn linjene i filen og koble dette sammen med informasjon lagret i databasen. På denne måten kan man vise mange tusen bilder uten problemer med hastigheten.
Et annet eksempel kan være steder man bruker en templatemotor. Slike systemer gjør som oftest at man får bedre kodekvalitet ved å skille ren programmering fra HTML-kode. Ulempen er at de færreste tenker på at dette er krevende oppgaver som øker lastetiden for hver eneste bruker da variabler må parses og ting ikke lenger er rett–frem.
F.eks. skjer gjerne dette når administrator oppretter en ny side:
- Administrator oppretter en ny underside kalt «personlig.php»
- Sidens innhold lagres i databasen
- En fil kalt personlig.php blir opprettet som bl.a. inneholder fem variabler som må parses og erstattes av reelt innhold: {LANGUAGE}, {FONT}, {DATES}, {COMMENT} og 259
Etterfulgt av følgende handlinger:
- Siden er nå publisert, så en bruker går inn på personlig.php
- Filen personlig.php lastes og henter ut innholdet fra databasen
- De fem variablene parses
- Den ferdige nettsiden skrives ut
Dette skjer bare på dårlig designe systemer. Det som burde skje er like enkelt som det er genialt:
- Administrator oppretter en ny side som blir lagret som personlig.php
- Innholdet lagres i databasen, personlig.php med de ulike variablene som må parses
- Etter dette, parser systemet automatisk personlig.php og oppretter f.eks. personlig.html med ferdig kode hvor alle variabler er parset og innholdet er hentet ut fra databasen
- Når en bruker spør etter personlig.php, vises i dette eksempelet personlig.html og ikke uparsede personlig.php. På denne måten blir variablene kun parset hver gang administrator oppdaterer siden, mens resten av de besøkende ser den ferdige filen som laster raskt
På denne måten går alt raskere og systemet vil kunne vise nettsidene mye raskere enn normalt.
Kommentarer (5)
Det er jo ogsaa mulig aa bruke ferdige cache systemer som memcached. Det beste med memcached er at det sotter flere forskjellige maater aa cache informasjon paa.
1) Hele sider
2) Deler av en side
3) Hva som helst..
Memcached lagrer alt informasjonen i minnet og er derfor VELDIG rask (ogsaa raskere en statisk eider som hentes fra hardisken),
Jeg har skrevet en del om klient-side caching i denne artikkelen her: http://alexanderschroeder.net/web/ideal-web#cache — siden du ikke sa så mye om det…
Når det gjelder trikset med å ha en tekstfil sammen med bildene , så er den ideen særdeles tungvinn. Stikk i strid med automatisering. Den krever at du manuelt oppdaterer en fil på serveren din, eller i beste fall er nødt til å kjøre et skript som gjør denne jobben. Jeg anbefaler at man istedet bruker en funskjon som f.eks. PHPs "exec" til å hente ut en mappes innhold. "exec("dir")" skal ikke ta lang tid å utføre, og utfallet skal ikke ta lang tid å tolke.
En enda bedre løsning er å kun la skriptet ta seg av alt. Da skal man ikke trenge å sjekke om databasen matcher filene.
Jeg er litt interessert i å vite hvor mye tid man egentlig sparer på dette?
Hvor mye du sparer på det er umulig å si da det avhenger veldig av hva slags oppgaver som blir kjørt ved hver sidevisning, men det er likvel god praksis å implementere ulike funksjoner for å gjøre ting enklest og raskest mulig.
Legg til kommentar
Om «Andersson Online»
Dette er Espen Anderssons lekeplass på Internett. Jeg studerer webkommunikasjon på NITH Oslo og arbeider deltid som systemutvikler for NordkappNett AS og webutvikler for Nexus Consulting AS. Bloggens hovedfokus er rettet mot kultur- og teknologirelaterte temaer, med hyppige avstikkere innom musikken og journalistikkens verden.
Kategorier
- Film- og musikkanmeldelser (193)
- Generelt IT-stoff (140)
- Egosentrisk (57)
- Kulturprat (80)
- Ukategoriserte skriblerier (53)
Siste kommentarer
- påljoakim – «Filmåret 2008 – årets beste …»
- Jacob Olsen – «Filmåret 2008 – årets beste …»
- David Steinsland – «Max Manus (2008)»
- Martin Bekkelund – «God jul og et godt nytt år!»
- Audun Sæther – «God jul og et godt nytt år!»
Sist sette filmer
Gomorra (2008)
Matteo Garrone
Man Who Knew Too Much, The (1956)
Alfred Hitchcock
Flammen & Citronen (2008)
Ole Christian Madsen
Family Plot (1976)
Alfred Hitchcock
Curious Case of Benjamin Button, The (2008)
David Fincher
Lakeview Terrace (2008)
Neil LaBute
The X Files: I Want to Believe (2008)
Chris Carter
Sist avspilte låter fra last.fm
One Step Up
Bruce Springsteen
Spilt nå nettopp
Brilliant Disguise
Bruce Springsteen
I dag klokka 22:27:33
Tunnel of Love
Bruce Springsteen
I dag klokka 22:22:20
Bloggrull
- Arne Hjorth Johansen
- Asbjørn Ness
- Astrid Sann Evensen
- Audun Lade Sæther
- Bloggrevyen
- Captain Charisma
- Cavey
- Erlend Klakegg Bergheim
- Espen Iversen
- Filmantrop
- Fred Ut, Sønn
- Ivar Hagen
- Jonas Larsen
- Lasse G. Dahl
- Martin Bekkelund
- Mia Holte
- Mikael Brevik
- Nils J. Nesse
- Stian Andreassen
- Trond Johansen
- Yngve Thoresen

Det er eit interresant tema du tek opp. Eg må ærleg inrømme at eg ikkje har tenkt over dette på denne måten, men så er dette derimot ikkje eit stort problem på ei side der det aldri er fleire gjestar samtidig.