PHP OPcache

Met PHP's ingebouwde bytecode cache kun je de laadtijd van je website nog verder versnellen. In dit artikel leggen we uit hoe het werkt en waar je op moet letten, inclusief ons advies voor gebruikers van Wordpress.

Om OPcache beter te begrijpen is een kleine introductie nodig van wat PHP compileren is en hoe het cachen hiervan de snelheid van je website aanzienlijk kan verbeteren.

Wat is compileren?

Eenvoudig gezegd is compileren het omzetten van door mensen geschreven programmacode naar voor computers begrijpelijke machine instructies. Deze vertaalslag is altijd nodig om code door een computer uit te laten voeren.

PHP is één van de meest populaire programmeertalen geworden omdat developers door hun geschreven code niet zelf hoeven te compileren. Dit vereenvoudigd en versneld het programmeren van websites, CMS-en, plugins en dergelijke.

Maar aangezien de code uiteindelijk toch gecompileerd moet zijn om uitgevoerd te kunnen worden, gebeurd dat compileren automatisch en op het allerlaatste moment: zodra een bezoeker je website bezoekt.

In extreme gevallen gaat het om duizenden PHP bestanden die op harde schijf moeten worden opgezocht, ingelezen, gecompileerd en vervolgens uitgevoerd. En dat bij iedere bezoeker opnieuw (!). Aangezien de broncode van een website maar relatief weinig veranderd, is dit niet heel efficiënt.

OPcache to the rescue

Met OPcache wordt deze gecompileerde code "in-memory" gehouden zodat opvolgende bezoekers daar direct gebruik van kunnen maken. Het effect op de laadtijd van je website, de zogeheten time-to-first-byte (TTFB), is goed merkbaar.

Na in te loggen op je account kun je op de pagina Domeinen > domeinnaam.nl > Software de OPcache configuratie van je website aanpassen. Daarbij kun je kiezen uit de volgende opties:

Instelling Effect
Uitgeschakeld Hiermee is de cache volledig uitgeschakeld. Dit kan bijvoorbeeld handig zijn om code makkelijker te kunnen debuggen. Deze instelling is niet aanbevolen voor actieve websites.
Hervalidatie:
5 seconden
De cache is ingeschakeld en kijkt iedere 5 seconden opnieuw of de onderliggende PHP bestanden aangepast zijn, zo ja, dan worden deze automatisch opnieuw gecompileerd.
Hervalidatie:
120 seconden
De cache is ingeschakeld en kijkt iedere 120 seconden opnieuw of de onderliggende PHP bestanden aangepast zijn, zo ja, dan worden deze automatisch opnieuw gecompileerd.
Geen automatische hervalidatie De cache is ingeschakeld en zal niet automatisch code opnieuw compileren. Dit levert de beste performance op omdat er geen harde schijf operaties meer nodig zijn.

Wij raden aan om - als het kan - de optie "Geen automatische hervalidatie" te kiezen. Lees hieronder verder wat daarvan de consequenties zijn en ons advies als je een Wordpress website bezit.

Geen automatische hervalidatie

Bij deze instelling hoeft de server geen harde schijf lookups meer te doen om te zien of de onderliggende PHP bestanden van je website ondertussen zijn veranderd. Dit scheelt laadtijd, zeker als de website uit veel PHP bestanden bestaat.

Het nadeel ervan is dat als de PHP-code wel een keer wordt aangepast, dat dit niet automatisch wordt opgemerkt en je website niet lijkt te updaten.

Dit klinkt in eerste instantie als een groot nadeel, maar in feite zijn er maar een paar, voorspelbare, scenarios waarbij de achterliggende PHP code van je website wordt aangepast:

  1. Bij het uploaden van nieuwe PHP code (via SFTP of SSH)
  2. Bij het installeren/updaten van je CMS of van een plugin binnen je CMS

In die gevallen is het aanroepen van de opcache_reset() functie noodzakelijk om de cache te verversen. Dit kan bijvoorbeeld al door een eenvoudig PHP script in je account te plaatsen met deze inhoud om die, wanneer nodig, via de browser aan te roepen:

<?php
opcache_reset();

De cache zal zich dan opnieuw opbouwen bij de eerst volgende bezoeker van de website.

Wordpress

Wordpress is een veel gekozen CMS dankzij het enorme aanbod aan community plugins en thema’s en de eenvoud om hiermee een website te kunnen ontwikkelen en beheren. Een neveneffect hiervan is dat Wordpress websites van nature uit erg veel PHP bestanden bestaat, tegen de vijf duizend bij een gemiddelde installatie. Zodoende kan er met OPcache een flinke snelheidswinst worden behaald.

Sinds versie 5.5 van Wordpress is ondersteuning voor OPcache standaard ingebouwd. Bij het upgraden van een plugin of van de CMS zelf, zal Wordpress de aangepaste PHP bestanden automatisch opnieuw compileren. Hier heb je dus geen omkijken naar. Je kunt zodoende de OPcache instelling het beste op "Geen automatische hervalidatie" zetten voor de beste performance.

Mocht je toch nog wat meer controle willen hebben over de cache, bijvoorbeeld omdat je soms PHP bestanden upload via SFTP, dan kun je de W3 Total Cache plugin installeren. Hiermee kun je, wanneer nodig, met een eenvoudig knopje de cache legen:

W3 Total Cache

Wellicht ten overvloede, bij het updaten van content of bijvoorbeeld het uploaden van plaatjes veranderd er geen PHP code, deze veranderingen zijn altijd direct zichtbaar - OPcache heeft hier geen invloed op.

Pro tip: W3 Total Cache ondersteund ook Memcached voor het cachen van hele pagina's en database queries. Een goede combinatie met OPcache om de laadtijd van je website tot het uiterste te optimaliseren!