Avvio di WordPress: come avviene, nel dettaglio Guida base (molto base) in italiano ai WordPress internals

<span class="entry-title-primary">Avvio di WordPress: come avviene, nel dettaglio</span> <span class="entry-subtitle">Guida base (molto base) in italiano ai WordPress internals</span>

Vi siete mai chiesti cosa succeda “dietro le quinte” ogni volta che si apre un sito in WP? Le operazioni eseguite sono moltissime, ed il livello di complessità raggiunto dal core passa per chiamate a funzioni sempre più complesse ed “intrecciate” tra loro, rendendo obiettivamente difficile la comprensione di tutti i dettagli.

Qualcuno potrebbe chiedersi a cosa possa servire sapere almeno qualcosa sull’argomento: il punto è che, di fatto, l’avvio di WordPress può influire sui tempi di rendering delle pagine HTML, influenzando ad esempio il TTFB (Time-To First Byte), cioè l’attesa tra la prima richiesta del client e l’inizio dell’invio del markup HTML. Il blog theme.fm in proposito ha fatto un lavoro molto dettagliato, sui cosiddetti WordPress internals, addirittura è stato l’unico a farlo da questa particolare angolazione, ed è ai due post di Gennady Kovshenin che mi sono ispirato per spiegare questo complicato ed affascinante processo.

Se avrete la pazienza di seguirmi, infatti, sarà interessante scoprire alcuni aspetti “segreti” di WordPress, specie nel caso in cui vogliate ottimizzare l’overhead iniziale, cioè ridurre il tempo di caricamento delle pagine (quello che precede ogni altra operazione), evidente quando testate il vostro sito con strumenti come tools.pingdom.com.

Per la cronaca: è opinione diffusa sui vari forum per sviluppatori che molte cose non siano per nulla chiare, rendendo difficile – tanto per fare un esempio – mettere mano a WordPress lato back-end o back-office amministrativo. Quando descritto di seguito è soggetto a possibili errori, per cui è sconsigliato di testare queste funzioni su server che non siano di sviluppo.

La fase di startup di WordPress

Tutto parte dal file index.php, il file che avvia il processo di preparazione per il caricamento di una pagina: come forse già saprete, la chiamata può essere secca (home page) oppure contenere dei parametri di pagina (index.php?p=123) oppure di post o altri contenuti. Cosa troviamo dentro questo file?

Inizialmente WordPress, nel momento in cui riceve la richiesta di una chiamata, include il file wp-blog-header.php: questo dovrebbe essere familiare a chiunque abbia provato a fare delle chiamate a WP in modalità asincrona, per accedere ai dati del database di WP “al volo”, fuori dal contesto di WP, mediante una funzione asincrona (Ajax).

Il frammento di codice in esame è forse già familiare agli sviluppatori, ed è il seguente:

/* Loads the WordPress Environment and Template */
require('./wp-blog-header.php'); 

Se avete avuto necessità di richiamare funzioni WP in modo asincrono, fuori dal contesto globale di WP, questo è – per inciso – il frammento di codice utile al caso, che dovrebbe precedere qualsiasi altra istruzione.

La fase di SHORTINIT: chiamate asincrone a WordPress

Si passa, dopo aver incluso i contenuti del file wp-config.php (che ho descritto sul sito qui e qui) al cosiddetto SHORTINIT, che è un insieme iniziale di chiamate e definizioni di funzioni, file di traduzione, helpers, wrapper, editor TinyMCE, regex, chiamate di sistema ed un’ulteriore infinità di dettagli troppo complessi da riassumere in un post. In breve, questa fase carica le API essenziali di WordPress, in modo da permettere un coding essenziale o, se preferite, di sfruttare WP come framework.

C’è da dire, come notato nei commenti al post originale, che i plugin che abusano un po’ dell’overhead iniziale si innestano senza complimenti nello SHORTINIT, e – nonostante le mie speranze favorevoli – non c’è un modo per individuare tutti i plugin critici sotto questo punto di vista (il sito plugins.svn.wordpress.org non sembra indicizzato a dovere su Google).È un dato di fatto, comunque, che se usate parecchi plugin per WordPress ci sia una buona probabilità che tendano a rallentare la fase di pre-avvio delle vostre pagine (ed un modo banale per provarlo esiste: basta misurare i tempi di caricamento della pagina con tutti i plugin attivi e subito dopo averli disattivati). WPEngineer nota, a questo punto, che esiste pure una variabile SHORTINIT, che spezza il flusso di codice a questo punto e permette, quindi, di risparmiarsi l’overhead di chiamate inutili.

Si attiva così nel wp-config.php:

define( ‘SHORTINIT’, TRUE );

ma attenzione: a parte che imposterà a null per ovvie ragioni le variabili globali $wp e compagnia, questo approccio va bene per funzioni AJAX che usino WordPress (quindi vostre API, ad esempio), per l’uso ordinario di WP non vanno, ovviamente, bene.

Per il resto c’è poco su cui poter mettere mano, anche perchè si tratta di chiamate piuttosto complesse che, peraltro, hanno quasi certamente subìto parecchie modifiche ed ottimizzazioni con gli ultimi aggiornamenti.

Il caricamento di WordPress continua

Passiamo quindi direttamente alla definizione delle funzionalità di core vere e proprie, quindi Main API, Error API, Plugin API, Object Cache e tutto quando definisce un’istanza di WP vera propria, sia essa ordinaria o estesa mediante framework. In questo processo, beninteso, la mia sintesi estrema deriva ancora una volta da un mix di oggettiva difficoltà nel separare le varie operazioni “atomiche” ed elencarle ordinatamente.

Quello che succede è presto detto: si caricano i file di internazionalizzazione, i walker per i menù, i vari hook e le funzioni per utenti, query, theme e parecchi template. Dopo è la volta di widget, altre classi helper, le informazioni aggiornate su data ed ora del server e qualche altra cosa su cui, di norma, non è ordinario nè consigliabile intervenire. La descrizione del processo, poi, non finirebbe neanche qui: quanto visto finora interessa solo i file wp-setting.php e wp-config.php, il wp-blog-header.php non è ancora terminato poichè dovrà, a seconda dei casi, richiamare il template backend oppure frontend.

Photo by alexbrn

Ti piace questo articolo?

1 voto

Su Trovalost.it puntiamo sulla qualità dei contenuti da quando siamo nati: la tua sincera valutazione può aiutarci a migliorare ogni giorno.

Avvio di WordPress: come avviene, nel dettaglio Guida base (molto base) in italiano ai WordPress internals

Vi siete mai chiesti cosa succeda “dietro le quinte” ogni …
6 1 utenti hanno votato questa pagina

Ti potrebbero interessare (Guide WordPress):

Cerca altro nel sito

Clicca sul box, e scegli la sezione per vederne i contenuti.

Avvio di WordPress: come avviene, nel dettaglio

Vi siete mai chiesti cosa succeda “dietro le quinte” ogni …
6 1 utenti hanno votato questa pagina