OPcache PHP opstartoptimalisatie

Voor websites die zijn gebaseerd op bijvoorbeeld WordPress , Joomla of Laravel en geen gebruikersspecifieke inhoud hebben, is het raadzaam om alle pagina's in een statische HTML-cache te houden en de cache alleen handmatig (of automatisch) opnieuw te genereren wanneer er wijzigingen in de backend worden aangebracht. Als de pagina echter dynamische inhoud bevat die afhankelijk is van sessies en cookies of ook van taal en locatie, is OPcache geschikt .


De zogenaamde opstarttijd voor alle drie genoemde systemen is meer dan 100 ms met een vers geïnstalleerde CentOS7-server (met SSD en PHP 7.1). Elke keer dat een PHP-script wordt uitgevoerd, moet het tijdens runtime in bytecode worden gecompileerd. OPcache implementeert nu een cache voor deze bytecode - als hetzelfde PHP-script wordt uitgevoerd bij het volgende verzoek, hoeft het niet opnieuw te worden gecompileerd. Na het activeren van OPcache stellen we de volgende instellingen in:

9006cec6c5d3d2498ee26c5bfd91590a

De uitvoeringstijd (gemiddeld over 10 executies) is nu aanzienlijk verkort:

WordPress 4.7.4 Joomla 3.7 Laravel 5.4
zonder OPcache 295 ms 201 ms 110 ms
met OPcache 54 ms 59 ms 13 ms
Factor 5,5 3,5 8,5

Omdat we validate_timestamps op 0 zetten en tegelijkertijd revalidate_freq op een dag, wordt de cache bijna nooit automatisch opnieuw opgebouwd (we doen dit bewust handmatig). Met een kleine git hook wordt bij elke "pull" een PHP-script uitgevoerd. Hoe de haak te activeren:

a1678610c8b4c7db5997375944183830

a1678610c8b4c7db5997375944183830

De volgende hulpfunctie is ook handig om individuele codedelen (of de volledige uitvoeringstijd) te meten:

085f4291bbcc4e8a64bbea951ff49ab9

Als je nuttige informatie wilt krijgen, zoals status, gebruikt geheugen of aantal bestanden in het cachegeheugen, gebruik je deze PHP-functie:

3f6309d04bc7e48dd909859321b96209

Om te profiteren van OPcache in een lokale ontwikkelomgeving (wat over het algemeen niet wordt aanbevolen), gebruiken we een truc.

OPcache is actief op alle servers waarop de OPcache-module is geïnstalleerd en waarop de instelling opcache.enable niet expliciet is ingesteld. We laten het zo. We zetten alleen opcache.validate_timestamps = 1 in php.ini Dit betekent dat opcache.revalidate_freq = 2. We bereiken dat OPcache bijna continu wordt gerevalideerd bij elk project. Voor die projecten waarin we OPcache permanent willen activeren, gebruiken we projectgerelateerd in de .htaccess de volgende instelling:

1dd64a3f2fe4425b29b1409410fe3fc0

Vervolgens herstarten we de webserver en maken we het volgende script:

91fb5289160e410607c9ea89112a575b

Dit script wist de cache en bouwt deze tegelijkertijd opnieuw op. Nu stellen we een werkruimte-gerelateerde RunOnSave- opdracht in in onze favoriete editor VSCode:

91fb5289160e410607c9ea89112a575b

Terug