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 en `revalidate_freq` op een duur van één dag hebben ingesteld, wordt de cache praktisch nooit automatisch opnieuw opgebouwd (we doen dit bewust handmatig). Een kleine Git-hook voert bij elke pull een PHP-script uit. Zo activeer je de hook.:
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