devdev / in the loop
PHP PHP

Guida PHP 7 guru
Velocizziamo PHP con OPcache

Integrato in PHP troviamo un caching system molto efficace, chiamato OPcache. Questo migliora notevolmente le performance di esecuzione conservando in memoria dei “pezzi” già compilati, in modo da non dover fare il parse per ogni richiesta. Esattamente come ogni sistema di cache, insomma, OPcache alla prima esecuzione salverà in memoria gli script già compilati e alle successive esecuzioni servirà direttamente questi agli utenti, senza necessità di leggere nuovamente il codice. Questo può garantire una velocità fino a 3 volte superiore.

Perché dovremmo usarlo

OPcache non ha aspetti negativi, se non il fatto che avremo più RAM occupata (per conservare appunto la cache) e vi raccomando di usarla sempre in produzione. Tutti i sistemi di cache hanno più o meno lo stesso iter: al momento della richiesta dell’utente, viene verificato se in cache c’è quella pagina richiesta. Se c’è, viene servita. Altrimenti viene generata la cache e viene servita. Questo significa che quando eseguiamo per la prima volta lo script ci potrebbe essere dell’overhead della “cache iniziale”, ma è in sostanza l’unico lato negativo.

OpCode cache

Nel corso degli anni sono nati diversi tipi di sistemi di cache per PHP, i più noti sono APC e XCache. Quello che rende, però OPcache migliore è il fatto che usa la tecnica del caching dell’opcode. Vediamo di che si tratta. Al momento di una richiesta, il sistema legge (fa il parse) di uno script PHP, quello leggibile che abbiamo scritto e lo divide in parti, detti token. Questi token vengono compilati (o tradotti) in opcodes, ovvero in istruzioni di più basso livello.

Fare la cache degli opcode significa quindi riutilizzarli, da qui la tecnica dell’opcode caching della quale si occupa OPcache.

L’engine più celebre che sfrutta questo meccanismo è quello di Zend (la società dietro PHP), chiamato appunto Zend OpCache, che a partire dalla versione PHP 5.5 è incluso direttamente ed è abilitato di default.

 

Capitolo successivo → Il server in locale integrato in PHP
if (weekend) {
    relax();
}
la nostra newsletter, ogni tanto.