Gzip-da­ta­kom­pri­me­rings­pro­gram­met er plat­formsu­af­hæn­gigt og udbredt i we­b­ud­vik­ling og webpro­jek­ter som den fo­re­truk­ne kom­pri­me­rings­løs­ning. Det kan nemt aktiveres og betjenes via kom­man­do­linje­værk­tø­jet, hvilket hjælper dig med at spare la­ger­plads og forbedre systemets ydeevne.

Hvordan fungerer gzip?

Gzip — en for­kor­tel­se for »GNU zip« — er baseret på den frit til­gæn­ge­li­ge Deflate-algoritme, som kom­bi­ne­rer LZ77-kom­pri­me­rings­me­to­den (Lempel-Ziv 77) med Huffman-kodning. Ved hjælp af disse teknikker søger gzip-filer efter gentagne da­ta­stren­ge. Hvis pro­gram­met støder på disse til­ba­ge­ven­den­de sekvenser, erstatter det dem med et link til den streng, der optræder først. Længden af disse sekvenser er normalt begrænset til 32.000 byte. Hvis en tegn­streng ikke fo­re­kom­mer i de fo­re­gå­en­de 32.000 byte, gemmes den (uden at blive kom­pri­me­ret) i gzip-filen, der får fil­ty­pe­nav­net .gz.

Pro­ce­du­ren er begrænset til enkelte filer, og derfor er pak­ke­pro­gram­met tar nød­ven­digt for at oprette såkaldte tarball-arkiver med fil­ty­pe­nav­ne­ne .tar.gz eller .tgz. Som standard slettes den op­rin­de­li­ge fil efter gzip primering (når den anvendes direkte på en fil). Du kan dog de­ak­ti­ve­re denne au­to­ma­ti­ske adfærd ved at bruge den valgfri -k. For at udpakke kom­pri­me­re­de filer kan du enten bruge gunzip eller den relevante gzip.

Oversigt over gzip-syntaks og -kom­man­do­er

Selvom der findes grafiske bru­ger­græn­se­fla­der til for­skel­li­ge platforme, er det na­tur­lig­vis fuldt ud muligt at bruge gzip via kom­man­do­er i ter­mi­na­len eller kom­mandopromp­ten. Selv begyndere vil finde det over­kom­me­ligt, da gzip er et klassisk kom­man­do­linje­værk­tøj, der er optimeret til denne type brug. Den generelle syntaks ser således ud:

gzip option file(s)
bash

Det er ikke nød­ven­digt at angive indstil­lin­ger. Hvis feltet ef­ter­la­des tomt, bruger gzip blot stan­dar­dindstil­lin­ger­ne. F.eks. er følgende enkle kommando til­stræk­ke­lig til at oprette en kom­pri­me­ret version af tekst­fi­len example.txt:

gzip example.txt
bash

Hvis man senere vil udpakke filer eller angive indstil­lin­ger for kom­pri­me­rings­ni­veau, lag­rings­pla­ce­ring eller hånd­te­ring af den op­rin­de­li­ge fil, skal kom­man­do­er­ne forsynes med de relevante an­gi­vel­ser. Ne­den­stå­en­de tabel giver et overblik over de gzip vigtigste kom­man­do­er:

Valg­mu­lig­hed Be­skri­vel­se
-1-9 Indstil­ler kom­pri­me­rings­ni­veau­et (1–9), hvor 1 giver det hurtigste og mindst kom­pri­me­re­de resultat, og 9 giver den bedste, men langs­om­ste kom­pri­me­ring; stan­dard­ni­veau­et er 5
-r Gennemgår rekursivt mappen (inklusive alle un­der­map­per) og kom­pri­me­rer eller de­kom­pri­me­rer alle filer i mappen
-f Tvinger gzip-kom­pri­me­ring og over­skri­ver ek­si­ste­ren­de filer med samme navn, hvis det er nød­ven­digt
-d De­kom­pri­me­rer den valgte fil til det aktuelle bibliotek
-k For­hin­drer, at den op­rin­de­li­ge fil slettes
-l Viser op­lys­nin­ger såsom kom­pri­me­rings­for­hol­det for en kom­pri­me­ret fil
-c Sender den kom­pri­me­re­de fil til stan­dar­dout­put (typisk skærmen, der er forbundet til kom­man­do­linj­en)
-q Un­der­tryk­ker alle gzip-med­del­el­ser
-t Tester den kom­pri­me­re­de fils in­te­gri­tet
-h Viser alle til­gæn­ge­li­ge indstil­lin­ger

An­ven­del­ses­mu­lig­he­der for gzip-kom­pri­me­ring

I dag er gzip stort set plat­formsu­af­hæn­gigt og kan udvides efter behov, så længe det valgte projekt over­hol­der GPL-licensen. På Linux-systemer er kom­pri­me­rings­værk­tø­jet som regel for­u­din­stal­le­ret eller let til­gæn­ge­ligt via pak­ke­hånd­te­rin­gen. Den of­fi­ci­el­le gzip-hjem­mesi­de tilbyder også versioner til macOS og Windows. Du kan til enhver tid bruge softwaren på disse systemer for at spare la­ger­plads.

Et andet vigtigt an­ven­del­ses­om­rå­de er in­ter­net­tet. Web­ser­ve­re som Apache har i årevis un­der­støt­tet gzip-kom­pri­me­ring, og moderne browsere kan fortolke kom­pri­me­re­de filer og de­kom­pri­me­re dem, når websiden vises. Det er her, gzip virkelig kommer til sin ret, for når funk­tio­nen er aktiveret, kom­pri­me­rer web­ser­ve­ren au­to­ma­tisk både uploadet indhold og dynamisk ge­ne­re­re­de elementer på websiden på serveren. Dette kan reducere ind­læs­ning­sti­den for websiden be­ty­de­ligt som en del af den grund­læg­gen­de op­ti­me­ring af websiden. I mel­lem­ti­den håndterer browseren de­kom­pri­me­rin­gen i bag­grun­den uden at forbruge ekstra bånd­bred­de. Denne yde­ev­ne­for­bed­ring kommer især mo­bil­bru­ge­re til gode, og den kan indirekte forbedre din hjem­mesi­des placering i sø­ge­ma­ski­ner­ne.

Sådan bruger du gzip-kom­pri­me­ring til dit Apache-webpro­jekt

Web­ser­ve­re tilbyder typisk gzip-kom­pri­me­ring som et modul, der blot skal aktiveres. I dag aktiverer mange webhosting­ud­by­de­re denne funktion som standard, hvilket ikke altid var tilfældet tidligere. Hvis du er i tvivl om, hvorvidt din hosting­ud­by­der un­der­støt­ter gzip-kom­pri­me­ring, kan du enten kontakte dem direkte eller selv foretage en manuel kontrol.

På en Apache-webserver kan du kon­trol­le­re mo­dulindstil­lin­ger­ne ved hjælp af en simpel phpinfo(). HTTP_ACCEPT_ENCODING viser, hvilken kom­pri­me­rings­me­to­de der er valgt – eller om kom­pri­me­ring over­ho­ve­det er aktiveret. Hvis gzip er til­gæn­ge­lig, har du tre for­skel­li­ge mu­lig­he­der for at anvende dette kom­pri­me­rings­værk­tøj efter dine behov.

Mulighed 1: Aktiver gzip-kom­pri­me­ring i .htaccess-filen

Ved hjælp af .htaccess-filen kan du definere mappe-spe­ci­fik­ke indstil­lin­ger og kon­fi­gu­re­re din webserver i realtid. Dette fungerer, fordi kon­fi­gu­ra­tions­fi­len – som typisk ligger i rodmappen– au­to­ma­tisk læses ved hver eneste anmodning, der modtages af serveren. Hos nogle webhosting­ud­by­de­re kan .htaccess dog være placeret i en anden mappe, være skjult eller endda have ad­gangs­be­græns­nin­ger. I så fald er din eneste mulighed at kontakte din hosting­ud­by­der og anmode om adgang. Hvis du kan foretage ændringer, kan du aktivere gzip-kom­pri­me­ring ved hjælp af modulet til Deflate-al­go­rit­men (mod_deflate) ved at tilføje følgende kode til .htaccess -filen:

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>
txt
Tip

Du skal også have til­la­del­se fra din webhost for at kunne bruge modulerne mod_gzip og mod_deflate.

Mulighed 2: Aktivér gzip-kom­pri­me­ring via PHP

Det er muligt at aktivere gzip-kom­pri­me­ring ved hjælp af en simpel PHP-kodelinje. Ulempen er, at koden skal indsættes i hver enkelt PHP-fil. Derfor bør du kun benytte denne mulighed, hvis du ikke har de nød­ven­di­ge ret­tig­he­der til at redigere .htaccess. Den kodelinje, der skal indsættes i starten af hver fil, ser således ud:

<?php
ob_start("ob_gzhandler");
?>
php

Mulighed 3: Im­ple­men­ter gzip via et plugin

Ud over disse to manuelle løsninger findes der også en variant, der kun kræver minimal indsats at sætte op: ak­ti­ve­ring af gzip-kom­pri­me­ring ved hjælp af et plugin til det ind­holds­sty­rings­sy­stem, du bruger. Sådanne nyttige ud­vi­del­ser, som du kan in­stal­le­re på få minutter og tilpasse til dine behov, er primært beregnet til CMS’er som WordPress, der er baseret på PHP. Følgende liste in­de­hol­der tre af de mest populære plugins til denne blogsoftwa­re:

  • W3 Total Cache: WordPress-pluginet W3 Total Cache lover en mærkbart forbedret ydeevne på hjem­mesi­den. Ud over for­skel­li­ge caching-me­ka­nis­mer og dedikeret mo­bil­un­der­støt­tel­se in­de­hol­der denne pakke til SEO og bru­ger­ven­lig­hed også mu­lig­he­der for at aktivere gzip-kom­pri­me­ring.
  • WP Rocket: WP Rocket er et andet klassisk WordPress-caching-plugin. Det er nemt at bruge og aktiverer alle vigtige yde­ev­ne­op­ti­me­rings­funk­tio­ner – herunder gzip-kom­pri­me­ring – lige fra starten.
  • WP Per­for­man­ce Score Booster: WP Per­for­man­ce Score Booster-pluginet har allerede rundet 10.000 aktive in­stal­la­tio­ner. Med dette plugin kan du nemt aktivere gzip og effektivt kom­pri­me­re indholdet i dit webpro­jekt, herunder tekst, HTML, Ja­va­Script, CSS, XML og mere.

Sådan kon­fi­gu­re­res gzip på en NGINX-webserver trin for trin

Hvis du leverer indholdet på din hjem­mesi­de via en NGINX-webserver, kan du også udnytte gzip-kom­pri­me­ring til at forbedre dit projekts ind­læs­nings­tid. For at gøre dette skal du blot kon­fi­gu­re­re ngx_http_gzip_module. Som standard er gzip ivet – som aktiverer eller de­ak­ti­ve­rer kom­pri­me­ring­s­tje­ne­sten – slået fra.

For at ændre denne indstil­ling skal du åbne ho­ved­kon­fi­gu­ra­tions­fi­len nginx.conf og finde di­rek­ti­vet gzip. Erstat gzip off med gzip on. I ne­den­stå­en­de tabel beskrives formålet med og indstil­lin­ger­ne for nogle yder­li­ge­re di­rek­ti­ver, der bruges til at kon­fi­gu­re­re gzip-kom­pri­me­ring i NGINX:

Direktiv Syntaks Stan­dar­dindstil­ling Be­skri­vel­se
gzip_buffers gzip_buffers number size; gzip_buffers 32 4k \ 16 8k; Definerer antallet og stør­rel­sen af buffere, der bruges under kom­pri­me­rings­pro­ces­sen
gzip_comp_level gzip_comp_level level; gzip_comp_level 1; Indstil­ler kom­pri­me­rings­ni­veau­et; gyldige værdier: 1–9
gzip_min_length gzip_min_length length; gzip_min_length 20; Angiver den mindste længde (i byte) for en fil, der skal kom­pri­me­res
gzip_http_version gzip_http_version version; gzip_http_version 1.1; Angiver den mindste HTTP-version, der kræves for kom­pri­me­re­de svar
gzip_types gzip_types content-type; gzip_types text/html; Bestemmer, hvilke ind­hold­s­ty­per der skal kom­pri­me­res (f.eks. CSS, JSON, XML)

Sådan tester du gzip-kom­pri­me­ring

Når du har kon­fi­gu­re­ret gzip-kom­pri­me­ring til din hjem­mesi­de, kan du bruge for­skel­li­ge værktøjer til at kon­trol­le­re, at den fungerer korrekt, og at din webserver leverer kom­pri­me­ret indhold som svar på an­mod­nin­ger fra klienter. Et af de mest an­be­fa­le­de værktøjer til dette formål er Google PageSpeed Insights. Du skal blot indtaste en vilkårlig side fra dit websted, så ana­ly­se­rer værktøjet au­to­ma­tisk indholdet og leverer en rapport om sidens styrker og svagheder. Blandt re­sul­ta­ter­ne finder du op­lys­nin­ger om, hvorvidt gzip-kom­pri­me­ring er aktiveret.

Du kan også foretage en hurtig gzip-test ved hjælp af HTTP-kom­pri­me­ring­s­te­sten på WhatsMyIP.org.

Gå til ho­ved­me­nu­en