La compressione di Brotli è una tecnica di compressione per scopi generici ampiamente supportata tra i browser. È paragonabile ai metodi di compressione attualmente disponibili in quanto offre rapporti di compressione migliori del 20-26%. Tuttavia, non va bene a meno che il server WebS non stia inviando risorse basate su testo compresso con l'algoritmo Brotli.
In questo articolo, impareremo come funziona la compressione nel server e perché è utile? Impareremo anche a installare il server Nginx e convincere il nostro server a fornire file compressi brotli.
Sfondo
Le tecniche/algoritmi di compressione migliorano le prestazioni del sito Web riducendo la dimensione del contenuto. Quindi i dati compressi richiedono un carico basso e un tempo di trasferimento. Tuttavia, ha un prezzo. I server utilizzano molte risorse computazionali per fornire un miglior tasso di compressione. Quindi, meglio è costoso. Quindi viene aggiunto un grande sforzo per migliorare i formati di compressione, utilizzando i cicli minimi della CPU.
Ormai, il formato di compressione più potenziale è stato gzippato. Recentemente GZIP è sostituito da un nuovo algoritmo di compressione noto come brotli. È un algoritmo di compressione avanzato composto da codifica Huffman, algoritmo L77 e modellazione di contesto. Al contrario, GZIP è costruito sull'algoritmo deflato.
Il formato di compressione senza perdita, progettato da Google, è strettamente correlato al formato di compressione deflata. Entrambi i metodi di compressione utilizzano finestre scorrevoli per il reference. La dimensione della finestra scorrevole di Brotli varia da 1 kb a 16 MB. Al contrario, GZIP ha una dimensione della finestra fissa di 32kb. Ciò significa che la finestra di Brotli è 512 volte più grande della finestra Deflate, il che non è rilevante poiché i file di testo più grandi di 32 kb sono raramente sui server Web.
La compatibilità della compressione del server è importante
Ogni volta che scarichiamo un file dal browser, il browser richiede al server quale tipo di compressione supporta attraverso un'intestazione. Ad esempio, se il browser supporta gzip E sgonfiare a decomprimere. Aggiungerà queste opzioni nel suo Accettazione, intestazione, io.e.,
ACCECIO-ENCODING = "Deflate, Gzip"
Quindi i browser che non supportano questi formati non li includeranno nella testata. Quando il server risponde con il contenuto, racconta al browser il formato di compressione attraverso un'intestazione, Codifica dei contenuti. Quindi, se supporta GZIP, allora l'intestazione assomiglia a questo:
Content-onoring = "gzip"
Intestazioni dei browser come Firefox che supportano la compressione di Brotli e il server web che hanno un modulo Brotli installato per assomigliare a questi:
Accept-Encoding = "Deflate, Gzip, Br"
Content-onoring = "gzip, br"
Quindi, se il browser utilizza il miglior formato di compressione e il server Web no, non va bene, poiché il server Web non manterrà i file con l'algoritmo di compressione preferita. Ecco perché è importante installare il modulo di compressione per il server web.
Installazione del server
Prima di andare avanti con la configurazione di Brotli, imposteremo il nostro server Nginx. Prima di ciò sudo Aggiornamento APT-get La tua distribuzione di Ubuntu e digita i seguenti comandi nel tuo terminale bash.
ubuntu@ubuntu: ~ $ sudo apt-get updatePer abilitare la compressione di brotli nell'NGINX, compileremo il nostro .Quindi moduli secondo i dettagli della nostra versione Nginx. Come mostrato, la digitazione del comando seguente emetterà la versione Nginx:
ubuntu@ubuntu: ~ $ nginx -vUsa il Wget Comando insieme al dettaglio della versione Nginx per scaricare il codice sorgente dal sito Web Nginx.
ubuntu@ubuntu: ~ $ wget https: // nginx.org/download/nginx-1.18.0.catrame.GzUseremo questo codice sorgente per compilare *.Quindi binari per la compressione di Brotli. Ora estrai il file utilizzando il comando seguente.
ubuntu@ubuntu: ~ $ tar xzf nginx-1.18.0.catrame.GzConfigurazione del modulo Brotli
Ora Google ha rilasciato il modulo Brotli per Nginx. Cloneremo il modulo dal repository di Google.
ubuntu@ubuntu: ~ $ git clone https: // github.com/Google/Ngx_Brotli -RECURSIVE.Noi CD dentro nginx-1.18.0 cartella per configurare il modulo Brotli dinamico.
ubuntu@ubuntu: ~ $ cd nginx-1.18.0/Nota: è possibile ricevere il seguente errore durante la configurazione
./Configura: Errore: il modulo di riscrittura HTTP richiede la libreria PCRE.In tal caso, eseguire il seguente comando per installare la libreria PCRE
ubuntu@ubuntu: ~ $ sudo apt-get Installa libpcre3-dev -yCompilazione del modulo
Useremo il Fare comando di creare un file moduli cartella all'interno dell'NGINX-1.18.0 directory.
ubuntu@ubuntu: ~ $ sudo make moduliNoi usiamo il cp comando di copiare ngx_http_brotli*.COSÌ file da nginx-1.18.0/objs cartella alla cartella moduli.
ubuntu@ubuntu: ~ $ cd /nginx-1.18.0/objs/Ora elenca il contenuto dei file utilizzando il ls comando. Noterai che è costituito da due diversi file di moduli, i.e.:
ubuntu@ubuntu: ~ $ ls ngx_http_brotli*.COSÌOra usa il tuo editor preferito per aprire/etc/nginx/nginx.FILE Conf per aggiungere i moduli di caricamento brotli per iniziare la configurazione Brotli includendo le seguenti righe:
ubuntu@ubuntu: ~ $ sudo vim/etc/nginx/nginx.confIncluderemo anche percorsi di cartelle di configurazione /etc/nginx/conf.D/*.conf
E /usr/share/nginx/moduli/*.conf Nel file sopra come:
httpPer aggiungere la configurazione Brotli Apri/etc/nginx/conf.d/brotli.conf
file in vim editor e abilita brotli impostando le seguenti direttive di configurazione:
brotli on;IL "brotli off | on"Il valore abilita o disabilita la compressione dinamica o sulla mosca del contenuto.
IL 'brotli_ static on ' Abilita al server Nginx di verificare se i file pre-compressi con il .Esistono o no le estensioni BR. Possiamo anche trasformare questa impostazione in un'opzione spento O Sempre. IL Sempre Il valore consente al server di inviare contenuti pre-compressi senza confermare se il browser lo supporta o no. Poiché Brotli è ad alta intensità di risorse, questo modulo è più adatto per ridurre le situazioni di collo di bottiglia.
IL "brotli_comp_level 6"La direttiva imposta il livello di qualità di compressione dinamica su 6. Può variare da 0 a 11.
Infine, abilitare la compressione dinamica per specifici tipi di mime, mentre le risposte di testo/HTML sono sempre compresse. La sintassi predefinita per questa direttiva è brotli_types [tipo mime]. Puoi trovare di più sulla direttiva di configurazione su GitHub.
Salva le modifiche, riavvia il servizio NGINX digitando "Sudo Service Riavvia Nginx" Ed è tutto fatto.
Conclusione
Dopo le modifiche, noterai alcuni evidenti miglioramenti nelle metriche delle prestazioni. Tuttavia, viene fornito con un leggero svantaggio dell'aumento del carico della CPU alle ore di punta. Per evitare tali situazioni tieni d'occhio l'uso della CPU; Se raggiunge il 100% regolarmente, possiamo utilizzare molte opzioni secondo le nostre preferenze, come presentare contenuto pre-compresso o statico, abbassare il livello di compressione e disattivare la compressione al volo, tra molti.