HTML5, RSS und Webserver Tuning

Ich bin jetzt auf HTML5 😊, mit dem Blog. OOP Rewrite des Blog-CMS, nun gibt es auch die erste Erweiterung: RSS feed.
Zudem habe ich beim Server eben doch endlich Keep-Alive aktiviert.

Keep-Alive und clientseitiges Caching spielen insbesondere im Mobilfunknetz eine Rolle, da es dort mitunter extrem langsam zugeht.
Wie wirkt sich das in der Praxis aus?

Zu dckg.net habe ich einen Ping (RTT) von 20ms. 50 MBit/s Download.
Ohne Keep-Alive (HTTP/1.0) muss zuerst einmal eine Verbindung aufgebaut werden, der TCP Handshake dauert 3*RTT, das macht 60ms.

Hier wurde wohlgemekrt nur die 4.4KB Große index.html geladen, alle anderen sind Overhead, da der Server für den Rest der Anfragen zurückmeldet, dass sich die entsprechenden Dateien nicht verändert haben.
Caching ist aktiv, allerdings nicht clientseitig.
Um zu erreichen, dass der Client für einen gewissen Zeitraum auf die entsprechenden Dateien gar keine Anfragen mehr tätigt, muss der Expires Header vom Server gesetzt werden. Das ist besonders für statischen Content nützlich.
Bei Navigation auf eine Unterseite sieht es demnach so aus:

55ms für die 1. Anfrage.
Mit keep-alive aktiviert, selbes Ergebnis:

Eine einzige Datei zu laden, macht keinen Unterschied.
Erst beim Laden von mehreren Dateien, kann keep-alive glänzen:

Eine Reduktion der Ladezeit um 50%.

Ferner ist zu Beobachten, dass jede weitere Datei den Ladevorgang erheblich bremst, Geschwindigkeit außen vor.
Aus diesem Grund versuche ich, die Anzahl der Includes möglichst gering zu halten, eine CSS, eine js.

Nichtsdestoweniger ist keep-alive nicht für alles die Lösung, wie der Name nämlich schon andeutet, wird dabei die Verbindung für einen bestimmten Zeitraum offen gelassen, was bei trafficlastigen Seiten dazu führen kann, dass der Server irgendwann keine File-Descriptors für neue Verbindungen mehr hat, da diese ja immer noch eine gewisse Zeit offen gehalten werden.

tl;dr
Website beschleunigen

  • Server: gzip an
  • Server: Expires Header setzen
  • Server: CSS/JS/Bilder zusammenfassen, -> CSS Sprites
  • kee-alive an mit niedrigem Timeout