Quando è il momento di scegliere un piano di hosting, è importante sceglierne uno che corrisponda al meglio alle esigenze del proprio sito WordPress.

Ad esempio, un sito di ecommerce che riceve 50.000 visitatori al mese è normalmente molto più dispendioso in termini di risorse di un semplice blog con lo stesso traffico.

Questo è semplicemente dovuto al fatto che i siti di ecommerce sono normalmente di natura dinamica e richiedono più risorse per PHP e per le query sul database.

È qui che entrano in gioco i PHP worker. In questo articolo scoprirete cosa sono i PHP worker e come vengono utilizzati per velocizzare l’elaborazione delle richieste sul vostro sito.

Cos’è un PHP Worker?

Nell’ambito di WordPress, i PHP worker costruiscono le pagine, elaborano le attività di background programmate e altro ancora. Dal momento che i PHP worker hanno il compito di generare le pagine HTML da servire ai visitatori del vostro sito, determinano il numero di richieste simultanee non memorizzate nella cache che il vostro sito può gestire in un dato momento.

Ad esempio, diciamo che il vostro sito WordPress è dotato di due PHP worker e nessuna configurazione di cache pagina. Se quattro richieste arrivano al vostro sito esattamente nello stesso momento, due di queste richieste verranno elaborate immediatamente, mentre le altre due dovranno aspettare in coda fino a quando non sarà terminata l’elaborazione delle prime due.

Qui da Kinsta, i PHP workers sono una delle variabili dei nostri diversi livelli di piano. Ad esempio, i piani WP 5 hanno 4 PHP worker per sito, mentre i piani Enterprise partono da 8 PHP worker per sito.

Anche se implementiamo il caching a livello di server, per le richieste in cui la cache viene bypassata o persa, i PHP workers diventano molto importanti in quanto devono lavorare per ogni richiesta.

Di solito registriamo molte richieste non memorizzate nella cache su siti di ecommerce e forum di community. Questi siti richiederanno un numero maggiore di PHP worker per garantire che ogni richiesta venga elaborata senza ritardi o timeout.

Se il vostro sito è ottimizzato o non ha molto codice PHP (ad esempio un tema complesso o molti plugin di WordPress), allora l’elaborazione di ogni richiesta dovrebbe avvenire quasi istantaneamente. Anche con 2 PHP worker e 4 richieste, tutte e quattro le richieste verrebbero gestite molto rapidamente.

In parole povere, un PHP worker è un processo in background che esegue codice PHP su un server.

In che modo WordPress utilizza i PHP worker?

Prima di addentrarci nel modo in cui ottimizzare l’utilizzo dei PHP worker con WordPress, dobbiamo prima di tutto capire come WordPress utilizza i PHP workers.

Una richiesta tipica in un ambiente senza cache procede più o meno così:

  1. Il server web (Nginx o Apache) riceve una richiesta da un visitatore.
  2. Nginx passa la richiesta a PHP.
  3. PHP interroga il database MySQL in base alle necessità e utilizza i template PHP del tema per generare una pagina HTML.
  4. PHP restituisce una pagina HTML renderizzata al server web.
  5. La pagina viene servita al visitatore.

Nel processo sopra evidenziato, il passaggio 3 è il più dispendioso in termini di tempo e di risorse (CPU e RAM). Un sito altamente ottimizzato, con query sul database ridotte al minimo e codice PHP efficiente, supererà il terzo passaggio in modo relativamente rapido.

Al contrario, un sito con codice PHP scritto male, e che genera un sacco di query inutili sul database, impiegherà molto più tempo a completare il passaggio 3, il che significa che le richieste terranno occupati i PHP worker per periodi di tempo più lunghi.

La relazione tra i PHP Worker e la CPU

Per quanto riguarda le prestazioni di WordPress, il rapporto tra PHP worker e CPU disponibile è decisamente importante.

Se la mancanza di risorse di CPU è il collo di bottiglia del vostro sito, l’aumento del numero di PHP workers non aumenterà le prestazioni del sito – permetterà solo al vostro sito di elaborare più richieste allo stesso tempo con prestazioni per-richiesta più lente.

Lasciatemi spiegare.

Immaginate un idrante antincendio con un solo tubo collegato. Con un solo tubo, l’idrante è in grado di fornire un’adeguata pressione dell’acqua. Ora, cosa succede se attacchiamo dieci manichette all’idrante?

La pressione limitata dell’acqua è distribuita su dieci tubi flessibili, il che significa che ogni singolo tubo ha una pressione d’acqua inferiore per portare a termine il lavoro. In questa analogia, l’idrante è la CPU, e i tubi flessibili sono PHP worker.

Tenendo questo presente, dovreste essere prudenti se il vostro host vi consiglia costantemente di aumentare i PHP worker senza parlare anche della CPU.

Qui a Kinsta, i nostri container LXD personalizzati sono configurati con ampie risorse di CPU e RAM. Usiamo anche macchine virtuali C2 e C3D dotate delle CPU più veloci di Google Cloud per aiutare i PHP worker del vostro sito a funzionare in modo più efficiente. La nostra infrastruttura scalabile assicura che i PHP worker del vostro sito WordPress abbiano abbastanza risorse CPU per operare al massimo delle prestazioni.

Torniamo per un attimo all’analogia dell’idrante.

Immaginate di trovarvi in una situazione in cui dovete spegnere dieci incendi con cinque manichette. Dopo aver collegato tutte e cinque le manichette, vi rendete conto che l’idrante fornisce ancora un’adeguata pressione dell’acqua.

In questa situazione, avrebbe senso collegare qualche tubo in più, perché la pressione dell’acqua dell’idrante non è un collo di bottiglia.

Allo stesso modo, se il vostro sito funziona male anche con un adeguato overhead di CPU e RAM, allora dovreste considerare la possibilità di aumentare il numero di PHP worker come soluzione per migliorare le prestazioni.

Come ottimizzare l’utilizzo di PHP Worker del proprio sito

Abbiamo spiegato che i PHP worker sono processi in background che generano pagine HTML con codice PHP. Ora, il modo più ovvio per ridurre e ottimizzare l’utilizzo dei PHP worker è quello di ridurre la quantità di CPU e di risorse PHP necessarie per soddisfare le richieste che pervengono al vostro sito.

Ecco come fare.

1. Impostare la cache per il sito WordPress

Il primo passo per ridurre l’utilizzo di PHP worker è creare livelli di cache per il vostro sito WordPress. Di default, WordPress è un CMS dinamico che soddisfa ogni richiesta di pagina su domanda.

Per molti siti come blog, magazine online e portfolio, utilizzare PHP per generare dinamicamente pagine per ogni richiesta è inutile.

Cache di pagina

Il post che state leggendo è l’esempio perfetto di una pagina che non ha bisogno di essere generata dinamicamente. Come molti altri nostri post, il contenuto di questo articolo è progettato per essere statico, quindi non c’è bisogno di spendere risorse della CPU per generare pagine identiche in modo continuo.

Invece, è meglio che PHP generi la pagina una volta sola e poi la metta in cache. La cache delle pagine ha molti ovvi vantaggi rispetto alla generazione dinamica di pagine con PHP.

Ad esempio, immaginate che un post sul vostro sito diventi virale e riceva 100.000 visualizzazioni in poche ore dal momento della pubblicazione. Senza la memorizzazione delle pagine nella cache, i vostri PHP worker verrebbero probabilmente sopraffatti e il vostro server andrebbe in crash.

Con la memorizzazione delle pagine nella cache, verrebbe generata dinamicamente solo la prima visualizzazione della pagina. Le altre 99.999 richieste sarebbero servite dalla cache, che utilizza relativamente poche risorse della CPU.

Ci sono due modi per impostare la memorizzazione delle pagine nella cache per il vostro sito WordPress.

  1. Cache delle pagine a livello di server con un server web come Nginx.
  2. Cache delle pagine basato su plugin con un plugin WordPress come WP-Rocket.

Per ottenere il massimo delle prestazioni, consigliamo di utilizzare, quando possibile, la cache delle pagine a livello di server. Da Kinsta, tutti i nostri siti utilizzano il modulo di cache FastCGI di Nginx, che garantisce prestazioni super-veloci.

Se il vostro host non offre l’opzione di cache di pagina a livello di server, l’opzione migliore è quella di utilizzare un plugin per la cache di WordPress che implementi il page caching a livello di applicazione.

Cache di oggetti

Per i negozi WooCommerce, i forum di community e altri siti WordPress che non possono utilizzare la cache delle pagine in modo efficiente, l’aggiunta di una cache di oggetti persistente come Redis davanti al vostro database MySQL può migliorare le prestazioni e ridurre il carico sui PHP workers.

Senza una cache di oggetti persistente, le query sul database MySQL vengono eseguite per ogni richiesta anche se il risultato è identico a quello di una query precedente.

Ad esempio, il sito di un forum di community che bypassa la cache delle pagine genererà sul database delle query separate identiche per prelevare i dati dei post al fine di costruire una pagina.

Per i siti ad alto traffico e con grandi database, questo metodo di interrogazione del database è inefficiente perché utilizza i PHP worker per generare risultati di query identici per richieste separate. È qui che entra in gioco Redis.

Redis memorizza i risultati delle query del database nella RAM, cosa che permette a PHP di trattenere i risultati delle query già eseguite. Questo metodo di caching degli oggetti permette ai PHP worker di preservare le risorse della CPU e di dedicare meno tempo a completare una richiesta perché elimina la necessità di eseguire sul database query ripetitive.

2. Ottimizzare il codice PHP

Oltre ad impostare la cache delle pagine, un’altra strategia che vi aiuterà a ridurre l’utilizzo dei PHP worker è l’ottimizzazione del vostro codice PHP. Nell’ambito di WordPress, “ottimizzare il codice PHP” può significare molte cose diverse, quindi analizziamo questo punto in modo più approfondito.

Una delle caratteristiche più amate e odiate di WordPress (a seconda della persona a cui lo chiedete) è la sua estendibilità tramite plugin e frammenti di codice.

Se volete aggiungere un widget ticker azionario al vostro sito WordPress, c’è un plugin anche per questo. Allo stesso modo, se volete aggiungere font personalizzati, anche per questo c’è un frammento di codice per il file functions.php.

Estendere il core di WordPress con funzionalità aggiuntive è diventato così facile che spesso si esagera e non si pensa al potenziale impatto sulle prestazioni del sito.

Pertanto, il primo modo per ottimizzare il codice PHP è quello di eseguire un controllo in tutto il sito per individuare i plugin e i frammenti di codice che sono veramente necessari.

Scegliere plugin di qualità

Il più delle volte il numero di plugin installati sul vostro sito WordPress non è così importante come la qualità dei plugin. Se un plugin non è stato aggiornato negli ultimi sei mesi, vi consigliamo di sceglierne un altro più adatto alla situazione.

Il motivo è che WordPress viene migliorato costantemente. Se un plugin non viene aggiornato da anni, è probabile che il suo codice non segua le migliori prassi di sviluppo e sicurezza di WordPress.

Al contrario, se un plugin viene aggiornato regolarmente ogni poche settimane, ci sono buone probabilità che lo sviluppatore prenda sul serio la qualità, il che lo rende una buona scelta per il vostro sito WordPress.

Utilizzare i plugin solo quando è necessario

Se state cercando di eseguire sul vostro sito un semplice compito come l’aggiunta di JavaScript o CSS, non è sempre necessario un plugin. Potete, invece, aggiungere codice direttamente ai template PHP del tema o al file style.css di un child theme.

La prossima volta che vi trovate in una situazione in cui state pensando di installare un plugin, prima dedicate un po’ di tempo a verificare se è necessario al 100%. A volte non c’è modo di installare un altro plugin e va bene così. Altre volte, si può evitare di aggiungere altro codice evitando di installare plugin non necessari.

Scegliere temi leggeri

Dalla nostra esperienza nel monitorare migliaia di siti WordPress, abbiamo scoperto che di tanto in tanto la causa delle scarse prestazioni di PHP sono i temi. Per favorire la versatilità di WordPress come CMS di utilizzo generale, alcuni sviluppatori progettano i propri temi in modo che siano adatti ad una varietà di casi d’uso.

Spesso questo si traduce in temi pesanti e gonfi che non utilizzano in modo efficiente PHP e database.

Quando si costruisce un sito WordPress, è importante scegliere un tema che sia il più possibile performante e personalizzabile – GeneratePress, OceanWP e Astra sono tre buoni esempi.

3. Scegliere un host WordPress focalizzato sulle prestazioni

Che ci crediate o no, scegliere il giusto host WordPress può avere un enorme impatto sulle prestazioni del vostro sito. Dal momento che l’efficienza di un PHP worker è direttamente correlata con la CPU e la RAM, ospitare il vostro sito su un server moderno con l’hardware più recente può aiutarvi a ottimizzare l’utilizzo dei PHP worker.

Ecco due esempi che mostrano perché la scelta di un host concentrato sulle prestazioni è importante per i vostri siti WordPress.

CPU ad alte prestazioni

PHP utilizza le risorse della CPU per eseguire il codice. Una CPU più veloce permette una più rapida esecuzione del codice. Noi di Kinsta utilizziamo i server più veloci di Google Cloud – le VM C2 ottimizzate per il calcolo e le C3D generiche con motore di calcolo.

Queste VM sono dotate dei più recenti processori Intel Xeon in grado di operare a 3,8 GHz all-core turbo. Nei nostri test di benchmark, abbiamo visto le macchine C2 superare di 2-4 volte le tradizionali macchine N1, mentre le macchine C3D hanno visto migliorare i tempi di risposta di un ulteriore 20% fino al 50%..

Archiviazione SSD veloce

La velocità di I/O del disco può avere un impatto diretto sull’esecuzione del codice e sulle query del database. Se il vostro database è memorizzato su un disco meccanico lento o su un SSD basato su cloud senza sufficienti IOPS (operazioni di input/output al secondo), i vostri PHP worker impiegheranno più tempo per soddisfare una richiesta.

Utilizziamo lo storage SSD ad alte prestazioni della Google Cloud Platform per garantirvi che il vostro sito WordPress abbia accesso all’I/O veloce del disco.

4. Lavorare con un esperto di prestazioni (facoltativo)

Se non siete sicuri di come affrontare un problema di prestazioni del vostro sito, per diagnosticare il problema vi consigliamo di lavorare con un esperto di prestazioni qualificato.

Un esperto può aiutarvi a identificare specifici colli di bottiglia nel vostro codice, utilizzando strumenti di monitoraggio avanzati come New Relic o il plugin Query Monitor di WordPress.

Zoomando e ispezionando i singoli processi PHP e le query sul database, è possibile identificare specifici blocchi di codice e le caratteristiche associate che stanno mettendo alla prova i PHP worker del vostro sito.

Per riassumere l’ottimizzazione dei PHP workers, tenete a mente i seguenti suggerimenti.

  1. CPU e RAM dovrebbero essere scalate insieme ai PHP worker. Se l’utilizzo della CPU è bloccato al 100%, l’aggiunta di più PHP worker non migliorerà le prestazioni.
  2. Scegliere per il vostro sito un host focalizzato sulle prestazioni può risolvere molti problemi di performance.
  3. La cache di pagina e la cache di oggetti possono ridurre significativamente il carico di lavoro dei PHP worker.
  4. L’utilizzo di plugin e temi WordPress di qualità può ridurre la quantità di codice inutile sul vostro sito.
  5. Se necessario, collaborate con un esperto di prestazioni per identificare e risolvere i problemi più complessi.

Risultati di PHP Worker insufficienti

Per ottenere prestazioni veloci e affidabili per il vostro sito WordPress, è importante che vi assicuriate che i PHP worker siano sufficienti. Quando i PHP worker sono già impegnati su un sito, iniziano a creare una coda.

Una volta raggiunto il limite dei PHP worker, la coda inizia a spingere fuori le richieste più vecchie, il che potrebbe causare errori 504 o richieste incomplete.

Un altro errore comune che può essere causato dalla mancanza di PHP worker è il 502 Bad Gateway. Questi errori sono leggermente diversi dagli errori 504 perché l’errore si verifica dopo un timeout di 60 secondi nella coda dei PHP workers.

Questi errori non solo generano una cattiva esperienza per i vostri visitatori, ma possono anche avere un impatto negativo sulla SEO del vostro sito.

Un errore 502 (Bad Gateway).
Un errore 502 (Bad Gateway).

Sono diversi i fattori che possono causare un caricamento lento delle pagine o errori. Ad esempio, se una richiesta non registrata richiede di prelevare molti dati dal database, per essere completata l’interrogazione risultante potrebbe richiedere 20-30 secondi.

In questa situazione, un PHP worker sarebbe occupato per almeno mezzo minuto. Se il vostro sito ha solo due PHP worker, solo due o tre di queste lunghe richieste possono essere sufficienti a causare errori.

Per risolvere questo problema, se la CPU non è già al massimo, ottimizzare il database MySQL e aumentare i PHP worker, potrà migliorare le prestazioni.

Stimare il numero di PHP Worker necessari

Ciascuno dei piani di hosting di Kinsta include un certo numero di PHP worker. Il numero di PHP worker inclusi si basa su serie storiche di dati di utilizzo delle risorse che abbiamo raccolto negli ultimi anni. In generale, i siti con contenuti prevalentemente statici – articoli, pagine statiche e portfolio – non richiedono molti PHP worker.

Per i siti WordPress più grandi, con funzionalità più dinamiche come gli eCommerce o i forum di discussione, abbiamo stimato che 4 PHP worker sono un buon punto di partenza. Tuttavia, questo numero può variare a seconda del sito, in quanto ogni sito avrà un proprio insieme unico di tema, plugin, query sul database e rapporto cached-to-uncached.

In alcuni casi, potrebbero essere necessari più PHP worker per ottenere prestazioni veloci e stabili. Se non siete sicuri del numero di PHP worker di cui il vostro sito ha bisogno su Kinsta, i nostri team di vendita e supporto possono aiutarvi a scoprirlo.

Grafico dei limiti di PHP Worker

Il grafico dei limiti dei PHP worker nelle statistiche di MyKinsta permette di vedere quante volte il motore PHP ha segnalato nel registro degli errori il raggiungimento del numero massimo di worker assegnati. Questo grafico può aiutarvi a valutare se le ottimizzazioni delle prestazioni hanno o meno un impatto sull’utilizzo dei PHP worker.

Principali bypass della cache.
Principali bypass della cache.

Ad esempio, se passate da PHP 5.6 a PHP 7.4 del vostro sito, vedreste probabilmente un calo dei limiti dei PHP worker, perché PHP 7.4 è molto più veloce di PHP 5.6.

Allo stesso modo, se avete lavorato con un esperto di prestazioni per ridurre le lunghe query sul database e passate a un tema più leggero, potete utilizzare il grafico dei limiti dei PHP worker per vedere le differenze tra il prima e il dopo delle ottimizzazioni.

Diagramma di analisi della cache

In MyKinsta potete anche utilizzare il report di analisi della cache per determinare il numero di hit, bypass, miss e scadenze della cache. Questi dati possono essere particolarmente utili quando si ottimizza l’utilizzo di PHP worker del sito.

Bypass della cache con le query string

Di default, gli URL con query string come https://kinstalife.com/?query=123 bypassano la cache delle pagine. In alcuni casi, le query string possono causare un grande picco di utilizzo inutile di PHP e CPU.

Ad esempio, se visitate un link da Facebook, spesso vedrete la query string fbclid= alla fine dell’URL. Allo stesso modo, potete vedere i parametri di tracciamento UTM dopo aver fatto clic sul link in una newsletter.

Un URL con una query string (
Un URL con una query string (“querystring=123).

Se un post del vostro sito diventa virale e viene costantemente consultato con una query string, potrete identificare l’URL specifico con il report di analisi della cache.

Con questa informazione chiave, potete poi contattare il nostro team di supporto per forzare la cache di quell’URL specifico e ridurre il carico sui vostri PHP worker.

Identificare i plugin ad alto consumo di risorse

In alcuni casi, il grafico di analisi della cache può essere usato anche per identificare plugin e processi che richiedono molte risorse.

Ad esempio, se vedete che la principale URL di bypass della cache punta a un file all’interno della directory di un plugin specifico, c’è una buona probabilità che il plugin sia responsabile dell’elevato utilizzo di PHP worker.

Se vedete nel vostro elenco di bypass della cache molte richieste relative ai plugin, potete lavorare con uno sviluppatore per risolvere il problema o passare a un plugin che utilizza meno risorse.

Riepilogo

Il motivo per cui mantenere un sito WordPress veloce è quello di massimizzare l’efficienza del backend. Quando i PHP worker sono utilizzati correttamente trovando un equilibrio tra il numero dei worker, l’utilizzo della CPU e l’ottimizzazione del codice, WordPress può essere un CMS estremamente performante.

Se avete domande sul numero di PHP worker di cui potreste aver bisogno, o se pensate di vedere degli errori dovuti alla mancanza di PHP worker, aprite un ticket con il nostro team di supporto per ricevere assistenza.

Ora tocca a voi: quali strategie di ottimizzazione adottate per mantenere in efficienza il vostro sito WordPress? Fatecelo sapere nei commenti!

Brian Li

Brian utilizza WordPress da oltre 10 anni e si diverte a condividere le sue conoscenze con la community. Nel tempo libero, Brian ama suonare il pianoforte ed esplorare Tokyo con la sua macchina fotografica. Potete mettervi in contatto con Brian sul suo sito web all'indirizzo brianli.com.