terug naar blogs

Craft CMS: Performance Optimalisatie

Afbeelding voor Craft CMS: Performance Optimalisatie
avatar van Danny
auteur
Danny
auteur
avatar van Danny
Danny
Craft CMS: Performance Optimalisatie
3 mei 2023 leestijd 7 minuten

Craft CMS wordt steeds populairder onder de digital agencies. Vooral omdat dit CMS uitstekend performed en volledig customizable is. Anders dan bijvoorbeeld WordPress kent Craft CMS nauwelijks overtollig vet. Hierdoor is dit CMS populair bij high-traffic websites. Maar ook de beste hebben soms hulp nodig. In deze blog geven wij de zes tips om de performance problemen van Craft CMS te onderzoeken en optimaliseren.

Inventarisatie

Voordat je kunt beginnen met een probleem analyse moet je weten waar je staat. Welke versies software je gebruikt van Craft CMS, plugins, PHP, etc. Voor deze eerste stap kan je de meeste informatie in het admin paneel vinden onder Hulpprogramma’s

Craft CMS Systeem informatie

Probleem analyse

Als je last hebt van een trage website dan kan dit van alles betekenen. Het is belangrijk om zo specifiek mogelijk tot een oorzaak te komen zodat je een passende oplossing kan implementeren of een duidelijke hulpvraag kan stellen. We willen voorkomen dat je symptomen bestrijd, in plaatst van de oorzaak aanpakt of op een dwaalspoor raakt. Stel jezelf de volgende vragen om een helder beeld te krijgen van de omvang van het probleem en een mogelijk oorzaak.

  1. Ontstaat het probleem op iedere pagina? of één specifieke pagina?
  2. Ontstaat het probleem in de front-end, back-end of beiden?
  3. Ontstaat het bij een specifieke handeling of actie? of is het probleem constant?
  4. Ontstaat het probleem bij alle browsers?
  5. Ontstaat het probleem op alle devices?
  6. Is het probleem reproduceerbaar?
  7. Is er een foutmelding in de browser?
  8. Is er een foutmelding in de error logs van applicatie?
  9. Is er een foutmelding in de error logs van de server (nginx/php)?

Craft CMS Debug Bar

Craft CMS heeft zijn eigen debug bar om laadtijden, geheugen verbruik en database queries te analyseren. Je kunt deze tool ook gebruiken om makkelijk door je applicatie error logs te zoeken. Je kunt de tool activeren via de admin omgeving. Navigeer naar Mijn Account, selecteer het tabblad Eigenschappen en scrol naar beneden tot je de volgende opties tegen komt. Vink deze aan zoals in de afbeelding.

Craft CMS Debug Bar Activeren

Met de Craft CMS debug bar kan je vervolgens de queries en processen bekijken die plaatst vinden wanneer je een pagina laad of een actie uitvoert. Wanneer je weet hoe je het probleem kan reproduceren op de website kan deze tool handig zijn om tot een specifieke oorzaak te komen.

Craft CMS Debug Tooling

Server statistieken

Applicatie en server moeten met elkaar samen werken. Je kunt PHP errors niet in de applicatie log zien. Je moet dus ook toegang hebben tot de juiste logs op de server zoals die van PHP en inzicht in het resource verbruik van PHP, RAM en de database kunnen helpen om een richting te geven aan het onderzoek.

Als je echt alles wilt weten

In ons blog over de vijf tools en tips voor WordPress performance optimalisatie beschrijven we nog enkele andere tools om de performance te meten die ook voor Craft CMS handig zijn.

Updates

Hij komt iedere optimalisatie gids terug, updates. De reden is simpel, de meeste problemen worden veroorzaakt door of kunnen worden opgelost met updates. Websites staan nooit stil. Zelfs niet als ze statisch zijn. Software, plugins, data. Er zijn constant mutaties, patches en updates. Idealiter gebruik je de meest recente, stabiele versie van essentiële software zoals PHP, OS, DB, CMS en plugins. In sommige gevallen kan een update ook voor problemen zorgen wanneer andere onderdelen hier nog niet klaar voor zijn. Bij het wisselen van major versies zoals PHP 7.X naar 8.X wordt het aangeraden om eerst te controleren of het CMS en actieve plugins hier gereed voor zijn. Met Craft CMS is mogelijk om zowel via de admin omgeving als de commandline te updaten. Via de commandline gebruik je de volgende regel om te controleren op updates.

php craft update

Wanneer er update beschikbaar zijn kan je er voor kiezen alles direct te upgraden

php craft update all

Of je update specifieke onderdelen

php craft update <pluginA> <pluginB>

Standaard wordt er geupdate naar de meeste recente versie maar je kunt met dit commando ook een specifieke versie selecteren.

php craft update <pluginA>:<versieNR> 

Caching voor Craft CMS

Caching is een onmisbaar onderdeel wanneer je opzoek bent naar performance optimalisatie. Craft CMS heeft build-in caching en schrijft deze per default weg op de harde schijf in storage/runtime/cache/ Dit is uiteraard niet de snelste methode. Er zijn ook mogelijkheden om de caching via database, APC, Redis of Memcached te regelen met enkele configuratie aanpassingen. Uiteraard moet je server wel de geschikte ondersteuning voor de gekozen methode hebben.

We bieden standaard FastCGI cache aan, daar hoef je zelf niets meer voor te doen. Maar voor meer performance kun je ook gebruik maken van Redis. Om Redis te activeren moet je de volgende stappen doorlopen;

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
php composer.phar require --prefer-dist yiisoft/yii2-redis:"~2.0.0"

3. Voeg de volgende code toe aan de configuratie in config/app.php om de verbinding op te zetten en Redis te activeren.

return [
    //....
    'components' => [
        'redis' => [
            'class' => 'yii\redis\Connection',
            'hostname' => 'REDIS_HOSTNAME',
	    'port' => 6379,
            'password' => 'REDIS_PASSWORD',
            'database' => 0,
        ],
    ]
];

return [
     //....
    'components' => [
        'redis' => [
            'class' => yii\redis\Connection::class,
            'hostname' => 'REDIS_HOSTNAME',
            'port' => 6379,
            'password' => App::env('REDIS_PASSWORD') ?: null,
        ],
        'cache' => function() {
            $config = [
                'class' => yii\redis\Cache::class,
                'keyPrefix' => Craft::$app->id,
                'defaultDuration' => Craft::$app->config->general->cacheDuration,
            ];

            return Craft::createObject($config);
        },
    ],
];

Wanneer je Redis hebt geactiveerd is er ook de mogelijkheid om de sessions in Redis te bewaren.

1. Maak het bestand config/app.web.php aan met de volgende inhoud:

return [
    'components' => [
        'session' => function() {
            // Get the default component config:
            $config = craft\helpers\App::sessionConfig();

            // Replace component class:
            $config['class'] = yii\redis\Session::class;

            // Define additional properties:
            $config['redis'] = [
                'hostname' => App::env('REDIS_HOSTNAME') ?: 'localhost',
                'port' => 6379,
                'password' => App::env('REDIS_PASSWORD') ?: null,
            ];

            // Return the initialized component:
            return Craft::createObject($config);
        }
    ],
];

2. Controleer of de Redis actief is middels de redis-cli. Login op de redis instance via het volgende commando.

redis-cli -h REDIS_HOSTNAME 

3. Authoriseer de login met het Redis wachtwoord

AUTH REDIS_PASSWORD 

4. Gebruik het commando monitor om de Redis output live te volgen.

monitor

5. Navigeer vervolgens in je browser naar de website. Als de Redis correct werkt krijg je live output te zien;

1683110197.284525 [0 127.0.0.1:52942] "AUTH" "(redacted)"
1683110197.284790 [0 127.0.0.1:52942] "SELECT" "0"
1683110197.285108 [0 127.0.0.1:52942] "GET" "39e1676813449bd66ffbb82b16fd0ae9df41e"
1683110197.339765 [0 127.0.0.1:52942] "SET" "39e1676813449bd66ffbb82b16fd0ae9df41e" "bd62416aa8538ede709019a5e113eea5__flash|a:0:{}1031b8c41dfff97a311a7ac99863bdc5__token|s:100:\"abhfaCFjvif4PVVuZBrj5CdPgMmwpdkAN5eTLR-op2J31smUGrLX_suFz45z7rXEnskIeB6a6nEESOIdvhqWw3yYpYUQpZ7JWE3o\";1031b8c41dfff97a311a7ac99863bdc5__id|i:1;__authKey|s:144:\"[\"abhfaCFjvif4PVVuZBrj5CdPgMmwpdkAN5eTLR-op2J31smUGrLX_suFz45z7rXEnskIeB6a6nEESOIdvhqWw3yYpYUQpZ7JWE3o\",null,\"08c86af9d1e51eabde3ca20c5e293308\"]\";1031b8c41dfff97a311a7ac99863bdc5__expire|i:1683113797;__duration|i:3600;" "EX" "1440"
1683110197.427669 [0 127.0.0.1:52948] "AUTH" "(redacted)"
1683110197.427950 [0 127.0.0.1:52948] "SELECT" "0"
1683110197.428175 [0 127.0.0.1:52948] "GET" "39e1676813449bd66ffbb82b16fd0ae9df41e"
1683110197.440251 [0 127.0.0.1:52948] "SET" "39e1676813449bd66ffbb82b16fd0ae9df41e" "bd62416aa8538ede709019a5e113eea5__flash|a:0:{}1031b8c41dfff97a311a7ac99863bdc5__token|s:100:\"abhfaCFjvif4PVVuZBrj5CdPgMmwpdkAN5eTLR-op2J31smUGrLX_suFz45z7rXEnskIeB6a6nEESOIdvhqWw3yYpYUQpZ7JWE3o\";1031b8c41dfff97a311a7ac99863bdc5__id|i:1;__authKey|s:144:\"[\"abhfaCFjvif4PVVuZBrj5CdPgMmwpdkAN5eTLR-op2J31smUGrLX_suFz45z7rXEnskIeB6a6nEESOIdvhqWw3yYpYUQpZ7JWE3o\",null,\"08c86af9d1e51eabde3ca20c5e293308\"]\";1031b8c41dfff97a311a7ac99863bdc5__expire|i:1683113797;__duration|i:3600;" "EX" "1440"

Cloudflare

Ongeacht welke vorm van caching je op dit moment gebruikt kan je altijd profiteren van extra caching via Cloudflare. Onze klanten kunnen daarbij gebruik maken van onze automatische Cloudflare koppeling wanneer zij zowel de hosting als de domeinnamen bij ons registreert hebben.

Automatische Cloudflare koppeling in Rootnet dashboard

Security voor Craft CMS

Security wordt vaak vergeten als onderdeel van performance. Wanneer je de veiligheid van je website strak op orde hebt wordt je minder lastig gevallen door bots en spammers. Hierdoor spendeert je server en applicatie minder resources aan ongewenst verkeer en hou je meer ruimte over voor de belangrijke processen. Iets simpels als SSL forceren en een duidelijke robots.txt kunnen een wereld van verschil maken als je hier nog geen gebruik van maakt. We schreven onlangs een blog over de vijf belangrijkste security headers voor iedere website. Als je wilt weten welke security onderdelen jouw websites nog missen zetten raden we aan om een test te doen via internet.nl

Craft CMS is een lichtgewicht CMS dat goed te customizen is. Dit betekent dat er veel opties zijn voor server, applicatie en caching configuraties. Voor digital agencies die grote projecten in Craft CMS ontwikkelen is het daarom fijn om met een ervaren managed hosting partner te werken die weet hoe de vork in de steel steekt.

Loop je na het lezen van deze blog nog steeds vast bij de performance optimalisatie van Craft CMS? Wij helpen je graag met een passende managed hosting oplossing!