Naar aanleiding van deze thread ('http compression - it rocks') op het forum hebben ik en Arjen gisteren wat zitten spelen met het gebruik van HTTP compressie op Athena. Het idee achter HTTP compressie wordt uitgebreid uitgelegd in dit artikel van Webreference.com. Basicly komt het erop neer dat HTML (en andere) files al dan niet on-the-fly door de server worden gecomprimeerd en vervolgens naar de client worden gestuurd, die ze vervolgens decomprimeert. Hiertoe werd werd in de HTTP1.1 specificatie de mogelijkheid voor 'content-encoding' opgenomen. Alle moderne browsers ondersteunen HTTP1.1 met content-encoding. Netscape doet dit vanaf versie 4.5 en IE vanaf versie 4 met uitzondering van de Mac varianten (boeiuh )
Naast het voorpletten van statische files is het mogelijk om de resultaten van dynamische scripts on-the-fly te comprimeren. Hiervoor gebruiken we dit simpele PHP scripsel. Alles wat je nodig hebt is een met zlib gecompileerde (thanks Rick) PHP4.0.1 of hoger. Het PHP script checkt of de client zip encoding ondersteunt en stuurt afhankelijk daarvan de gecomprimeerde of ongecomprimeerde inhoud van de pagina. Voor de gebruiker is HTTP compressie, afgezien van de behoorlijke hoge snelheidswinst die je er mee kunt behalen, volledig transparant.
Mijn eerste tests met de t.net nieuwspagina's leverden al meteen erg spectaculaire resultaten op. Afhankelijk van de grootte van de pagina werd een compressie ratio tussen 1:2,5 en 1:6 behaald. Meer dan 1:5 blijkt vrij normaal te zijn voor pagina's met veel reacties. Het verschil tussen 50 en 10KB is gigantisch voor mensen die gekweld worden door een trage verbinding. Het verbaast me dan ook dat er in de praktijk nog nauwelijks gebruik wordt gemaakt van dit geniale idee .
De effecten zijn uiteraard minder merkbaar voor tweakers die al gezegend zijn met een aso dikke SURFnet of Cistron internet pijp. Het verschil kun je checken door '&nocompr=true' achter de URL van een pagina te plakken. De compressie ratio kun je in je status bar vangen door '&debug=true' toe te voegen.
Het overduidelijke nadeel van realtime HTTP compressie is het feit dat elke pagina gezipt moet worden voordat deze naar de client wordt gestuurd. Het gevolg is dat de response tijd iets oploopt. Op dit moment (s'nachts) is daar nog niets van te merken, maar dat kan anders tijdens de topdrukte overdag (wanneer er rond de 10 pagina's per seconde worden gerenderd). Aan de andere kant heeft HTTP compressie het voordeel dat de transfertijd veel korter is bij trage clients, waardoor de Apache kindjes sneller mogen sterven. Dit bespaart geheugen en CPU tijd. In de komende dagen willen we uitvogelen of HTTP compressie al bruikbaar is met de huidige (over)belasting van de servers.
HTTP compressie wordt nu ook gebruikt op het forum. Arjen heeft een optie in de preferences opgenomen waarmee je compressie desgewenst kunt disablen. In de nieuwe Topix versie heeft hij tevens de volgende updates en bugfixes aangebracht:
1.2.5zlib - 18 november 2000
- code: wat debug info verwijderd.
- code: mt_srand ipv srand. (=betere random getallen)
- got: Mozilla/Netscape6 laten alles nu ook goed zien
- bugfix: smileycode fout
- bugfix: smilies bij starten van topic en bij editten bericht
- bugfix: smilies stonden boven preview scherm
- bugfix: enter na 1e regeltje in quote
- bugfix: html href naar [.url=http://]url[/url] omzetten ging niet ok
- bugfix: / me bug bij quoten!
- bugfix: links bij search klopten niet helemaal