Autoload: misurare le opzioni caricate sempre e cambiarle
Che cosa viene effettivamente misurato qui
A ogni singola chiamata — pagina iniziale, immagine, chiamata REST — WordPress legge in un'unica query tutte le opzioni con la colonna autoload impostata. Queste righe costano quindi tempo non una volta sola, ma sempre. Quali valori della colonna contino come «viene caricato» Kakapo lo chiede a WordPress stesso (wp_autoload_values_to_autoload, dalla 6.6, filtro compreso); sulle installazioni più vecchie vale l'elenco yes, on, auto-on, auto. Viene poi contata la lunghezza di ogni valore in PHP, quindi byte reali. LENGTH() in SQL sarebbe più veloce, ma a seconda del driver conta caratteri invece di byte — sotto SQLite comparirebbero nell'interfaccia numeri sbagliati con caratteri accentati ed emoji. La lettura avviene a passi di 100 righe e al massimo 20.000 righe per passaggio; se questo tetto viene raggiunto, l'interfaccia lo dice e indica espressamente i numeri come limite inferiore. La misurazione avviene solo all'apertura dell'area oppure su «Misura di nuovo» — mai durante la costruzione della pagina per un visitatore — e vale poi per 300 secondi.
Leggere correttamente i quattro indicatori
In alto ci sono quattro numeri. «Caricato a ogni chiamata» indica la dimensione complessiva, il numero delle opzioni e la durata della misurazione. «Quota sulla soglia di avviso» rapporta il tutto a 800.000 byte — esattamente la stessa soglia della verifica «Salute del sito» del core di WordPress, filtro compreso; due diversi limiti di avviso in una sola installazione sarebbero solo fonte di confusione. «Di cui commutabile» è la parte senza un proprietario attivo, cioè quello che puoi davvero toccare. «Già commutato» somma quello che qui hai già tolto dal caricamento. Più sotto la scheda «Da dove viene il carico» mostra la stessa quantità suddivisa per provenienza, la seconda scheda le 25 voci singole più grandi.
L'attribuzione è un confronto di nomi, non una prova
La tabella options non ha una colonna «Proprietario». Kakapo confronta quindi il nome dell'opzione con ciò che si trova davvero sul disco: nome della cartella, nome del file dello script principale e text domain di ogni plugin installato nonché gli slug di tutti i temi. Vince il prefisso corrispondente più lungo, altrimenti «kakapowp» vincerebbe su «kakapowp_performance» e verrebbe indicato il plugin sbagliato. Ciò che un plugin usa davvero per le sue opzioni non è scritto in nessun header — un'abbreviazione come «wpseo» non è deducibile da «Yoast SEO». Casi del genere finiscono nel gruppo «nessuna attribuzione», e questo significa «non lo so», non «non appartiene a nessuno». Se conosci con certezza un prefisso, lo aggiungi tramite il filtro kwpp_autoload_praefixe; il plugin fa esattamente lo stesso per il proprio prefisso.
Che cosa si può commutare — e perché molto resta bloccato
Il pulsante «Commuta» compare solo quando due condizioni sono soddisfatte insieme: l'opzione è grande almeno 1 KB e non appartiene a nessun componente attivo. Restano quindi bloccate le opzioni del core di WordPress (elenco fisso da populate_options più i modelli theme_mods_*, widget_* e *_user_roles — quelle servono davvero a ogni chiamata), le cache temporanee (i transient rientrano nella pulizia profonda, dove spariscono del tutto invece di essere soltanto caricati più tardi), tutto quello che appartiene a un plugin attivo o al tema attivo e tutto quello che sta sotto 1 KB, perché lì la singola query aggiuntiva costa più dei byte risparmiati. Passa con il mouse sopra un pulsante disattivato: il motivo è riportato accanto come nota. Il caso che vale la pena è quasi sempre l'estensione inattiva o disinstallata da tempo, le cui righe sono semplicemente rimaste lì. Senza una licenza valida l'area è a riposo — la misurazione e la visualizzazione proseguono, ma non viene commutato nulla.
Commutare, registro, annullare
La scrittura passa per wp_set_option_autoload() del core, non per un UPDATE proprio: solo così vengono poi svuotate le cache giuste, altrimenti una cache degli oggetti esterna continuerebbe a fornire il vecchio stato. Sulle installazioni senza questa funzione Kakapo imposta «no» e svuota alloptions, notoptions e la singola voce stessa. Prima della scrittura la riga viene verificata ancora una volta di fresco: esiste ancora, è ancora impostata su «caricato» e quanto è grande in questo momento — nel registro deve finire quello che è stato davvero tolto dal caricamento. Se il database non esegue la modifica, il messaggio lo dice espressamente e non è stato cambiato nulla. Il registro conserva fino a 200 voci con vecchio valore della colonna, dimensione, momento e nome utente. L'annullamento è possibile singolarmente oppure per tutti in una volta; viene riscritto «caricato», perché il valore intermedio «auto» di WordPress non è ripristinabile tramite la funzione del core — il valore originario resta visibile nel registro. Se nel frattempo un'opzione è del tutto sparita, per esempio perché il plugin è stato disinstallato, Kakapo lo segnala e rimuove la voce priva di oggetto, invece di sostenere che sia stata «annullata».