Brotli-komprimering er en generisk komprimeringsteknikk som er mye støttet på tvers av nettlesere. Det er sammenlignbart med de tilgjengelige komprimeringsmetodene, da det tilbyr 20-26% bedre kompresjonsforhold. Likevel er det ikke bra med mindre webserveren sender komprimerte tekstbaserte ressurser med Brotli-algoritmen.
I denne artikkelen lærer vi hvordan komprimering fungerer på serveren, og hvorfor er det nyttig? Vi vil også lære å installere Nginx -serveren og få serveren vår til å gi Brotli komprimerte filer.
Bakgrunn
Kompresjonsteknikker/algoritmer forbedrer ytelsen til nettstedet ved å redusere innholdsstørrelsen. Derfor tar komprimerte data en lav belastning og overføringstid. Imidlertid har den en pris. Servere bruker mange beregningsressurser for å gi en bedre kompresjonshastighet. Derfor, jo bedre, desto dyre. Så mye innsats legges til for å forbedre kompresjonsformatene mens du bruker minimum CPU -sykluser.
Nå ble det mest potensielle komprimeringsformatet gzippet. Nylig erstattes Gzip av en ny kompresjonsalgoritme kjent som Brotli. Det er en avansert kompresjonsalgoritme sammensatt av Huffman -koding, L77 -algoritmen og kontekstmodellering. I kontrast er GZIP bygget på Deflate -algoritmen.
Det tapsfrie komprimeringsformatet, designet av Google, er nært beslektet med å avlede komprimeringsformat. Begge kompresjonsmetodene bruker skyvevinduer for referanse til rygg. Brotli glidende vindusstørrelse varierer fra 1 kb til 16MB. I kontrast har GZIP en fast vindusstørrelse på 32kb. Det betyr.
Serverkompresjonskompatibilitet er viktig
Hver gang vi laster ned en fil fra nettleseren, ber nettleseren serveren hva slags kompresjon den støtter gjennom en overskrift. For eksempel, hvis nettleseren støtter Gzip og Deflate å dekomprimere. Det vil legge til disse alternativene i dets Akseptere koding, header, i.e.,
Akseptere-koding = ”Deflate, Gzip”
Derfor vil nettleserne som ikke støtter disse formatene ikke inkludere dem i overskriften. Når serveren svarer med innholdet, forteller den nettleseren om komprimeringsformatet gjennom en overskrift, Innholdskoding. Derfor, hvis den støtter Gzip, ser overskriften slik ut:
Innhold-koding = ”Gzip”
Overskrifter av nettleserne som Firefox som støtter Brotli -komprimering og webserveren som har en Brotli -modul installert for å se slik ut:
Akseptere-koding = ”Deflate, Gzip, BR”
Innhold-koding = ”Gzip, BR”
Derfor, hvis nettleseren bruker det beste komprimeringsformatet og webserveren ikke gjør det, er det ikke bra, ettersom webserveren ikke vil sende tilbake filene med den foretrukne kompresjonsalgoritmen. Derfor er det viktig å installere kompresjonsmodulen for webserveren.
Serverinstallasjon
Før vi går videre med Brotli -konfigurasjonen, vil vi sette opp NGINX -serveren vår. Før det sudo APT-Få oppdatering Ubuntu -distribusjonen din og skriv inn følgende kommandoer i Bash -terminalen.
ubuntu@ubuntu: ~ $ sudo apt-get updateFor å aktivere Brotli -komprimering i Nginx, vil vi sammenstille vår .Så moduler i henhold til våre Nginx -versjonsdetaljer. Som vist, skriver du følgende kommando på NGINX -versjonen:
ubuntu@ubuntu: ~ $ nginx -vBruke WGET Kommando sammen med din Nginx -versjonsdetaljer for å laste ned kildekoden fra Nginx -nettstedet.
ubuntu@ubuntu: ~ $ wget https: // nginx.org/nedlasting/nginx-1.18.0.tjære.gzVi bruker denne kildekoden for å kompilere *.så binærvilder for brotli komprimering. Pakk ut filen ved hjelp av følgende kommando.
ubuntu@ubuntu: ~ $ tar xzf nginx-1.18.0.tjære.gzBrotli -modulkonfigurasjon
Nå har Google gitt ut Brotli -modulen for Nginx. Vi vil klone modulen fra Google Repository.
ubuntu@ubuntu: ~ $ git klon https: // github.com/google/ngx_brotli --rekursiv.Vi vil CD inn i det Nginx-1.18.0 mappe for å konfigurere den dynamiske Brotli -modulen.
ubuntu@ubuntu: ~ $ cd nginx-1.18.0/Merk: Du kan motta følgende feil mens du konfigurerer
./Konfigurer: Feil: HTTP -omskrivningsmodulen krever PCRE -biblioteket.I så fall kjører du følgende kommando for å installere PCRE -biblioteket
ubuntu@ubuntu: ~ $ sudo apt-get install libpcre3-dev -yModulsamling
Vi vil bruke gjøre kommando for å opprette en moduler mappe inne i Nginx-1.18.0 Katalog.
ubuntu@ubuntu: ~ $ sudo lage modulerVi bruker CP kommando for å kopiere ngx_http_brotli*.så filer fra Nginx-1.18.0/objs mappe til Modules -mappen.
ubuntu@ubuntu: ~ $ cd /nginx-1.18.0/objs/Liste nå innholdet i filene ved å bruke ls kommando. Du vil merke at den består av to forskjellige modulfiler, i.e.:
ubuntu@ubuntu: ~ $ ls ngx_http_brotli*.såBruk nå favorittredigereren din til å åpne/etc/nginx/nginx.Conf -fil for å legge til Brotli -lastemoduler for å begynne Brotli -konfigurasjonen ved å inkludere følgende linjer:
ubuntu@ubuntu: ~ $ sudo vim/etc/nginx/nginx.konfVi vil også inkludere konfigurasjonsmapper stier /etc/nginx/conf.d/*.konf
og /usr/share/nginx/moduler/*.konf I filen ovenfor som:
httpFor å legge til Brotli -konfigurasjonen Åpne/etc/nginx/conf.d/brotli.konf
fil i vim Redaktør og aktiver Brotli ved å angi følgende konfigurasjonsdirektiver:
Brotli på;“Brotli Off | på”Verdi aktiverer eller deaktiverer dynamikk eller på fluekomprimeringen av innholdet.
'brotli_ statisk på ' gjør det mulig for Nginx-serveren å sjekke om de pre-komprimerte filene med .BR -utvidelser eksisterer eller ikke. Vi kan også gjøre denne innstillingen til et alternativ av eller alltid. De alltid Verdien lar serveren sende pre-komprimert innhold uten å bekrefte om nettleseren støtter det eller ikke. Siden Brotli er ressurskrevende, er denne modulen best egnet til å redusere flaskehalssituasjoner.
“Brotli_COMP_LEVEL 6”Direktivet angir det dynamiske kompresjonskvalitetsnivået til 6. Den kan variere fra 0 til 11.
Til slutt, aktiver dynamisk komprimering for spesifikke MIME -typer, mens tekst/HTML -svar alltid er komprimert. Standard syntaks for dette direktivet er brotli_types [mime type]. Du kan finne mer om konfigurasjonsdirektivet på GitHub.
Lagre endringene, start Nginx -tjenesten på nytt ved å skrive “Sudo Service Restart Nginx” Og det hele er gjort.
Konklusjon
Etter endringene vil du legge merke til noen åpenbare forbedringer i resultatmålingene. Imidlertid kommer det med en liten ulempe med økt CPU -belastning på topptider. For å unngå slike situasjoner holder du øye med CPU -bruken; Hvis den når 100% regelmessig, kan vi bruke mange alternativer i henhold til våre preferanser, for eksempel å presentere pre-komprimert eller statisk innhold, senke komprimeringsnivået og slå av på flyet komprimering, blant mange.