Contact met ondersteuning

Wij antwoorden per e-mail, meestal binnen twee dagen.

Google reCAPTCHA controleert deze inzending op misbruik; daarbij worden gegevens naar Google gestuurd. Het script laadt pas wanneer dit formulier wordt geopend.

← Alle berichten

Elke keer opnieuw hetzelfde bestand comprimeren

Apache comprimeert antwoorden ter plekke. Voor een pagina die elke keer anders is, is dat de enige mogelijkheid. Voor een stijlblad dat een keer per maand verandert, betekent het dat de server hetzelfde werk voor elke bezoeker opnieuw doet, wekenlang, en het resultaat elke keer weggooit. Er is geen cache voor.

Gemeten op 19 augustus 2026 over een bestaande verbinding, met de eigen style.css (124 kB) en world.js (102 kB) van deze site:

tijdbytes
geen compressie2,9 ms124.755
gzip, ter plekke18,1 ms34.995
brotli, ter plekke14,5 ms32.685
world.js, gzip47,9 ms38.283
world.js, brotli15,9 ms38.086
geen compressie2,9 msgzip18,1 msbrotli14,5 msworld.js gzip47,9 msworld.js brotli15,9 ms

Achtenveertig milliseconden processortijd, per aanvraag, om een byte voor byte identiek resultaat te maken. Op een kleine server is dat geen afrondingsfout.

Eén keer comprimeren, op schijf

Een bouwstap schrijft het gecomprimeerde bestand naast het origineel, en een herschrijfregel levert het uit wanneer de browser zegt dat hij gzip aanvaardt. Een af bestand uitleveren kost wat het uitleveren van elk bestand kost.

gzip in plaats van brotli, om een saaie reden: er staat op deze machine geen brotli-programma. De bestanden komen er ongeveer 7 % groter uit dan brotli ze zou maken, en de servertijd is een vijfde van wat brotli ter plekke kost. Die ruil was het waard om nu te maken in plaats van op een mooier antwoord te wachten.

De versie komt in de bestandsnaam

De bouwstap schrijft style.css.<mtime>.gz, en de ?v= in het markup is diezelfde wijzigingstijd. De herschrijving vuurt alleen wanneer er een bestand met het overeenkomende getal bestaat.

Die opzet heeft een eigenschap waar het waard is met opzet naartoe te ontwerpen: verandert het stijlblad en wordt de herbouw vergeten, dan wijst het getal in het markup naar een bestand dat niet bestaat, vuurt de herschrijving niet, en levert Apache het origineel gewoon uit. Het ergste geval is dat de versnelling ontbreekt. Een verouderd stijlblad kan er niet uit komen. Elk cacheschema hoort tegen die vraag gehouden te worden — gaat het traag of gaat het fout wanneer het misgaat?

De fout die er middenin zat

Het uitgeleverde bestand is al gzip, dus het mag onderweg naar buiten niet nogmaals gecomprimeerd worden. De configuratie zette oorspronkelijk no-gzip, wat een van Apaches twee compressoren stopt. De andere, mod_brotli, comprimeerde het afgewerkte gzip-bestand vrolijk met brotli terwijl de antwoordkop bleef zeggen gzip.

Browsers kregen onleesbare inhoud. Het is niet gevonden door naar de pagina te kijken — het is gevonden door de bytes op te tellen en een getal aan te treffen dat nergens op sloeg. Zowel no-gzip als no-brotli zijn nodig, en maar één van de twee is de voor de hand liggende.

Advertentie