Ottimizzazione dell'avvio di OPcache PHP

Per i siti Web basati su WordPress , Joomla o Laravel , ad esempio, e non hanno contenuti specifici dell'utente, è consigliabile mantenere tutte le pagine in una cache HTML statica e rigenerare la cache solo manualmente (o automaticamente) quando vengono apportate modifiche nel backend. Tuttavia, se la pagina contiene contenuto dinamico che dipende dalle sessioni e dai cookie o anche dalla lingua e dalla posizione, OPcache è adatto .


Il cosiddetto tempo di avvio per tutti e tre i sistemi menzionati è di oltre 100 ms con un server CentOS7 appena installato (con SSD e PHP 7.1). Ogni volta che uno script PHP viene eseguito, deve essere compilato in bytecode in fase di esecuzione. OPcache ora implementa una cache per questo bytecode: se lo stesso script PHP viene eseguito con la richiesta successiva, non è necessario ricompilarlo. Dopo aver attivato OPcache, impostiamo le seguenti impostazioni:

9006cec6c5d3d2498ee26c5bfd91590a

Il tempo di esecuzione (in media su 10 esecuzioni) è stato ora notevolmente ridotto:

WordPress 4.7.4 Joomla 3.7 Laravel 5.4
senza OPcache 295 ms 201 ms 110 ms
con OPcache 54 ms 59 ms 13 ms
Fattore 5,5 3,5 8,5

Poiché impostiamo validate_timestamps su 0 e allo stesso tempo revalidate_freq su una durata di un giorno, la cache non viene quasi mai ricostruita automaticamente (lo facciamo consapevolmente manualmente). Con un piccolo git hook , uno script PHP viene eseguito ad ogni "pull". Come attivare il gancio:

a1678610c8b4c7db5997375944183830

a1678610c8b4c7db5997375944183830

La seguente funzione di supporto è utile anche per misurare singole parti di codice (o l'intero tempo di esecuzione):

085f4291bbcc4e8a64bbea951ff49ab9

Se desideri ottenere informazioni utili come lo stato, la memoria utilizzata o il numero di file memorizzati nella cache, utilizza questa funzione PHP:

3f6309d04bc7e48dd909859321b96209

Per trarre vantaggio da OPcache in un ambiente di sviluppo locale (che generalmente non è raccomandato), utilizziamo un trucco.

OPcache è attivo su tutti i server su cui è installato il modulo OPcache e su cui l'impostazione opcache.enable non è esplicitamente impostata. Lo lasciamo così. In php.ini impostiamo solo opcache.validate_timestamps = 1. Ciò significa che opcache.revalidate_freq = 2. Ciò significa che OPcache viene riconvalidato quasi continuamente per ogni progetto. Per quei progetti in cui vogliamo attivare OPcache in modo permanente, usiamo correlato al progetto nel .htaccess la seguente impostazione:

1dd64a3f2fe4425b29b1409410fe3fc0

Quindi riavviamo il server web e creiamo il seguente script:

91fb5289160e410607c9ea89112a575b

Questo script cancella la cache e la ricostruisce allo stesso tempo. Ora impostiamo un comando RunOnSave relativo all'area di lavoro nel nostro editor preferito VSCode:

91fb5289160e410607c9ea89112a575b

Indietro