Eseguire l'elaborazione in batch sulla libreria media esistente
Che cosa fa l'esecuzione — e che cosa deve essere attivato prima
I due moduli per le immagini di Kakapo Performance lavorano nel momento in cui WordPress genera le dimensioni delle immagini: la compressione imposta la qualità e rimuove i marcatori EXIF, IPTC e XMP dalle dimensioni generate, il modulo dei formati crea i derivati WebP e AVIF. Entrambi agiscono quindi a partire dal caricamento successivo. Per le immagini che si trovano già nella libreria media non succede nulla — ed è esattamente questa lacuna che colma l'elaborazione in blocco.
L'esecuzione non inventa lavoro. Applica all'archivio esistente esattamente ciò che hai attivato più sopra per i nuovi caricamenti: WebP e/o AVIF e «Rimuovi metadati». Se non è attivo niente di tutto questo, il pulsante di avvio è bloccato e indica il motivo — per esempio che il server non sa scrivere WebP oppure che semplicemente non è attiva nessuna impostazione. La scheda «Rielabora la libreria multimediale esistente» la trovi nella sezione «Immagini» sotto le impostazioni delle immagini; l'ordine nell'interfaccia corrisponde all'ordine d'uso: prima impostare, poi far girare l'esecuzione sull'archivio esistente.
Vengono toccati esclusivamente gli allegati di tipo JPEG e PNG che non si trovano nel cestino. La riga «Immagini JPEG/PNG presenti» ti indica il numero prima che tu avvii.
Avviare, osservare, sospendere
Un clic su «Avvia elaborazione in blocco» crea l'esecuzione e la avvia subito. Il lavoro avviene in passaggi con un budget di tempo di 8 secondi; poi il passaggio riferisce l'esito, la visualizzazione viene aggiornata e il successivo parte dopo 200 millisecondi. Se alla fine di un passaggio restano meno di 3,5 secondi, non viene più iniziato nessun altro allegato — internamente il modulo dei formati calcola almeno tre secondi per immagine. Sui server con max_execution_time impostata, il budget viene inoltre limitato all'80 per cento di questo valore, affinché il passaggio non venga troncato a metà della richiesta.
La barra mostra un avanzamento reale: numero di allegati completati diviso per il numero totale. Sotto stanno i numeri correnti — derivati generati e saltati, una riga ciascuno per WebP e AVIF, più i file alleggeriti e i byte liberati. In fondo scorrono le ultime 14 righe di log, ognuna con il nome del file e con ciò che è venuto fuori per quel file.
«Sospendi» ferma l'esecuzione. Il pulsante si chiama poi «Riprendi» e l'avvio successivo prosegue esattamente dall'allegato al quale si era fermata. Lo stesso accade se chiudi semplicemente la scheda: l'esecuzione si ferma, non va perso nulla. Se riapri la pagina, questa interroga lo stato e porta avanti da sola un'esecuzione ancora aperta.
Come l'esecuzione sopravvive a un'interruzione
Lo stato viene salvato prima del lavoro su ogni singolo allegato, non solo dopo. Se un ciclo muore a metà — limite di esecuzione del server web, memoria, un file su cui GD si strozza —, allora il ciclo successivo sa dov'era l'inghippo. Se lo stesso allegato resta senza alcun avanzamento per tre tentativi, viene ignorato con una riga in chiaro nel log, invece di bloccare l'esecuzione per sempre su un file.
Due pagine di amministrazione aperte contemporaneamente non possono ostacolarsi a vicenda: un blocco consente sempre un solo ciclo. Se un ciclo viene abbattuto dal server web e il blocco resta lì, dopo 180 secondi viene considerato orfano e viene rilevato.
Alla ripresa il numero totale viene rilevato di nuovo invece che congelato — tra la sospensione e la ripresa possono essere stati caricati o eliminati file. Se nel bel mezzo dell'esecuzione disattivi tutte le impostazioni delle immagini, questa si ferma da sola invece di svolgere un lavoro che nessuno ha più ordinato. «Reimposta» scarta avanzamento e rapporto; i file già generati restano dove sono.
Leggere correttamente il rapporto
Alla fine c'è una riga conclusiva con dimensioni di file misurate — nessuna stima. Per ogni derivato generato l'esecuzione confronta la dimensione del file di partenza con la dimensione del risultato, entrambi valori reali del momento della generazione. Viene conteggiato solo ciò che è nato ex novo in questa esecuzione; ciò che era già stato convertito al momento del caricamento non compare una seconda volta.
Tre cose sono formulate lì volutamente così e non in modo più elegante: WebP e AVIF ricevono righe separate, perché dallo stesso file di partenza nasce due volte un derivato — una somma unica conterebbe due volte il file di partenza. Le percentuali valgono perciò per ogni riga e non possono essere sommate; un browser recupera sempre solo uno dei due formati. E i nuovi file occupano spazio aggiuntivo sul disco: il risparmio avviene nella trasmissione al visitatore. Spazio di archiviazione lo libera davvero solo la rimozione dei metadati, e quei byte compaiono in una riga a sé.
Se non è stato generato nulla, anche questo lo dice il rapporto: o per l'archivio era già tutto fatto, oppure nessun risultato era più piccolo del suo file di partenza. Un risultato che non è più piccolo viene scartato e conteggiato come «saltato» — mai come guadagno.
Quando qualcosa viene saltato
Ogni derivato non generato riceve un motivo in chiaro, e i motivi compaiono raccolti nella riga conclusiva:
• «non più piccolo dell'originale» — normale, resta l'originale. • «troppo grande per la memoria disponibile» — il modulo dei formati verifica le dimensioni dell'immagine prima della decodifica e rifiuta, invece di lasciare che PHP finisca contro il limite di memoria. • «nella destinazione c'era già un file» — non viene sovrascritto. Succede tipicamente quando la nota sull'allegato è andata persa ma i file sono ancora lì. • «non leggibile» — danneggiato, JPEG in CMYK o una variante esotica. • «non scrivibile» — verifica i permessi nella cartella uploads. • «formato non disponibile su questo server» — AVIF richiede PHP 8.1 o più recente con libavif, WebP una libreria GD con libwebp.
Due cose che spesso vengono scambiate per errori, ma non lo sono: una seconda esecuzione mostra ormai poco movimento, perché ciò che è fatto non viene ripetuto — un indicatore sull'allegato registra per quanti file la rimozione dei metadati è già stata eseguita. E chi cambia un livello di qualità non rinnova con ciò alcun file già generato; per farlo i derivati dovrebbero prima sparire.