Gzip vs Brotli – Vilken komprimeringsmetod ska du använda och varför
Gzip blev guldstandarden för filkomprimering i början av 1990-talet, men om du fortfarande använder det 2018, kan du överväga att byta till en nyare komprimeringsmetod.
Även om Gzip fortfarande har sin plats i mångas hjärtan, vänder sig webbutvecklare alltmer till överlägsna alternativ som Googles Brotli-komprimeringsalgoritm.
En kort historik om filkomprimering
”G” i Gzip är en förkortning för GNU. GNU är ett Unix-baserat operativsystem med öppen källkod som utvecklades på 1980-talet. Vid den tiden hade Unisys och IBM redan patenterat sina egna algoritmer för att komprimera och dekomprimera filer, vilket möjliggjorde deras maskiner för att lagra mer data.Därför skapade programmerarna Jean-loup Gailly och Mark Adler Gzip som ett gratis alternativ för GNU-användare.
Den nya Gzip var inte bara en billig knockoff; den var faktiskt snabbare än sina upphovsrättsskyddade konkurrenter. Som ett resultat använder folk det fortfarande för filkomprimering än i dag. Även om det är lätt att hålla fast vid det du är bekväm med, finns det olika komprimeringsalgoritmer som för närvarande ger bättre komprimeringsresultat än Gzip. Det är där Brotli kommer in.
Vad är Brotli?
Brotli är en nyare dataformatspecifikation som drar fördel av flera algoritmer för att kondensera data mer effektivt än Gzip. Under 2015 generaliserades Brotli-specifikationen för HTTP-strömkomprimering med innehållskodningstypen ’br’.
Utvecklat av Jyrki Alakuijala och Zoltan Szabadka, använder Brotli samma komprimeringsalgoritmer som Gzip, men det stöds också av en ordbok med ofta använda ord och fraser för att ge ett bättre kompressionsförhållande.
Tänk på att Gzip och Brotli endast ska användas för att komprimera textfiler. Binära filer som JPEG och MP4 förlitar sig på sina egna formatspecifika komprimeringsalgoritmer. Om du försöker komprimera en JPEG med Brotli blir den resulterande filen faktiskt större än originalet.
Även om det inte alltid var så, stöds Brotli nu av alla större webbläsare.
I händelse av att en webbläsare som inte stöder Brotli begär en tillgång från en webbplats som levererar Brotli-komprimerade filer, kommer servern att falla tillbaka till Gzip och leverera kodade tillgångar som webbläsaren stöder – förutsatt att servern är korrekt konfigurerad.
Vad gör Brotli bättre?
Enligt forskning utförd av CertSimple :
- JavaScript-paket komprimerade med Brotli är 14 procent mindre än Javascript-paket komprimerade med Gzip.
- HTML-filer komprimerade av Broti är 21 procent mindre än deras Gzip-motsvarigheter.
- CSS-filer komprimerade av Brotli är 17 procent mindre än de som komprimeras av Gzip.
Eftersom de flesta webbplatser förlitar sig på alla dessa tre typer av tillgångar, är det en avsevärd skillnad i tillgångsstorlekar när man jämför med Gzip. Dessa besparingar kommer i sin tur att göra en märkbar förbättring av din app prestanda.
Gzip vs Brotli: Få ut det mesta av Brotli
Trots vad du kanske har hört är komprimering av tillgångar med Brotli inte långsammare än Gzip. Som sagt, Gzip och Brotli erbjuder varierande nivåer av komprimering, och Brotlis standardinställningar kan resultera i långsammare komprimering än Gzips standardinställningar. Du måste göra några justeringar av Brotli för att uppnå en acceptabel balans mellan filstorlek och komprimeringshastighet.
Den idealiska komprimeringsinställningen beror på vad och när du komprimerar. En bra utgångspunkt är Brotli 4 för snabbare komprimering av dynamiskt innehåll. Å andra sidan kan statiska tillgångar komprimeras tätare i förväg utan att offra hastigheten, så standardinställningen ”11” är mer lämplig för sådant innehåll.
Installera Brotli på din webbserver
Att lägga till stöd för Brotli ger betydande vinster för minimal ansträngning. Beroende på vilken webbserverprogramvara du använder avgör vilken integrationsmetod du behöver använda för att integrera Brotli. Följande beskriver några tillgängliga alternativ:
- Nginx har en Brotli-tillägg som erbjuds av Google.
- Apache erbjuder en dedikerad Brotli-tillägg.
- Microsoft IIS erbjuder inget officiellt Brotli-stöd, men det finns en community-modul som lägger till stöd.
- Node.js liknar Microsoft genom att det inte finns något officiellt stöd men det finns en communitymodul.
För att visa ett exempel på en snabb installation, låt oss säga att du kör Nginx. I så fall kan du installera modulen ngx_brotli med följande:
cd nginx-1.x.x
$ ./configure --add-module=/path/to/ngx_brotli
$ make && make install
Lägg sedan till följande i HTTPS-blocket (Brotli körs endast över HTTPS):
brotli on;
brotli_static on;
brotli_comp_level 4;
brotli_types text/plain text/css application/javascript application/json image/svg+xml application/xml+rss;
Du kan ändra ovanstående direktiv som du tycker är lämpligt.
Slutligen, skriv in följande för att starta om NGINX och börja skörda fördelarna:
sudo systemctl restart nginx
Använda Brotli med förkomprimerade tillgångar
Brotli är bra för att leverera förkomprimerade tillgångar mycket snabbare än Gzip. Detta beror på det faktum att du kan komprimera dem på Brotlis högsta nivå (11) och sedan låta ursprungsservern hämta dem när så önskas.
Den här typen av inställningar fungerar utmärkt med Webpack eftersom ett Webpack-plugin är tillgängligt för att automatiskt komprimera dina statiska tillgångar som både Gzip och Brotli. Därför krävs ingen on-the-fly-komprimering vilket innebär att tid som annars går åt till att komprimera filerna sparas.
Läs mer om hur du använder Webpack för att generera Brotli-komprimerade tillgångar.
Stöder ditt CDN Brotli?
För att dra nytta av Brotlis fördelar till fullo behöver du ett nätverk för innehållsleverans som stöder det. KeyCDN introducerade till exempel Brotli-support förra året för alla kunder utan extra kostnad. Därför kommer din webbplats inte bara att dra nytta av minskade filstorlekar tack vare bättre Brotli-komprimering, utan de kommer också att dra nytta av minskad latens tack vare att tillgångarna cachelagras på edge-servrar närmare dina besökare.
Denna metod kräver att din ursprungsserver stöder Brotli och att den faktiska komprimeringen sker på ursprungsserversidan. Återigen, detta hjälper till att spara tid och undviker behovet av on-the-fly kompression som kan skada prestandan.
Gzip vs Brotli: Sammanfattningsvis
Den lilla mängd ansträngning som krävs för att lägga till Brotli till din webbserver är väl värt de avsevärda filstorleksbesparingarna. Även om Brotli ibland kan köra långsammare med sina högsta komprimeringsinställningar, kan du enkelt uppnå en idealisk balans mellan komprimeringshastighet och filstorlek genom att justera inställningarna.
Medan du använder Brotli kan du förvandla snabba webbappar till snabbare, men det gör inte nödvändigtvis långsamma appar snabba. Eftersom Brotli bara komprimerar textbaserade tillgångar måste du optimera dina bilder på andra sätt. Om du ännu inte har tagit steget till HTTP/2 kan det göra en enorm skillnad i appens prestanda. Varje millisekund räknas, så alla åtgärder du vidtar för att påskynda din applikation förbättrar dina chanser att behålla användare.