Webhosting

OPcache

Definitie

OPcache is de PHP-extensie die de al gecompileerde code van scripts (de opcodes) in gedeeld geheugen bewaart. PHP hoeft dan niet meer elk bestand bij elk verzoek opnieuw te lezen en te analyseren, wat applicaties als WordPress, die bij elke pagina honderden PHP-bestanden laden, flink versnelt.

OPcache, Webhosting

PHP is een geïnterpreteerde taal: voordat het een bestand uitvoert, leest het dat bestand, analyseert het en vertaalt het naar interne instructies, de opcodes. Zonder cache wordt dat werk bij elk verzoek opnieuw gedaan, voor elk geladen bestand. De PHP-documentatie vat de rol van OPcache zo samen: het slaat de voorgecompileerde bytecode van scripts op in gedeeld geheugen, waardoor PHP de scripts niet bij elk verzoek hoeft te laden en te analyseren.

Hoe OPcache werkt

OPcache is een extensie die met PHP wordt meegeleverd en via de directive zend_extension wordt geladen. Bij de eerste uitvoering van een bestand komen de opcodes in gedeeld geheugen. Volgende verzoeken gebruiken ze direct opnieuw, welke PHP-FPM-worker het verzoek ook verwerkt, omdat het geheugen gedeeld wordt door de processen van dezelfde master.

Vergelijking van een PHP-verzoek zonder en met OPcache. Zonder OPcache: de PHP-bestanden worden van schijf gelezen, geanalyseerd en naar opcodes gecompileerd, uitgevoerd en daarna vergeten, zodat alles bij het volgende verzoek opnieuw begint. Met OPcache: de opcodes staan al in gedeeld geheugen en worden meteen uitgevoerd, de bestandsdatums worden standaard elke 2 seconden gecontroleerd, en er wordt alleen opnieuw gecompileerd als een bestand is gewijzigd.
OPcache schrapt de compilatiestap, die anders bij elk verzoek wordt herhaald.

Om wijzigingen op te merken, controleert OPcache standaard elke twee seconden de datum van de bestanden (opcache.revalidate_freq=2). Schakel je die controle uit (opcache.validate_timestamps=0), wat in productie wat kan opleveren, dan worden gewijzigde bestanden pas opgemerkt als de cache wordt geleegd met opcache_reset() of door PHP te herstarten.

De nuttige instellingen

Standaardwaarden volgens de PHP-documentatie:

  • opcache.memory_consumption: 128 MB gedeeld geheugen;
  • opcache.max_accelerated_files: maximaal 10.000 bestanden;
  • opcache.interned_strings_buffer: 8 MB voor interned strings;
  • opcache.revalidate_freq: 2 seconden.

Een WordPress-site met een pagebuilder, WooCommerce en een stuk of twintig plugins kan boven het voorziene aantal bestanden of het geheugen uitkomen. Daarboven wordt een deel van de scripts niet meer gecachet en kalft de winst af. De functie opcache_get_status() of een diagnoseplugin toont hoe vol de cache zit.

Sinds PHP 7.4 laadt preloading (opcache.preload) bestanden bij het starten van PHP. Het is niet beschikbaar onder Windows en vraagt een herstart om bij te werken: het past beter bij applicaties die weinig veranderen dan bij een WordPress-site die vaak wordt bijgewerkt.

Video: “Everything about OPcache to increase PHP performance (2026)” (Tideways, in het Engels)

Voor WordPress

De documentatie van WordPress raadt aan een opcodecache als OPcache toe te voegen om de prestaties van PHP sterk te verbeteren. Het vult de paginacache en de objectcache aan, zonder ze te vervangen: OPcache voorkomt het compileren van code, de objectcache voorkomt databasequery's, de paginacache voorkomt dat PHP überhaupt draait.

  • Bij shared hosting staat OPcache normaal gesproken aan; controleer het met phpinfo() of in de PHP-instellingen van je paneel.
  • Op een VPS stem je het geheugen en het aantal bestanden af op de werkelijke omvang van je sites.
  • Bij een update naar een andere PHP-versie herlaad je PHP-FPM om met een schone cache te beginnen; meteen een goed moment om te controleren of de gekozen versie nog wordt onderhouden (zie de PHP-versies die end-of-life zijn).

Beveiliging

Op een gedeelde server is de cache gemeenschappelijk voor de pools van dezelfde PHP-FPM-master. Directives als opcache.validate_permission en opcache.validate_root bestaan om de rechten op gecachete bestanden te controleren en botsingen in chroot-omgevingen te voorkomen. De directive opcache.restrict_api beperkt het gebruik van de OPcache-functies tot een bepaald pad, zodat niet zomaar een script de cache kan legen. Deze instellingen vullen die uit onze gids om PHP te harden aan.

Veelgemaakte fouten

validate_timestamps uitschakelen en dan niet begrijpen waarom een gewijzigd bestand niet zichtbaar wordt; het standaardgeheugen laten staan op een grote site; denken dat OPcache een paginacache vervangt.

Verder lezen

  • Artikel PHP-versies die end-of-life zijn: planning, risico's en migratie

Bronnen

  1. PHP Manual: OPcache (externe link, opent in een nieuw tabblad)
  2. PHP Manual: OPcache, runtime configuration (externe link, opent in een nieuw tabblad)
  3. PHP Manual: OPcache, installation (externe link, opent in een nieuw tabblad)
  4. WordPress Advanced Administration: Cache (externe link, opent in een nieuw tabblad)

Alle definities

WordPress-beveiliging, zonder ruis

Eén e-mail wanneer het ertoe doet: nieuw waargenomen aanvallen, updates van de plugin en praktische gidsen. Geen spam, afmelden met één klik.

Begin gratis, stap over op Pro wanneer je eraan toe bent

De gratis versie verbergt WordPress al en verplaatst de inlogpagina. Pro voegt aliassen, tweestapsverificatie en bewaking toe.