Il modo più semplice per velocizzare il vostro sito WordPress è quello di eliminare tutte le sue risorse indesiderate. Il secondo modo più semplice per velocizzarlo è quello di comprimere tutte le sue risorse desiderate. Abilitare la compressione GZIP sul vostro server web è uno dei modi più semplici ed efficienti per raggiungere questo obiettivo.

Tutti i browser moderni includono di default il supporto per la compressione GZIP. Tuttavia, per servire le risorse compresse ai vostri utenti senza singhiozzi, è necessario configurare correttamente il vostro server.

In questo post, imparerete le basi della compressione dei dati sul web, che cos’è la compressione GZIP, i suoi vantaggi e come potete usarla per velocizzare i vostri siti WordPress su diverse configurazioni di server.

Non vedi l’ora? Iniziamo la decompressione!

Preferite guardare la versione video?

Le Basi della Compressione dei Dati sul Web

Comprimere i dati sul web significa ridurre le dimensioni dei dati trasmessi dai siti web. A seconda del tipo di dati – testo, immagini, fogli di stile, script, font – ci sono diversi modi per portare avanti questo processo di compressione.

I componenti principali di una pagina web
I componenti principali di una pagina web

Ad esempio, la minificazione di HTML, CSS e JavaScript è un modo semplice per ridurre la quantità di dati inviati dai browser. Qui, il minifier comprime il testo rimuovendo i caratteri non necessari come commenti e spazi bianchi dal codice sorgente.

Nell’esempio seguente prendiamo in considerazione un semplice documento HTML in cui esistono tre tipi di contenuto: Markup HTML, stili CSS e codice JavaScript.

Ogni tipo di contenuto ha una sintassi e una semantica uniche. Nel complesso, questo documento HTML ha un totale di 357 caratteri.

<html>
<head>
    <style>
    /* kinsta-banner is used on the homepage only */
    .kinsta-banner { font-size: 150% }
    .kinsta-banner { width: 75% }
</style>
</head>
<body>
    
    <div>...</div>
    
    <script>
    kinstaScripts(); // random scripts used on the page
    </script>
</body>
</html>

Il codice qui sopra è facile da leggere e da seguire. È ideale per lo sviluppo. Tuttavia, il browser non ha bisogno di leggere i commenti al codice né di vedere i tag perfettamente dentellati. Un compressore intelligente può analizzare questo documento e rimuovere tutti i bit non necessari.

<html><head><style>.kinsta-banner{font-size:150%;width:75%}</style></head><body><div>...</div><script>kinstaScripts();</script></body></html>

Dopo la minificazione, il documento HTML si riduce a soli 141 caratteri. Si tratta di un risparmio del 60,50% nel numero di caratteri. Non è così facile da vedere, ma questo non ha importanza per il browser. L’utente visualizzerà comunque la stessa pagina.

Per sfruttare entrambe le versioni, è possibile mantenere il documento originale come “versione di sviluppo”, ma minificare tutto il codice prima di pubblicarlo live.

La maggior parte dei plugin di ottimizzazione delle prestazioni WordPress si occupa automaticamente di questo aspetto.

Compressione delle dimensioni del file di jQuery non compresso vs minificato
Compressione delle dimensioni del file di jQuery non compresso vs minificato

Come si vede nell’esempio, la versione non compressa della libreria jQuery 3.5.1 è 3 volte più grande della versione minificata dello stesso file.

Allo stesso modo, le stesse tecniche di compressione sopra descritte possono ottimizzare altri tipi di contenuti come immagini, video, font e altro ancora. Riduzioni specifiche dei contenuti come queste sono il primo passo per ottimizzare le dimensioni delle risorse testuali del vostro sito web.

Questi evidenti vantaggi sono il motivo per cui Kinsta ha introdotto una funzione di minificazione del codice nel cruscotto MyKinsta. I clienti possono scegliere di attivare la minificazione automatica del codice per i loro file CSS e JavaScript, velocizzando i loro siti senza alcuno sforzo.

Ma la compressione dei dati è qualcosa di più di una semplice minificazione. Usando tecniche matematiche avanzate, gli algoritmi di compressione dei dati possono ridurre ulteriormente la dimensione dei dati.

Uno degli esempi più popolari di tale metodo di compressione dei dati è GZIP. GZIP consente un’efficiente trasmissione dei dati e ha contribuito in modo significativo a rendere Internet un valido mezzo di comunicazione globale.

Cos’È la Compressione GZIP?

GZIP, abbreviazione di GNU Zip, è il metodo di compressione dati senza perdita di dati più popolare sul web. Permette di ridurre le dimensioni delle pagine HTML, dei fogli di stile e degli script del vostro sito.

Oltre a essere un algoritmo di compressione dei dati, GZIP è anche un’estensione di file (.gz) e un software usato per la compressione/decompressione dei file.

Si basa sull’algoritmo DEFLATE, che è un mix di algoritmi di codifica LZ77 e Codifica Huffman.

La compressione GZIP è basata sull'algoritmo DEFLATE
La compressione GZIP è basata sull’algoritmo DEFLATE

Un compressore GZIP prende una serie di dati grezzi e li comprime senza perdita di dati. I dati grezzi possono provenire da qualsiasi tipo di file, ma GZIP funziona al meglio con risorse basate sul testo (ad esempio HTML, CSS, JS).

Nella sezione successiva vedremo in profondità il funzionamento della compressione GZIP.

Come GZIP Comprime i Dati

Un'illustrazione approssimativa di come funziona la compressione GZIP
Un’illustrazione approssimativa di come funziona la compressione GZIP

Per cominciare, il compressore GZIP esegue l’algoritmo di compressione LZ77 sui dati grezzi per rimuovere le ridondanze. Questo algoritmo funziona trovando schemi ripetuti in una finestra scorrevole predefinita (una piccola sezione dei dati grezzi).

Sostituisce poi tutte le stringhe ripetute con tuple per comprimere i dati grezzi.

Un'illustrazione dell'algoritmo di codifica LZ77
Un’illustrazione dell’algoritmo di codifica LZ77

Nell’esempio che abbiamo riportato sopra, la dimensione della finestra scorrevole è di soli 13 caratteri (13 byte). Tuttavia, la compressione GZIP può usare una dimensione massima della finestra scorrevole di 32 KB (32.768 byte). La dimensione della finestra scorrevole gioca un ruolo chiave nelle prestazioni di compressione della LZ77.

Dopo aver compresso i dati grezzi con l’algoritmo LZ77, il compressore GZIP utilizza l’algoritmo di codifica Huffman per comprimerli ulteriormente. Lo fa assegnando ai caratteri che si verificano più frequentemente il minor numero di bit, mentre assegna ai caratteri rari il maggior numero di bit.

Questa tecnica è simile a quella usata nel codice Morse, dove le lettere che si verificano più frequentemente in lingua inglese ottengono le sequenze più brevi.

Per capire come funziona l’algoritmo di codifica di Huffman, considerate la parola BOOKKEEPER. È lunga 10 caratteri, ma ha solo 6 caratteri unici. Questa parola include un buon mix di lettere singole, doppie e triple.

Quasi tutti i siti web usano la codifica dei caratteri UTF-8 per rappresentare lettere e simboli. Ogni carattere ASCII in UTF-8, che include anche l’alfabeto inglese, usa 1 byte (8 bit).

La parola
La parola “BOOKKEEPER” ha molte lettere che si ripetono

Una stringa di 10 caratteri come BOOKKEEPER richiede 10 byte (80 bit) di memoria. Si può vedere che contiene 1 istanza delle lettere B, P, R, 2 istanze delle lettere O e K, e 3 istanze della lettera E.

L’algoritmo di codifica Huffman usa questa conoscenza per comprimere la stringa senza perdita di dati. Lo fa generando un albero binario con ogni singola lettera come foglia.

Le lettere con la frequenza più bassa (ad es. B, P, R) si troveranno in fondo all’albero, mentre quelle che appaiono frequentemente (ad es. E, O, K) si troveranno idealmente in cima.

Il nodo più alto dell’albero è la radice, e il suo valore è pari al numero totale di caratteri della stringa.

Huffman Tree per la parola
Huffman Tree per la parola “BOOKKEEPER”

Dopo aver generato l’albero di Huffman, assegniamo alle ramificazioni a sinistra il numero 0 e quelle di destra il numero 1. Per generare il codice di Huffman per qualsiasi carattere basta tracciare il percorso dalla radice alla foglia e unendo tutti gli 0e gli 1.

I codici di Huffman sono codici binari unici per ogni carattere
I codici di Huffman sono codici binari unici per ogni carattere

Come potete notare, le lettere con la frequenza più alta hanno codici di Huffman con le dimensioni di bit più piccole.

Nota: L’algoritmo di codifica di Huffman può generare codici binari alternativi tramite una diversa strategia di ordinamento per i caratteri con le stesse frequenze. Tuttavia, la dimensione totale della stringa codificata rimarrà invariata.

Una parola di 80 bit codificata come una stringa di 25 bit
Una parola di 80 bit codificata come una stringa di 25 bit

Si tratta di una riduzione del 68,75% della memoria necessaria per memorizzare la parola originale.

L’utilizzo dell’albero di Huffman con la convenzione 0/1 genera codici binari che soddisfano la proprietà del prefisso. Questa proprietà assicura che il codice di Huffman di un qualsiasi carattere specifico non sia lo stesso prefisso del codice di un altro carattere: così è più facile usare l’albero di Huffman per decodificare la stringa codificata. Questo gioca un ruolo primario nella velocità di decompressione di GZIP.

Proprio come abbiamo visto per la parola di cui sopra, il compressore GZIP usa l’algoritmo di codifica di Huffman per ottimizzare ulteriormente le tuple generate dall’algoritmo LZ77. Questo si traduce in file altamente compressi con estensione .gz.

Se vi interessa saperne di più su come funziona GZIP, fate riferimento a questo video per avere una rapida panoramica.

Quanto È Efficace la Compressione GZIP?

In genere, GZIP raggiunge un rapporto di compressione di circa il 70% per i file di piccole dimensioni, ma può raggiungere fino al 90% per i file di testo più grandi.

Rapporti di compressione GZIP per alcune popolari librerie CSS e JS
Rapporti di compressione GZIP per alcune popolari librerie CSS e JS

Nella tabella che abbiamo riportato sopra, potete notare che la compressione di file minificati con GZIP può ridurre ulteriormente le loro dimensioni.

Nota: potete comprimere qualsiasi tipo di file con GZIP, ma per gli asset già compressi con altri metodi (ad es. immagini, video) non otterrete alcun risparmio. Anzi, a volte può anche aumentare la dimensione del file.

La forza di un algoritmo di compressione non dipende solo dal suo rapporto di compressione, ma anche dalla velocità e dall’efficienza con cui può comprimere e decomprimere i dati. È qui che GZIP eccelle per la maggior parte dei casi d’uso.

Poiché GZIP decomprime con rapidità usando un algoritmo di streaming, è un ottimo strumento per protocolli web in cui la velocità è fondamentale. Inoltre, GZIP usa risorse minime per comprimere e decomprimere i dati, il che lo rende ideale sia per i server che per i client.

Confronto fra le prestazioni di compressione tra brotli, bzip2, GZIP e xz (Fonte: OpenCPU)
Prestazioni di compressione tra brotli, bzip2, GZIP e xz (Fonte: OpenCPU)

I grafici sopra riportati confrontano le prestazioni di compressione degli algoritmi di compressione brotli, bzip2, gzip e xz. GZIP perde di poco nel test del rapporto di compressione, ma per le velocità di compressione e decompressione batte la concorrenza.

Osservando il grafico della velocità di compressione, possiamo concludere che GZIP è ideale per la compressione in tempo reale in server HTTP e altri flussi di dati sul web. Considerando tutti i suoi vantaggi, IETF ha confermato GZIP come uno dei tre formati standard per la compressione in HTTP/1.1.

Nota: Un’astrazione della libreria di compressione di GZIP chiamata zlib viene usata sia in molti sistemi operativi popolari (Linux, macOS, iOS) sia nelle moderne console di gioco (PlayStation 4, Wii U, Xbox One). È anche usata nel formato di file PNG senza perdita di dati per la compressione delle immagini.

6 Vantaggi della Compressione GZIP

Diamo un’occhiata più da vicino ai vantaggi più importanti della compressione GZIP.

Fornisce un Discreto Rapporto di Compressione

Come discusso in precedenza, GZIP non ha il miglior rapporto di compressione rispetto alla concorrenza. Ma non se ne discosta nemmeno tanto. In genere, può aiutare a ridurre le dimensioni delle risorse testuali del 70-90%.

Compressione e Decompressione Super Veloce

Per le velocità di compressione e decompressione dei dati, GZIP è il vincitore assoluto. È perfetto per la compressione al volo nei server HTTP e in altri flussi di dati.

Richiede Pochissima Memoria

GZIP lascia un’impronta di memoria minima, e per questo è adatto a server e sistemi con capacità di memoria limitata. Quindi, lo troverete supportato anche dai fornitori di web hosting più economici.

Non Si Espande Molto, Nemmeno nei Casi Peggiori

Gli algoritmi di compressione dati lossless come GZIP hanno un limite rigoroso oltre il quale non possono comprimere i dati.

Tipicamente, questo accade quando la risorsa è già ben compressa, o se è minuscola e il sovraccarico dell’aggiunta del dizionario GZIP è superiore al risparmio di compressione. Possiamo attribuire questo fenomeno a un concetto chiamato codifica dell’entropia. GZIP è altamente resistente a questo effetto.

Uso Gratuito e Open Source

GZIP è stato creato principalmente come sostituto, gratuito e open source, del programma di compressione brevettato per i primi sistemi Unix. Pertanto, su GZIP non grava alcun brevetto e può essere usato liberamente da chiunque.

Supporto universale

Secondo W3Techs, l’82% di tutti i siti web tracciati, usano la compressione GZIP e questo lo rende l’algoritmo di compressione più popolare del web.

GZIP è supportato da quasi tutti i server e i client. Indipendentemente dal server su cui ospitate il sito, potete velocizzarlo abilitando GZIP su di esso.

Avvisti sulla Compressione GZIP negli Strumenti di Test della Velocità dei Siti Web

Oltre alla minificazione, l’abilitazione di GZIP è una delle tecniche di ottimizzazione della velocità più semplici ed efficaci da implementare sul vostro sito web.

È anche uno dei modi più semplici per ottimizzare WordPress. Nonostante ciò, molti siti WordPress non lo usano ancora.

Quando visitate un sito web, il vostro browser controlla se il server web ha abilitato GZIP verificando l’header di risposta content-encoding: gzip. Se l’header esiste, recupera i file compressi, li decomprime e poi vi serve automaticamente i file più piccoli.

L’header di risposta
L’header di risposta “content-encoding: gzip” in Chrome DevTools

Se il browser non rileva l’header della risposta GZIP, scarica i file non compressi. Nella maggior parte dei casi, la differenza nella velocità di caricamento delle pagine può essere di più secondi. Quindi, se il vostro GZIP non è abilitato, vedrete degli avvisi negli strumenti per testare la velocità del sito web.

Avviso GZIP in Google PageSpeed Insights / Lighthouse

Google PageSpeed Insights mostra un avviso quando la compressione del testo sul vostro sito web non è abilitata.

Nota: Google PageSpeed Insights e Google Lighthouse erano due strumenti separati di test delle prestazioni del sito web. Hanno lavorato indipendentemente l’uno dall’altro fino al 2018, quando Google ha aggiornato PageSpeed Insights affinché usasse Lighthouse come motore di analisi. Quindi ora PageSpeed Insights e Lighthouse sono un tutt’uno.

“Enable text compression” è l’avviso di Google PageSpeed Insights

Nel sito di esempio di cui sopra, la compressione di risorse testuali può ridurre il peso della pagina di oltre il 78% e accelerare il tempo di caricamento della pagina di 2,1 secondi.

Nota: PageSpeed Insights si basa sugli header di risposta restituiti al browser dal server. A volte, può mostrare un falso avviso anche quando la compressione GZIP è abilitata. Ciò può essere dovuto all’esecuzione del test di velocità su una macchina che usa un server proxy intermedio o un software di sicurezza. Possono interferire con il download di file compressi da server esterni.

Avviso GZIP in GTmetrix

GTmetrix mostra un avviso se il vostro sito web non serve risorse testuali compresse. Come Google PageSpeed Insights, vi mostrerà anche i potenziali risparmi che potete ottenere.

In GTmetrix l’avviso dice
In GTmetrix l’avviso dice “Enable compression”

Nota: GTmetrix sta aggiornando il suo algoritmo di test della velocità per sostituire le vecchie librerie PageSpeed Insights e YSlow con le ultime metriche di Google Lighthouse. Ci si può aspettare che il suo avviso di compressione GZIP sia simile a quello mostrato da Lighthouse.

Avviso GZIP in Pingdom Tools

Pingdom Tools mostra una semplice nota che vi avvisa di comprimere i componenti del vostro sito web con GZIP.

Avviso
Avviso “Compress components with GZIP” in Pingdom Tools

Nella sezione di descrizione, Pingdom Tools fornisce anche alcune statistiche sull’importanza di GZIP. Fico!

Avviso GZIP in WebPageTest

WebPage Test mostra un avviso nella sua scheda Performance Review se rileva che eventuali risposte comprimibili non vengono servite nel modo ottimale.

Avviso
Avviso “Use GZIP compression” in WebPageTest

WebPageTest attribuisce anche un punteggio per valutare la gravità di un certo avviso. Per esempio, l’avviso su GZIP ha un valore di 23 su 100, il che significa che dovreste fissarlo come priorità.

Come Verificare Che la Compressione GZIP Sia Abilitata

L’header HTTP Accept-Encoding: gzip, deflate è supportato in modo efficace da tutti i browser moderni. Per questo motivo, la maggior parte degli host web abilita la compressione GZIP (o compressione Brotli) per impostazione predefinita su tutti i loro server.

Quando i server web vedono questo header inviato da un browser, riconoscono il supporto del browser per GZIP e rispondono con una risposta HTTP compressa tramite l’header content-encoding: gzip.

Ma se si state usando un altro fornitore di hosting, o se volete solo confermare che il vostro sito web stia servendo correttamente i contenuti compressi con GZIP, verificate sempre che sia abilitato.

Ecco alcuni semplici modi per verificare la compressione GZIP.

1. Strumenti Online per il Test di Compressione GZIP

Usare uno strumento online è il modo più semplice per verificare se la compressione GZIP è abilitata sul vostro sito web. Vi consiglia di usare gli strumenti gratuiti Check GZIP Compression o HTTP Compression Test. Basta inserire l’URL del vostro sito web e premere il pulsante Check o Test.

Entrambi questi strumenti online vi mostreranno un breve rapporto sull’attivazione o meno di GZIP e sulla quantità di trasferimento dati che avete risparmiato (o che potreste risparmiare) servendo l’URL testato con compressione GZIP abilitata.

Il primo strumento vi mostrerà anche altre informazioni rilevanti come il tipo di server del vostro sito web, il tipo di contenuto e il tempo di compressione.

Test della homepage di Kinsta con Check GZIP Compression
Test della homepage di Kinsta con Check GZIP Compression

Nota: a partire dal 5 novembre 2021, Kinsta è passata alla compressione Brotli tramite Cloudflare per tutte le richieste HTTPS. È possibile verificare la presenza della compressione Brotli controllando la presenza di content-encoding: br nei response header di una richiesta.

Test su Kinsta.com con lo strumento HTTP Compression Test
Test su Kinsta.com con HTTP Compression Test

Notate che l’ottimizzazione GZIP non si ferma solo alla pagina web, ma include anche le sue risorse statiche basate sul testo come fogli di stile, script e font. Se usate un CDN per servire queste risorse, allora dovete assicurarvi che il CDN serva anche a queste risorse quando la compressione GZIP è abilitata.

La maggior parte dei moderni CDN come Cloudflare, Kinsta CDN, KeyCDN e CloudFront supportano la compressione GZIP. Potete testare la compressione GZIP sugli asset serviti dal CDN collegandovi direttamente agli asset.

Test di compressione GZIP per gli asset serviti da un CDN
Test di compressione GZIP per gli asset serviti da un CDN

Nel rapporto sopra riportato, potete notare che Kinsta CDN usa il motore di KeyCDN, che è un tradizionale CDN pull.

Nota: Kinsta è passata a Cloudflare come partner CDN per velocizzare e proteggere i siti dei nostri clienti. Per saperne di più, leggete qui.

Se usate Kinsta per ospitare il vostro sito, non dovete preoccuparvi della compressione GZIP, perché per impostazione predefinita abilitiamo la compressione Brotli, un’alternativa più veloce alla compressione GZIP.

2. L’header di risposta HTTP “Content-encoding: gzip”

Il secondo modo per verificare se un sito web sta fornendo contenuti compressi con GZIP è la verifica dell’header di risposta HTTP content-encoding: gzip.

Potete aprire Chrome DevTools o Firefox Developer Tools e cercare questo header di risposta nella sezione Network.

Ho già mostrato in precedenza come appare in Chrome DevTools. Ecco come appare in Firefox Developer Tools.

L’header
L’header “Content-encoding: gzip” in Firefox Developer Tools

Potete inoltre attivare l’opzione “Use large request rows” nel pannello di impostazioni di Chrome DevTools per vedere sia la dimensione originale che quella compressa della pagina. Come potete vedere qui sotto, la dimensione della pagina originale si è ridotta da 118 KB a soli 22,9 KB dopo averla compressa con GZIP.

Visualizza le dimensioni delle pagine compresse e non compresse in Chrome Devtools
Visualizza le dimensioni delle pagine compresse e non compresse in Chrome Devtools

3. Strumenti di Test della Velocità delle Pagine Web

La maggior parte degli strumenti di test di velocità del sito web vi dirà che non state usando la compressione GZIP per servire le vostre pagine web. Molte delle persone che stanno leggendo questo articolo sono probabilmente arrivate qui proprio a causa degli avvisi su GZIP che abbiamo discusso a fondo in precedenza.

Avvertenze su GZIP in vari strumenti di test della velocità delle pagine web
Avvertenze su GZIP in vari strumenti di test della velocità delle pagine web

Per verificare se la compressione GZIP è abilitata sul vostro sito WordPress, potete usare strumenti come PageSpeed Insights, GTmetrix, Pingdom Tools e WebPageTest.

Come Attivare la Compressione GZIP?

Se non disponete di una compressione GZIP sul vostro server web, ci sono molti modi per abilitarla. Il metodo esatto dipende dal server web che state usando per ospitare il vostro sito web.

Importante: come sempre, fate un backup dei file di configurazione del sito e del server prima di modificarli.

1. Attivare GZIP con un Plugin WordPress

Il modo più semplice per abilitare la compressione GZIP sul vostro sito WordPress è quello di usare un plugin di caching o di ottimizzazione della performance.

Per esempio, se ospitate il vostro sito WordPress su un server web Apache, su W3 Total Cache trovate un’opzione per abilitare la compressione GZIP sotto il pannello di impostazioni Browser Cache.

Anche WP Rocket consente di aggiungere automaticamente le regole di compressione GZIP.

Questi plugin abilitano la compressione GZIP aggiungendo il modulo mod_deflate di Apache al file .htaccess.

Abilitare la compressione GZIP in W3 Total Cache
Abilitare la compressione GZIP in W3 Total Cache

I plugin di WordPress richiedono l’autorizzazione a modificare i file sul vostro server web. Se non hanno i permessi giusti, non riusciranno a fare la modifica o vi mostreranno un errore.

In questi casi, dovete contattare il vostro fornitore di hosting o modificare manualmente i file di configurazione del vostro server web usando i seguenti snippet di codice.

Nota: Kinsta ha ottimizzato la sua piattaforma concentrandosi su alte prestazioni, affidabilità e sicurezza. Questo include anche l’abilitazione della compressione GZIP di default per tutti i suoi piani di hosting.

Dal momento che i plugin di caching di terze parti possono causare conflitti con le ottimizzazioni interne che Kinsta implementa per migliorare le prestazioni, sui nostri server non ammettiamo la maggior parte dei plugin di cache. Per ulteriori informazioni, potete consultare l’elenco completo dei plugin vietati su Kinsta.

2. Attivare GZIP su Apache Web Server

Secondo Netcraft, Apache serve più siti attivi di qualsiasi altro server web in uso oggi. È anche uno dei due web server consigliati da WordPress.

Per abilitare la compressione GZIP sui server Apache, è necessario usare i suoi moduli mod_filter e mod_deflate e configurarli correttamente con le giuste direttive. I moduli porteranno Apache a comprimere l’output del server prima di inviarlo ai client in rete.

Avete due opzioni per modificare le configurazioni del server Apache in base al livello di accesso che avete:

  1. Se potete accedere al file di configurazione del server principale (di solito chiamato httpd.conf), vi raccomandiamo di usarlo per configurare Apache perché il file .htaccess può rallentare Apache.
  2. Se non potete accedere al file di configurazione del server principale, cosa che di solito accade con la maggior parte dei provider di hosting condiviso WordPress, allora è necessario configurare Apache tramite il file .htaccess.

La prima opzione è dedicata a chi si occupa di sysadmin, poiché i provider di hosting raramente consentono di modificare il file di configurazione del server principale. Spiegare come lavorare con il file di configurazione del server è qualcosa che non possiamo coprire con questo articolo. Per iniziare potete fare riferimento all’esempio di Apache Server Configs condiviso dal progetto HTML5 Boilerplate e alla documentazione di Apache.

La seconda opzione, invece, è ideale per la maggior parte dei proprietari di siti WordPress visto che molti fornitori di hosting condiviso consentono di modificare il file .htaccess.

Per iniziare, usate SFTP o il file manager online del vostro host per trovare il file .htaccess nella directory principale del vostro sito WordPress. Aggiungete quindi il seguente snippet di codice.

Importante: Assicuratevi che il modulo mod_filter sia attivo sul vostro server. La maggior parte degli host web lo ha attivato di default, ma se così non fosse, la direttiva AddOutputFilterByType non funzionerà e potrebbe generare un errore HTTP 500. Potete controllare i log di errore del vostro server se avete qualche problema dopo aver aggiunto lo snippet di codice qui sotto.

<IfModule mod_deflate.c>
  # Compress HTML, CSS, JavaScript, Text, XML and fonts
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE application/rss+xml
  AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
  AddOutputFilterByType DEFLATE application/x-font
  AddOutputFilterByType DEFLATE application/x-font-opentype
  AddOutputFilterByType DEFLATE application/x-font-otf
  AddOutputFilterByType DEFLATE application/x-font-truetype
  AddOutputFilterByType DEFLATE application/x-font-ttf
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE application/xhtml+xml
  AddOutputFilterByType DEFLATE application/xml
  AddOutputFilterByType DEFLATE font/opentype
  AddOutputFilterByType DEFLATE font/otf
  AddOutputFilterByType DEFLATE font/ttf
  AddOutputFilterByType DEFLATE image/svg+xml
  AddOutputFilterByType DEFLATE image/x-icon
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE text/javascript
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/xml  

  # Remove browser bugs (only needed for ancient browsers)
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  Header append Vary User-Agent
</IfModule>

Aggiungete il codice sopra solo dopo le direttive già esistenti nel vostro file .htaccess. Salvate il file e poi verificate se la compressione GZIP è attiva sul vostro server.

Esempio del file .htaccess di Apache dopo aver abilitato la compressione GZIP
Esempio del file .htaccess di Apache dopo aver abilitato la compressione GZIP

Il vostro server web dovrebbe ora servire file compressi per tutte le estensioni di file sopra elencate. Potete confermarlo usando uno dei metodi che abbiamo visto in precedenza.

Se volete garantire che i proxy e il software di sicurezza sul lato client non interferiscano con la compressione GZIP, potete sostituire il suddetto snippet di codice con quello qui sotto.

<IfModule mod_deflate.c>
  # force compression for clients that mangle 'Accept-Encoding' request headers
  <IfModule mod_setenvif.c>
  <IfModule mod_headers.c>
    SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
    RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
  </IfModule>
  </IfModule>

  # compress all output with one of the following file extensions
  <IfModule mod_filter.c>
    AddOutputFilterByType DEFLATE "application/atom+xml" \
                                  "application/javascript" \
                                  "application/json" \
                                  "application/ld+json" \
                                  "application/manifest+json" \
                                  "application/rdf+xml" \
                                  "application/rss+xml" \
                                  "application/schema+json" \
                                  "application/geo+json" \
                                  "application/vnd.ms-fontobject" \
                                  "application/wasm" \
                                  "application/x-font-ttf" \
                                  "application/x-javascript" \
                                  "application/x-web-app-manifest+json" \
                                  "application/xhtml+xml" \
                                  "application/xml" \
                                  "font/eot" \
                                  "font/opentype" \
                                  "font/otf" \
                                  "font/ttf" \
                                  "image/bmp" \
                                  "image/svg+xml" \
                                  "image/vnd.microsoft.icon" \
                                  "text/cache-manifest" \
                                  "text/calendar" \
                                  "text/css" \
                                  "text/html" \
                                  "text/javascript" \
                                  "text/plain" \
                                  "text/markdown" \
                                  "text/vcard" \
                                  "text/vnd.rim.location.xloc" \
                                  "text/vtt" \
                                  "text/x-component" \
                                  "text/x-cross-domain-policy" \
                                  "text/xml"
  </IfModule>

  # define and map media types to their appropriate encoding type    
  # Using SVG format (Scalable Vector Graphics) is highly recommended to    
  # load logos, icons, text, and simple images. You can compress .SVG files
  # further using GZIP to create .SVGZ files. However, most browsers don’t
  # know that they need to decompress them first if they’re not served
  # without an appropriate ‘content-encoding’ HTTP response header. Thus,
  # these images wouldn’t show up in the browser. Hence, this module.

  <IfModule mod_mime.c>
    AddType image/svg+xml svg svgz
    AddEncoding gzip svgz
  </IfModule>

</IfModule>

Potete informarvi su tutte le direttive che stiamo usando qui dando un’occhiata al repository di codici e seguendo tutte le risorse collegate.

3. Attivare GZIP su Web Server Nginx

Secondo Netcraft, Nginx è il server web più usato dai computer con interfaccia web. Se la tendenza attuale si conferma, presto supererà Apache per diventare il server web più usato dai siti attivi. Anche Kinsta usa Nginx per alimentare le sue soluzioni di hosting ottimizzate.

Potete abilitare la compressione GZIP sul server web Nginx usando le direttive definite nel modulo ngx_http_gzip_gzip_module.

Per iniziare, aggiungete le direttive riportate di seguito al vostro file nginx.conf.
Di solito, potete trovare questo file nella posizione /etc/nginx/nginx.conf del vostro server.

# enables GZIP compression
gzip on;

# compression level (1-9)
# 6 is a good compromise between CPU usage and file size
gzip_comp_level 6;

# minimum file size limit in bytes to avoid negative compression outcomes
gzip_min_length 256;

# compress data for clients connecting via proxies
gzip_proxied any;

# directs proxies to cache both the regular and GZIP versions of an asset
gzip_vary on;

# disables GZIP compression for ancient browsers that don't support it
gzip_disable "msie6";

# compress outputs labeled with the following file extensions or MIME-types
# text/html MIME-type is enabled by default and need not be included
gzip_types
application/atom+xml
application/geo+json
application/javascript
application/x-javascript
application/json
application/ld+json
application/manifest+json
application/rdf+xml
application/rss+xml
application/vnd.ms-fontobject
application/wasm
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
font/eot
font/otf
font/ttf
image/bmp
image/svg+xml
text/cache-manifest
text/calendar
text/css
text/javascript
text/markdown
text/plain
text/xml
text/vcard
text/vnd.rim.location.xloc
text/vtt
text/x-component
text/x-cross-domain-policy;

Se il vostro sito serve file JS e CSS di grandi dimensioni, allora potete aumentare la dimensione del buffer usato per la compressione aggiungendo la seguente direttiva al vostro file nginx.conf:

# sets the 'number' and 'size' of buffers for GZIP compression
# default buffer size is 4K or 8K depending on the platform
gzip_buffers 16 8k;

Non dimenticate di ricaricare Nginx dopo aver salvato il file nginx.conf.

sudo service nginx reload

Infine, dovreste verificare se il server ha la compressione GZIP abilitata. Si può fare riferimento alla documentazione di Nginx per un elenco aggiornato di tutte le direttive ngx_http_gzip_module.

4. Attivare GZIP su Web Server IIS

L’Internet Information Services (IIS) di Microsoft è il terzo server web più diffuso oggi in uso. IIS viene impiegato principalmente in ambienti aziendali con sistema operativo Windows, soprattutto per la configurazione di server intranet ed extranet specifici per l’azienda.

Raramente viene usato per ospitare siti WordPress a causa di vari problemi di compatibilità.

Tuttavia, se vi trovate in una di quelle rare situazioni in cui è necessario abilitare la compressione GZIP su IIS, potete fare riferimento alla documentazione di Microsoft per iniziare. Potreste anche trovare utile questo thread di StackOverflow.

Alternative alla Compressione GZIP

Il mondo della compressione dei dati sul web avanza sempre di più. Con una dimensione media del peso della pagina in costante aumento, la tecnologia web sta cercando di recuperare il ritardo anche per rendere più efficiente il trasferimento dei dati sul web.

Aumento della dimensione del peso della pagina nel tempo (Fonte: HTTPArchive)
Aumento della dimensione del peso della pagina nel tempo (Fonte: HTTPArchive)

Un nuovo algoritmo di compressione ha guadagnato negli ultimi anni un’ampia popolarità: Brotli. In origine, l’obiettivo principale di Brotli era la compressione dei web fonts WOFF2, ma da allora si è ampliato per supportare la compressione di qualsiasi tipo di dati.

Brotli comprime i dati meglio di GZIP, ma richiede molto più tempo e risorse per comprimerli. Tuttavia, il suo tempo di decompressione è paragonabile a quello di GZIP, anche se è ancora un po’ più lento.

Supporto Brotli su vari browser
Supporto Brotli su vari browser

Oggi la maggior parte dei browser supporta Brotli, ma usarlo su siti WordPress è ancora un po’ complicato. Dovete ospitare il vostro sito con un fornitore di hosting che supporti Brotli o che vi permetta di installare la libreria Brotli. La maggior parte degli host WordPress gestiti non lo supporta ancora completamente, ma se usate un CDN come Cloudflare o KeyCDN, potete abilitarlo facilmente.

.

Riepilogo

Ottimizzare i siti web è una pratica che avvantaggia tutti. Gli utenti adorano i siti web più veloci, i proprietari di siti web amano i costi di hosting ridotti, e i web host amano l’ottimizzazione che ottengono sui loro server. Le tecniche di compressione come GZIP sono uno dei modi migliori per velocizzare i tempi di caricamento delle pagine per i vostri visitatori.

I proprietari di siti WordPress possono velocizzare i loro siti istantaneamente abilitando la compressione GZIP. Kinsta lo abilita di default su tutti i suoi server, ma in questo articolo vediamo anche gli altri modi per abilitare la compressione GZIP su vari server web.

La velocità è fondamentale per qualsiasi sito web. Basta comprimere!

Salman Ravoof

Salman Ravoof é uno sviluppatore web autodidatta, uno scrittore, un creatore e un grande ammiratore del Free and Open Source Software (FOSS). Oltre alla tecnologia, è appassionato di scienza, filosofia, fotografia, arte, gatti e cibo. Per saperne di più su di lui, visitate il suo sito web o contattate Salman su X.