Maak jouw website vliegensvlug met caching

Thijs Feryn legt uit waarom caching je websites sneller kan maken, hoe het gebeurt en welke tools er bestaan.

Welke factoren de snelheid van je website beïnvloeden

Snelle websites zijn vanzelfsprekend. Gebruikers hebben steeds minder geduld en haken bij de minste vertraging af, en dat speelt in de kaart van de concurrentie. Maar ook Google houdt hier rekening mee door snelle websites te belonen met hogere posities in de zoekresultaten.

Caching maakt vliegensvlugge websitesEen snelle website bekomen is iets minder vanzelfsprekend. Er bestaat namelijk geen one-size-fits-all oplossing. Caching kan een oplossing bieden en kan de performantie van je website garanderen. Caching zal data die niet veranderen opslaan en niet telkens herberekenen bij elk bezoek. Het typisch voorbeeld daarvan is de productpagina op je website. Prijsinformatie en producteigenschappen hoeven niet telkens uit de database opgehaald te worden, maar kunnen in de cache opgeslagen worden.

De snelheid van je website wordt op drie niveaus bepaald. Alles start bij performante infrastructuur - en daar is je hostingprovider verantwoordelijk voor. Op deze infrastructuur dient dan snelle code te draaien die op een efficiënte manier communiceert met de achterliggende databank. Het derde niveau is de front-end. Deze verzorgt het visuele aspect van je website - en ook daar kunnen optimalisaties gebeuren, door bijvoorbeeld afbeeldingen te optimaliseren voor het web, en eventueel javascript en CSS te comprimeren en samen te voegen.

Hoe ontstaat die vertraging?

Maar toch is het zo dat de voornaamste bron van vertraging de combinatie is van de code die op de infrastructuur draait. En dat is ook logisch. Want daar gebeuren de meeste berekeningen en vinden de meeste processen plaats.

Voor elk bezoek dient een http-request aangenomen te worden, die dan moet doorgegeven worden aan de code. De code dient vaak beroep te doen op een databank. Vervolgens moet het resultaat van de databank opnieuw verwerkt worden. Om dan uiteindelijk te resulteren in een http-respons dat door de server naar de browser gestuurd wordt.

Deze sequentie van acties kan erg tijdrovend zijn en kan ook resource-intensief zijn. Zeker bij een grote hoeveelheid simultane bezoekers kan dit tot een cascade-effect leiden. En daar kan caching helpen door ervoor te zorgen dat deze berekeningen minder frequent moeten gebeuren.

Je website sneller maken én houden

Toch is optimalisatie van je code belangrijk. Maar in een ideale wereld zal geoptimaliseerde code nog steeds geen garantie kunnen geven op een performante website. Bij veel processen en veel berekeningen kan caching nog altijd een rol spelen.

In realiteit wordt er vaak geoptimaliseerd tot er een kantelpunt bereikt wordt waarbij kosten en baten tegenover elkaar geplaatst moeten worden. Vaak komt men tot de vaststelling dat de nodige investeringen niet in overeenstemming staan met de gewenste resultaten op vlak van tijd, op vlak van budget, op vlak van expertise. Caching is dus niet enkel een snelle pleister op de wonde, maar een langetermijnvisie die een essentieel deel uitmaakt van de strategie en van de architectuur.

"Want waarom zou je output constant herberekenen als de data niet veranderen?"

Caching kan trage websites snel maken en dan spreken we over performantie. Maar het kan ook snelle websites snel houden onder toenemende druk bij een grote hoeveelheid bezoekers en dan spreken we over schaalbaarheid.

Hoe werkt die caching eigenlijk?

Hoe werkt caching? Het antwoord op deze vraag hangt af van wat je precies probeert te cachen. In het beste geval zal dit het eindresultaat van de berekeningen zijn, namelijk de volledige pagina. En dit doe je om de server te ontlasten. De volledige server. Nemen we het voorbeeld opnieuw erbij van de productpagina, dan zal het de complete output zijn van deze pagina. Lukt dit niet, dan heb je wel nog steeds de mogelijkheid om de output van de dataprocessen te cachen.

Dit speelt zich eerder af langs code kant en heeft als bedoeling de database te ontlasten. Opnieuw naar het voorbeeld van de productpagina's: dit zal de output zijn van de database, die prijsinformatie en producteigenschappen bevat.

Caching-technologieën

Varnish cachingAfhankelijk van de keuze die je maakt heb je verschillende technologieën ter beschikking. Varnish is zo'n technologie die volledige pagina's opslaat en als doel heeft de volledige server te ontlasten. Cache items worden in het RAM bijgehouden wat het vliegensvlug en bliksemsnel maakt. Er wordt geïdentificeerd op basis van de URL. Varnish is een apart systeem, dat voor de webserver staat en over HTTP communiceert.

Naar onze ervaring biedt Varnish nog steeds de beste resultaten omdat het de volledige pagina en alle afhankelijkheden probeert te cachen - inclusief afbeeldingen, CSS en Javascript. Dit is echter niet wenselijk in àlle scenario's. Sommige pagina's hebben delen van de content die variëren per gebruiker. Neem nu bijvoorbeeld shopping carts. In dit geval mag niet alles gecachet worden. En ook hier kan Varnish de correcte beslissingen nemen om enkel te cachen wat gecachet mag worden.

Memcached caching optieredis caching hostingTechnologieën zoals Redis en Memcached zijn er eerder om de output van dataprocessen te cachen en opereren vanuit de backend. Memcached en Redis zijn zogenaamde distributed caches. Simpel gesteld: RAM-geheugen op afstand dat je over het netwerk kan raadplegen. Memcached en Redis ondersteunen geen complexe berekeningen en houden data bij in key-value format.

Redis ondersteunt meerdere datatypes. Memcached doet dit niet maar kan ondanks zijn simpliciteit nog altijd erg performant en erg stabiel zijn. De keuze tussen de twee maak je enerzijds op basis van het feit of je al dan niet de datatypes die Redis aanbiedt wil gebruiken, maar voornamelijk op basis van de compatibiliteit met je code.

In cache, maar ook eruit!

Onafhankelijk van de gekozen technologie moet je nog wel de denkoefening maken hoe lang je items in cache zal bijhouden en hoe je ze expliciet uit de cache zal verwijderen wanneer de data veranderen. Het is namelijk erger om te lang en te veel te cachen dan te weinig.

De duurtijd van je cache kan je bepalen op basis van de zogenaamde Time To Live. Deze geef je mee bij Redis en Memcached op basis van specifieke functies om data toe te voegen en te beheren. Bij Varnish kan dit op basis van een zogenaamde Cache-Control header die je eindcode over http meegeeft. Het verwijderen van items uit de cache kan in Redis, Varnish en Memcached op basis van bepaalde methodes die ze aanbieden, maar gelukkig zijn er een waaier van CMS en framework plug-ins die dit faciliteren. Het klinkt ironisch, maar items in de cache stoppen is makkelijker dan ze uit de cache halen. Dus loont het de moeite om er even over na te denken.

Bij een webhostingpakket kan je caching activeren in je controlepaneel. Heb je een managed hosting omgeving, dan kan je accountmanager je best adviseren over de juiste caching-optie voor jou.

Contacteer ons voor caching advies