De performantie van je Drupal website verhogen - Deel 2

De performantie van je Drupal website verhogen - Deel 2

6 november 2018

Drupal-website versnellen: code optimalisaties, servers, modules, cron jobs, ...

Je Drupal-website boosten, daar las je al heel wat over in ons eerste blogartikel. Daar gingen we dieper in op code optimalisaties, servers, modules en cron jobs. Maar dat is (helaas) nog niet alles. Ontdek de rol van caching in het tweede blogartikel hieronder.

Caching, caching, caching

Wat is caching?

Vrij vertaald is cache een opslagplaats. Bij websites wordt cache gebruikt om handelingen die veel tijd kosten, niet telkens te moeten herhalen. De eerste keer dat een handeling (b.v. een menu opbouwen) gevraagd wordt, wordt het resultaat van deze handeling in de cache opgeslagen. De volgende keren wordt de handeling niet meer uitgevoerd, maar wordt het resultaat van de handeling uit de cache rechtstreeks aan de bezoeker geserveerd.

Drupal & caching

Wij raden deze instellingen aan in Drupal:

Dus: 

  • Cache pages: Dit is de krachtigste caching in Drupal, omdat de code van de volledige pagina opgeslagen wordt en geserveerd wordt uit de cache. Let op: dit werkt enkel voor anonieme gebruikers. Van zodra je bezoeker zich aanmeldt, wordt zijn pagina gepersonaliseerd en is ze dus niet meer anoniem.

    • Cache blocks: Blokken zijn stukken uit de pagina, bijvoorbeeld een menustructuur of een lijst van producten. Dit is nuttig voor iedereen, ook voor niet ingelogde gebruikers.

      • Minimum cache lifetime: dit is de leeftijd die het object in de cache minstens moet hebben opdat het verwijderd kan worden (door een cache-clearing actie). Dit is vooral belangrijk voor drukke sites, waarbij je nooit een volledig lege cache mag hebben. Let op! Ook bij een aanpassing van de inhoud of een Cache clear all, is deze aanpassing pas na het verstrijken van deze tijd zichtbaar. 

        • Expiration of cached pages: Deze controleert wat er als maximum leeftijd wordt doorgestuurd in een Cache-control header en adviseert proxy servers hoelang ze nog mogen mogen "serveren" zonder naar een nieuwe kopie te vragen. 

        Cache backends

        Zonder speciale instellingen zal Drupal cachen in mysql. Dat is best goed, want een pagina met 1 query uit de mysql cache tabel halen, kost niet veel tijd.

        Met de Memcache-module​ kan je nog veel betere prestaties halen. Memcache slaat de cache-objecten namelijk in het RAM-geheugen op en is daar razendsnel in, veel sneller dan mysql.

        Alles wat je moet doen is de Memcache-module installeren in Drupal en de volgende instellingen juist zetten in settings.php:


        $conf['cache_backends'][] = 'sites/all/modules/memcache/memcache.inc'; $conf['cache_class_cache_form'] = 'DrupalDatabaseCache';
        $conf['cache_default_class'] = 'MemCacheDrupal';
        $conf['memcache_key_prefix'] = 'something_unique';

         

        Natuurlijk moeten wij ervoor zorgen dat Memcache zelf geïnstalleerd is op de server, maar daar zorgen wij graag voor. Je kan ook aangeven welke zaken gecached moeten worden in memcache.

        Reverse proxy

        Met software als Varnish kunnen we nog veel beter cachen. Dat belichten we in een volgend artikel.

        Zoek

        Standaard worden alle nodes in Drupal geïndexeerd in de database. Bij voorkeur maken we gebruik van de contrib module search_api voor het indexeren van de nodes.

        Indien de website een vrij grote pool van nodes heeft, is het raadzaam om het hele zoekproces (indexeren + queries) te laten afhandelen door een afzonderlijke server (Solr, Elastic).  Deze servers hebben als taak het indexeren van de gegevens (met ook de mogelijkheid om bestanden die aan nodes hangen te indexeren, bijvoorbeeld pdf, doc, …) en het teruggeven van een zoekresultaat.

        Hierdoor zullen er veel minder queries naar de database zijn, waardoor we aan performantie winnen.

        CDN

        Voor heel grote en complexe sites kan het zinvol zijn om statische content (zoals bijvoorbeeld images) van een CDN (of meerdere) te laten komen. Andere zaken die je nog kan doen ter optimalisatie zijn: Redis, File caching, Cache warmers enzovoort.

        Load testing

        Voor grotere complexere websites is loadtesten absoluut noodzakelijk. Laat enkele testen lopen voor anonymous gebruikers en ingelogde gebruikers. Verzamel de data en kijk waar je nog kan verbeteren of optimaliseren.

        Cache frontend

        Voor de frontend zijn er een aantal zaken die we kunnen doen ter optimalisatie: 

        • Css/js aggregatie: alle CSS wordt samengebracht tot 1 CSS, waardoor er maar 1 request uitgevoerd moet worden. Hetzelfde gebeurt er met de Javascript (dit kan ingeschakeld worden in Drupal)
        • Minify css/js: zorgt dat de CSS en JS zo klein mogelijk zijn door alle mogelijke spaties en witte regels weg te doen (hier zorgt Drupal voor bij het inschakelen van aggregatie)
        • Javascript inladen: plaats Javascript onderaan de pagina, hierdoor wordt de pagina al geladen en wordt de Javascript pas op het einde ingeladen.
        • Image sprites: hierdoor heb je maar 1 image request in plaats van meerdere kleinere.
        • Lazy loading: de images die direct zichtbaar zijn worden direct geladen. Andere images (die onderaan de pagina staan en momenteel niet in de view-port zitten) worden pas geladen wanneer deze in de view-port komen (of er net voor).
        • Image optimalisatie: zorg dat er afzonderlijke images zijn voor een voorbeeldweergave (thumbnail) en de originele. Zodat de pagina initieel snel laadt. Hiervoor kan je gebruik maken van Drupal image styles. Deze module zit standaard in Drupal, en zal voor ieder gedefinieerde stijl een afbeelding genereren met de juiste afmetingen.

        Conclusie

        Performantie is voor iedere website anders.

        Kijk naar wat jij nodig hebt in functie van de website/bezoekers. Is het een statische of voornamelijk dynamische website? Zijn er veel weinig bezoekers.? Is het doorgaans rustig, maar heb je te maken met piekmomenten?  Analyseer je website en pas in functie hiervan bepaalde strategieën toe en schaal/tweak waar nodig.

        Zorg voor een up-to-date systeem en monitor dit. Doe regelmatig loadtesten bij nieuwe functionaliteiten en optimaliseer code/server configuratie waar nodig.

        Check ook regelmatig onze site voor meer artikelen over dit onderwerp!

        Een opmerking of vraag?

        Stuur ons een bericht en we koppelen zo snel mogelijk terug.