Aus aktuellem Anlass habe ich beschlossen etwas zum Thema Ladezeiten zu schreiben. Wie einige sicher wissen crawlen wir mit unserem Strukturanalysedienst strucr.com meist große Webseiten und gehen dabei sehr tief. Oft sind die gecrawlten Webseiten in großen Bereichen extrem langsam. Teilweise ist die Performance an einigen Stellen so schlecht, dass mehrere Sekunden vergehen bis der HTML-Code ausgeliefert ist und ein Crawl mit einigen wenigen Requests die Seite spürbar langsamer werden lässt. Scheinbar ist die Performance der Webseite bei den meisten Firmen noch immer kein Thema.
Ladezeiten sollten ein Thema sein:
Argumentiert man bei Ladezeiten mit Usability, Ressourcenverbrauch oder möglichen Einnahmesteigerungen so stößt dies meist auf taube Ohren. Es geht aber bei der Performance von Webseiten auch darum Schreckensszenarien wie das folgende (frei erfunden) zu vermeiden:
Ein 13 jähriger Bengel hat sich über Ihre Webseite geärgert und möchte Sie dies spüren lassen. Da seine Ressourcen stark eingeschränkt sind überlegt er sich, wie genau er die Seite möglichst effizient lahmlegen kann. Er sucht sich also genau den Typ von Unterseiten heraus, die überdurchschnittliche Ladezeiten aufweisen, und ruft von diesen so viele wie möglich in kurzer Zeit ab. Ihre Seite geht wegen schlecht performender Unterseiten in die Knie obwohl für den Betrieb der Seite mehrere Server zur Verfügung stehen und der Angriff stümperhaft und gerade mal mit einer einzelnen DSL-Leitung durchgeführt wird.
Durch schlechte Ladezeiten droht also schnell mal ein kompletter Ausfall der Seite. Ladezeitenprobleme sind mitunter Sicherheitsprobleme und diese sollten eine hohe Priorität haben und mit ausreichend Ressourcen abgearbeitet werden.
Die Problemanalyse und Problembehebung:
Die Aufgabenstellung ist denkbar einfach. Zunächst müssen die langsamen Seiten identifiziert werden. Dafür kann entweder ein Crawler benutzt werden, der in der Lage ist die Antwortzeiten zu erfassen (z.B. strucr.com), oder aber man baut einfach ein simples Logging der Zeiten in den Code der Webseite ein. Sobald man eine langsame Seite gefunden hat, muss man sich im Detail anschauen was an der Seite langsam ist (Debugger nutzen) und dann Abhilfe schaffen.
Hier einige Optimierungsansätze:
- Häufig haben Webseiten Probleme mit langsamen Datenbankabfragen. Oft lassen sich die Abfragen optimieren indem sie einfach anders geschrieben werden. Manchmal fehlen auch einfach nur die Indizes. Viele Datenbankserver sind darüber hinaus falsch konfiguriert und können daher Anfragen nicht performant beantworten.
- Bei PHP-Seiten fehlt häufig ein sogenannter Opcode-Cache der den interprätierten Code zwischenspeichert. Der Code muss daher ständig neu übersetzt werden was zu deutlichen Verzögerungen führt.
- Vereinzelt wird bei Seiten auf externe Daten zugegriffen anstatt diese lokal vorzuhalten oder zwischenzuspeichern.
- Paginierte Inhalte sind oft nicht in der Seitenzahl beschränkt und damit auf den hinteren Seiten zwangsweise deutlich langsamer. Denn dort werden in der Regel die Inhalte datenbankseiting bis zu der betreffenden Seite vorbereitet und dann die entsprechende Anzahl Datensätze übersprungen. Auf der letzten Seite bedeutet das dann einen Full Table Scan auf einer temporären Tabelle. Ein Performance-Alptraum.
- Statt den schnellen und optimierten Funktionen der Programmiersprache werden oft eigene Funktionen geschrieben die dann langsamer sind.
Und das Beste zum Schluss:
Verbesserte Usability, niedrigerer Ressourcenverbrauch oder möglichen Einnahmesteigerungen gibt es bei der Beseitigung des Sicherheitesproblems nun gratis mit dazu.
Ich kann das Analyse Tool NewRelic noch dazu empfehlen dass sowohl den Server als auch den Browser des Users trackt. Hier wird genau unterschieden an welcher Stelle die Probleme auftreten und teilweise zeigt das Tool sogar die MySQL-Querys oder die Funktion im php-Code an die langsam sind.
Unheimlich guter Artikel! Ladezeiten unterschätzen viele leider sehr. Neben der Sicherheit spielt besonders das Ranking eine wichtige Rolle. Werde mir das Tool auf jeden Fall mal anschauen, die Leistung selbst ist vielversprechend.
Das Thema Ladezeiten ist mittlerweile sehr, sehr wichtig und wird leider immer noch völlig unterschätzt. Hier kann man auch noch eine Menge optimieren, zum Beispiel mit Bildern komprimieren, geringere Größen, also zum Beispiel statt ein 500px Bild auf 300px verkleinern bringt auch schon eine ganze Menge.
Also ich analysiere die Ladezeiten mit den Browser Addons Firebug und Page Speed. Kann man ziemlich genau sehen, welches Element wie groß ist und wie lange die Ladezeit ist. Damit kann man ganz gut zu große Bilder entdecken oder langsame Skripte.
Es geht in dem Artikel vorallem um die Zeit um die Seite auf dem Server zu generieren. Die Ladezeiten beim User sind eine vollkommen andere Sache.
Inwiefern sind Ladezeitenprobleme denn Sicherheitsprobleme, das habe ich nicht ganz verstanden?
Das Ladezeitenproblem wird zum Sicherheitsproblem wenn einzelne Seiten so viele Ressourcen benötigen, dass einige wenige Zugriffe auf diese Seiten oder den Seitentyp ausreichen um alle Ressourcen aufzubrauchen.
Hallo Tobias,
ein durchaus interessanter Artikel, der sich aber noch erweitern ließe. Im Grunde nutzen die meisten Blogger wie auch SEOs Wordpress. Hier könnte man doch wunderbar ansetzen und Möglichkeiten der Optimierungen darstellen.
Meines Ermessens gibt es eine Vielzahl von Seiten die das Thema ansprechen. Aber gerade für den Hobbyblogger mit wenig Kenntnissen im Bereich von Server und Softwareentwicklung wäre dies mal ein heiß ersehnter Artikel.
Gruß RR
Eines der größten Hindernisse in Puncto Ladezeiten ist immer noch die Anzahl von Http-Requests und die Auflösung von Bildern. Die Ausführung der Sprache spielt denke ich kaum eine Rolle und gute Blog/CM-Systeme cachen die Datenbankverbindungen, so dass ich darin auch kein Problem sehe.
Wir nutzen C#/ASP.NET im Vergleich zu PHP konnten wir keinen signifikanten Performance-Vorteil feststellen. Die Sub-300ms Ladezeiten kommen eher von Sprites und minimierten Http-Requests.
(siehe )
Guter Artikel, Ladezeiten hatte ich bisher noch überhaupt nicht im Visier, das wird demnächst mal angegangen.