WordPress versnellen met wp-cron op de achtergrond!

Een CMS zoals WordPress voert taken standaard uit op de voorgrond. Dit is voor bezoekers merkbaar en gaat ten koste van de laadervaring. In dit artikel leg ik daarom graag uit hoe je WordPress-taken op de achtergrond uitvoert. Zo ondervinden de bezoekers van je website geen hinder van dit soort acties. Lees verder en bekijk hoe je dit met wp-cron regelt.

WordPress versnellen met wp-cron op de achtergrond!

Wat zijn taken?

Om een WordPress-website en alle inhoud ervan goed te laten werken, voert WordPress regelmatig taken uit. Denk aan een taak die controleert of het CMS up-to-date is of een taak vanuit een plugin die bijvoorbeeld data in je webshop vanuit externe bron importeert. Al deze taken worden door het wp-cron.php-script standaard gelijktijdig uitgevoerd als een bezoeker naar je website komt. Bij met name grotere websites en webshops die zwaardere taken moeten uitvoeren, kan dat dan merkbaar zijn in de laadsnelheid.

De ‘normale’ oplossing

Wil je dit oplossen, dan lees je in veel documentatie dat je wp-cron.php via wget of curl in een cronjob moet automatiseren. Je simuleert zo een bezoeker die specifiek de WordPress-taken laat lopen. Deze aanvraag gaat echter via de webserver, waardoor het iets trager is. Daarnaast loop je hierdoor snel tegen PHP-instellingen en -limieten aan. Die zijn er bewust om te voorkomen dat een bezoeker je website gemakkelijk kan overbelasten. Kortom, het gaat eigenlijk nog steeds via de voorgrond.

Gelukkig kun je wp-cron.php ook geheel op de achtergrond aanroepen. Het wp-cron.php-script draait dan direct via CLI. Hierdoor heb je meer invloed hoe dit proces draait en kun je zelfs bepalen hoeveel rekenkracht daaraan mag worden besteed. Zo blijft je website voor bezoekers constant snel draaien.

Kalm aan en rap een beetje!

Met een cronjob PHP aanroepen via CLI heeft een belangrijk voordeel. Je kunt zo aangeven met hoeveel prioriteit en rekenkracht het wp-cron-script moet worden uitgevoerd. Je hebt daardoor meer invloed op het proces en draait het direct zonder overhead van de webserver.

Die invloed is handig, omdat scripts standaard de neiging hebben om het met volle rekenkracht te draaien. Een gevolg is dat het dan alsnog merkbaar kan zijn voor bezoekers van je website. Gebruik daarom de volgende commando’s om er grip op te houden.

Voorbeeldwaardes aanpassen
Vervang in onderstaande commando’s telkens ‘deb1234’  en ‘jedomein.nl’ met je eigen deb-nummer en domeinnaam.

Cpulimit

Met cpulimit geef je aan hoeveel procent rekenkracht van een processor-core een proces mag gebruiken. Wens je dat een proces maar op één core van je pakket draait, dan resulteert dat in bijvoorbeeld het volgende commando.

cpulimit --limit 100  /usr/local/bin/php /home/deb1234/domains/jedomein.nl/public_html/wp-cron.php

Nice

Met nice bepaal je hoeveel prioriteit een proces krijgt ten opzichte van een andere proces die op dat moment draait. Dit gaat om een getal tussen de 0 (hoogste prioriteit) en 19 (laagste prioriteit). Je voorkomt zo dat een zwaar proces andere processen onderdrukt. Dit komt dan neer op bijvoorbeeld het onderstaande commando.

nice -n 10 /usr/local/bin/php /home/deb1234/domains/jedomein.nl/public_html/wp-cron.php

Ionice

Ionice regelt met hoeveel prioriteit er data naar de opslag mag worden gelezen en geschreven. Dit wordt ook wel I/O genoemd. Hier kun je een getal kiezen tussen 1 (hoogste prioriteit) en 3 (laagste prioriteit). Bij een zware taak is aan te raden om voor prioriteit 3 te kiezen, omdat processen dan met laagste idle-prioriteit acties uitvoeren naar de opslag. Andere processen krijgen hierdoor altijd voorrang, zoals een proces van een bezoeker op een website. Dit komt neer op het volgende commando.

ionice -c3 /usr/local/bin/php /home/deb1234/domains/jedomein.nl/public_html/wp-cron.php

Start met WordPress

Wil jij ook een WordPress-website? Met WordPress voorgeïnstalleerd, gratis SSL en automatische backups kies je bij Antagonist voor een compleet pakket!

Bekijk onze hostingpakketten →


Klinkt goed, maar hoe stel je dit in?

Gelukkig gaat de cronjob instellen een stuk sneller dan het lezen en verdiepen in de bovenstaande theorie. Het uitschakelen van de wp-cron en toevoegen van de cronjob gaat in DirectAdmin als volgt.

1. Open het wp-config.php-bestand van je WordPress-installatie. Dit kan via het bestandsbeheer in DirectAdmin. Zoek daar de volgende regel op.

/* That's all, stop editing! Happy blogging. */

Voeg boven deze regel het onderstaande toe en sla daarna het bestand op.

define( 'DISABLE_WP_CRON', true );
De wp-config.php aanpassen voor wp-cron.

2. Ga nu in DirectAdmin naar Geavanceerde functiesCronjobs en klik rechts bovenin op ‘Cronjob aanmaken’.

Cronjobs-optie in DirectAdmin.

3. Vul in het opdracht-veld het volgende commando in. Vervang ‘deb1234’ met de gebruikersnaam van je hostingpakket en ‘jedomein.nl’ met je eigen domein. Deze waarden zijn veilig en werken over het algemeen direct goed.

cpulimit --limit 100 ionice -c3 nice -n 10 /usr/local/bin/php /home/deb1234/domains/jedomein.nl/public_html/wp-cron.php
Cronjob instellen voor WordPress in DirectAdmin.

4. Klik nu op ‘Voorkom e-mails’, zodat je niet wordt overspoeld met e-mails als de cronjob wordt uitgevoerd. Klik ten slotte op ‘Aanmaken’.

Verder optimaliseren?

Als je deze stappen hebt gevolgd, dan wordt de cronjob van WordPress netjes op de achtergrond uitgevoerd. Zo is je website nog een stukje sneller! Hopelijk heb je wat aan dit artikel gehad. Mocht je nu de smaak van optimaliseren te pakken hebben, bekijk dan ook eens hoe je database-optimalisatie uitvoert en Redis instelt. Veel succes!

P.S. Blijf op de hoogte en volg ons via Facebook, Twitter, Instagram, e-mail en RSS. Heb je vragen, tips of opmerkingen? Laat het achter als reactie. Vond je het artikel nuttig? Deel het dan met anderen!

Deel App Tweet Mail Deel

4 thoughts on “WordPress versnellen met wp-cron op de achtergrond!

  1. Wat een goeie tip! Dank daarvoor.
    Bij het maken van de cronjob laat je de sterretjes staan bij de tijden. Wat betekent dit? Ik zou verwachten dat je op zijn minst moet aangeven wanneer de conjob uitgevoerd moet worden (bijv. elke 10 minuten).

    • Graag gedaan, Roel! Met de vijf asterisken geef je aan dat de cron-taak elke minuut moet worden gedraaid. In feite zeg je zo dat dit elke minuut, van elk uur, van elke maand en op elke dag in de week moet gebeuren. Staat er niets gepland, dan sluit de taak weer snel. Het kan dus geen kwaad deze frequentie aan te houden.

  2. Jeroen op zei:

    Toffe tip en direct toegepast op één domein. Maar hoe zorg je dat je binnen één hostingpakket, de verschillende domeinen deze cronjob laat uitvoeren ipv WordPress. Dat ontbreekt nog in de uitleg, want nu bots ik daar telkens op een error.

    • Fijn dat je wat aan deze tip had! Wat betreft je vraag: eerst voeg je de regel aan het wp-config.php-bestand toe in de public_html-map van dat domein. Vervolgens check je bovenaan in DirectAdmin of je bij ‘Domein’ het juiste domein hebt geselecteerd. Je gaat dan naar ‘Geavanceerde functies’ → ‘Cronjobs’ en stelt voor dat domein de cronjob in. Loop je daarmee vast, stuur dan gerust een e-mail naar support@antagonist.nl. Als je daarin aangeeft welke stappen je precies neemt en welke foutmelding je krijgt, dan kijken we graag even met je mee!

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *