Website-Performance: Was steckt dahinter?

Wenn wir es genau betrachten, dann sind (fast) alle Websites Web-Applikationen. Ein CMS ist nichts anderes, als eine Software zur Inhaltsverwaltung und -darstellung. Die Geschwindigkeit Ihrer Website ist also von denselben Kriterien abhängig, welche auch bei grossen Kundenportalen, Intranet, etc. relevant sind.

Reicht eine einfache WordPress-Website ohne jegliche Optimierungen oder setze ich besser auf eine Individualentwicklung? Wie viele Zugriffe erfolgen paralell / pro Tag? Sind Drittsysteme oder Schnittstellen invloviert? Welchen Stellenwert hat die Suchmaschinen-Optimierung?

Fragen wie diese prägen den Prozess zu einer neuen Website massgeblich und geben auch die Leitplanken für die Perfomance vor. Google priorisiert seit Juli 2018 die Geschwindigkeit einer Website in Bezug auf deren Ranking stark. In diesem Artikel möchten wir Ihnen die technischen Hintergründe zu unserer neuen Website schildern und Ihnen zeigen, wie Sie Ihre eigene Seite analysieren können.



1.Anatomie einer Website

Wenn Sie eine Website öffnen, dann erhält Ihr Browser im Wesentlichen die folgenden Inhalte und Ressourcen:

Inhalte / Struktur Ressourcen
  • Code für die Inhaltsstrukturierung (HTML)
  • Seiteninhalt
  • Anweisungen für die Darstellung (CSS)
  • Code für die dynamischen Funktionalitäten (JS)
  • Bilder, Videos, Schriften, etc.

Sie erhalten als Antwort zuerst die HTML-Struktur. Diese wiederum verweist auf die restlichen Ressourcen, für welche einzeln erneut Anfragen gesendet werden. Pro Klick wird also nicht nur eine sondern mehrere Anfragen einzeln gesendet.

Die Art und Weise, wie diese Teile auf Ihrem Rechner landen, könnte unterschiedlicher nicht sein. Als Website-Besucher merken Sie dies anhand der gefühlten Geschwindigkeit einer Website. Die Zeit, welche zwischen dem Klicken auf einen Link und dem vollständigen Laden der oben genannten Komponenten verstreicht, nennt man die Load-Zeit. Diese Zeit gilt es möglichst kurz zu halten.

Die Load-Zeit hat also einen wesentlichen Einfluss auf das subjektive Surf-Erlebnis der Besucher. Doch nicht nur das: Dieser Wert ist massgeblich relevant für das Suchmaschinen-Ranking Ihrer Website. Als Richtwert ist ein Wert unter einer halben Sekunde anzustreben. Unter diesem Wert empfinden die meisten Besucher eine Website als schnell und ein gutes Ranking ist gewährleistet. Die Load-Zeit Ihrer Website können Sie ganz einfach mit den Entwickler-Tools Ihres Browsers anzeigen lassen.

Anleitung Chrome

  1. Die Entwicklertools öffnen Sie in Google Chrome mit der Tastenkombination Ctrl+Shift+i oder über das Menu More Tools > Developer tools.
  2. In den Entwicklertools klicken Sie nun auf den Tab Network. Nun navigieren Sie auf die Seite, welche Sie messen möchten und drücken Ctrl+F5. Die Seite nur über den Reload-Knopf neu zu laden würde ein falsches Ergebnis liefern, da bereits geladene Ressourcen auf Ihrem Rechner aus dem Zwischenspeicher genutzt und nicht erneut heruntergeladen werden.
  3. Sie sehen die Load-Zeit nun in roter Schrift in der Fusszeile der Entwicklertools: z.B. Load: 250 ms

Anleitung Firefox

  1. Die Entwicklertools öffnen Sie in Mozilla Firefox mit der Tastenkombination Ctrl+Shift+i oder über das Menu Web Developer > Toggle Tools.
  2. In den Entwicklertools klicken Sie nun auf den Tab Network. Nun navigieren Sie auf die Seite, welche Sie messen möchten und drücken Ctrl+F5. Die Seite nur über den Reload-Knopf neu zu laden würde ein falsches Ergebnis liefern, da bereits geladene Ressourcen auf Ihrem Rechner aus dem Zwischenspeicher genutzt und nicht erneut heruntergeladen werden.
  3. Sie sehen die Load-Zeit nun in pinker Schrift in der Fusszeile der Entwicklertools: z.B. load: 250 ms

Anleitung Safari

  1. Die Anleitung zum Einschalten des Web-Inspectors finden Sie hier.
  2. Im Web-Inspectors klicken Sie nun auf den Tab Network. Nun navigieren Sie auf die Seite, welche Sie messen möchten und halten Shift, während Sie den Reload-Button klicken. Die Seite nur über den Reload-Knopf neu zu laden würde ein falsches Ergebnis liefern, da bereits geladene Ressourcen auf Ihrem Rechner aus dem Zwischenspeicher genutzt und nicht erneut heruntergeladen werden.
  3. Sie sehen die Load-Zeit oben im Web-Inspector neben dem Stoppuhr-Icon.

Anleitung Edge

  1. Die Entwicklertools öffnen Sie in Microsoft Edge mit der Taste F12 oder über das Menu More Tools > Developer tools.
  2. In den Entwicklertools klicken Sie nun auf den Tab Network. Nun navigieren Sie auf die Seite, welche Sie messen möchten und drücken Ctrl+F5. Die Seite nur über den Reload-Knopf neu zu laden würde ein falsches Ergebnis liefern, da bereits geladene Ressourcen auf Ihrem Rechner aus dem Zwischenspeicher genutzt und nicht erneut heruntergeladen werden.
  3. Sie sehen die Load-Zeit nun in der Fusszeile der Entwicklertools: z.B. 250 ms taken

Neben der Datenmenge haben die Geschwindigkeit Ihrer Internetanbindung, die Wahl des Browsers und die Leistung Ihres Rechners einen Einfluss auf diesen Wert. Die letzten drei Faktoren können nicht durch eine Website beeinflusst werden, der Erste dafür umso mehr.

Es gilt die Anzahl an Ressourcen-Anfragen und deren Dateigrösse möglichst klein zu halten. Zudem gibt es Verfahren, welche den Prozess zusätzlich beschleunigen können. Es kommt ein weiterer Faktor ins Spiel: Wie lange braucht Ihre Website auf dem Server, um die Inhalte zusammenzustellen? All diese Aspekte liegen unter der Kontrolle eines Web-Entwicklers und hängen direkt mit der Wahl des CMS oder einer Individualentwicklung zusammen. Und hier trennt sich die Spreu vom Weizen!


2.Analyse einer Website

Die wesentlichen Aspekte der Beurteilung einer Website wurden bereits im ersten Kapitel erläutert. Diese können demnach in drei Kategorien eingeteilt werden, welche nun im Detail beschrieben werden.

Anzahl der Anfragen

Der Aufwand, um eine Verbindung zu einem Server herzustellen, ist beträchtlich. Diesen Vorgang für jede noch so kleine Ressource erneut zu betreiben, ist aufwändig. Es gibt heute Möglichkeiten, die Verbindung aufrecht zu erhalten, jedoch werden diese noch nicht flächendeckend genutzt. Es gilt also, die Anzahl der Anfragen tief zu halten. Diese sehen Sie ebenfalls im Netzwork-Tab der Entwicklertools. Jede Zeile entspricht einer Anfrage:


In jeder Zeile wird der Type der zu ladenden Ressource genannt. Die erste Zeile ist das document, also die eigentliche Seite, die Sie angefordert haben. Die weiteren Ressourcen wurden durch diese direkt oder durch andere Ressourcen angefordert. Anhand der geladenen Ressource-Typen können wir einen ersten Rückschluss ziehen. Die nachfolgende Tabelle beschreibt Richtwerte für die optimale Anzahl an Ressourcen eines Typs. Der Einfachheit halber werden nur die gängigsten Typen beschrieben.

Typ optimal vertretbar schlecht Massnahmen
Style-Definitionen
(stylesheet)
<=2 3-4 >4 Die Stylesheet-Dateien können mit einem Bundler zusammengeführt und in der Grösse reduziert werden.
Script-Dateien
(script)
<=2 3-4 >4 Die Script-Dateien können mit einem Bundler zusammengeführt und in der Grösse reduziert werden.
Schriftarten
(font)
<=2 3-4 >4 Pro Font nur die jeweils verwendeten Schriftgewichte laden oder auf Standartfonts ausweichen.
Bilder
(png, jpg, gif, ...)
möglichst klein / wenige Die Anzahl richtet sich nach dem Inhalt. Es ist ein grosses Augenmerk auf die Komprimierung der Bilder zu legen. Weiter sollten wo immer möglich Vektorgrafiken eingesetzt werden (z.B. SVG).
Videos
(mp4, webm, ...)
möglichst klein / wenige Videos sind meist sehr gross und sollten entsprechend nur wo nötig eingesetzt werden. Die Kompression sollte so hoch wie möglich sein.

Hier haben die gängigen CMS-Systeme meist sehr (!) schlechte Werte, da sie von Haus aus nicht optimiert sind. Insbesondere der Einsatz von zusätzlichen Plugins führt zu unglaublichen Werten. Wir haben schon Websites mit mehr als 50 Script-Dateien und Style-Definitionen gesehen. Dass dies suboptimal ist, lässt sich leicht erahnen und wird mit Ladezeiten von bis zu mehreren Sekunden bestraft.

Grösse der zu herunterladenden Daten

Dieser Punkt ist einfach nachvollziehbar. Je mehr Daten es herunterzuladen gibt, desto länger dauert das Laden einer Website. Der Impact hängt jedoch stark von der Internetanbindung des Besuchers ab. Bei vielen Dateiformaten lässt sich jedoch viel mit einer optimalen Vorbereitung verbessern.

Bei Bildern und Videos kann die Dateigrösse über die Auflösung und die Kompressionsstufe beeinflusst werden. Im Web-Kontext gibt es einen Kniff: Bilder und Videos werden in einer höheren Auflösung exportiert, als sie tatsächlich benötigt werden. Im Gegenzug wird die Kompression höher gewählt. Das Bild / Video wird so durch den Browser verkleinert. Dies führt meist zu besseren Ergebnissen und gleichzeitig kleineren Dateien, da das Skalieren des Browsers die durch die höhere Kompression entstandenen Fragmente kaschiert.

Bei Style-Definitionen, Script-Dateien und textbasierten Dateitypen im Allgemeinen kann deutlich an Dateigrösse gespart werden, wenn diese durch einen Builder optimiert werden. Dieser streicht unnötige Leerzeichen, Zeilenumbrüche und Kommentare aus den Dateien und ersetzt Variablennamen durch wesentlich kürzere. Dadurch wird die Grösse der Files markant reduziert.

Verarbeitungszeit auf dem Server

Hierbei handelt es sich um die Zeit, die ein Server braucht, bis er die zu einer Anfrage passende Antwort liefern kann. Es geht also um das Zusammenstellen der passenden Daten zu einer URL. Je nachdem variieren diese zusätzlich anhand mitgelieferter Parameter oder Formulardaten.

Die gängigsten CMS- und Shop-Systeme basieren auf der Sprache PHP (WordPress, Joomla, Typo3, Magento, uvm.). Auch wenn Sie nur eine WordPress-Seite betreiben, haben Sie in Wirklichkeit eine Software, welche sich um einen spezifischen Anwendungsfall kümmert: das zur Verfügung stellen von Inhalten anhand von unterschiedlichen Anfragen. Bei CMS-Systemen können diese Inhalte zusätzlich direkt in dieser Software verwaltet werden. Die Systeme unterscheiden sich aufgrund unterschiedlicher Architekturen stark in punkto Performance. Nebst PHP gibt es diverse weitere Sprachen, welche zur Umsetzung von Websites und Web-Applikationen eingesetzt werden.

Die Verarbeitungszeit kann bei der Betrachtung des Network-Tabs (siehe Screenshot oben) der Developer-Tools grob nachvollzogen werden. Der grüne Teil der Balken (Chrome) stellt die TTFB (time to first byte) dar, also die Zeit, welche der Server braucht, um die Antwort auf eine Anfrage zu senden. Das funktioniert wie beim Lösen von Mathe-Aufgaben: Je intelligenter das System ist, desto schneller wird die Antwort geliefert. Der Wert lässt also direkt einen Rückschluss auf die Qualität der Website / -applikation zu. Gute Werte sind klar unter 100 Millisekunden.

Zur Lösung von schlechter Performance können Sie zwei Ansätze verfolgen:

Optimierung des Codes Mittels Analysewerkzeugen kann genau nachvollzogen werden, welche Operationen im Code wie viel Zeit benötigen.
Caching-Verfahren Caching bedeutet das Zwischenspeichern von Daten zu bereits bekannten Anfragen, welche direkt ausgeliefert werden können. Dadurch kann eine lange Verarbeitungszeit umgangen werden, solange sich die zu grunde liegenden Daten nicht ändern. Caching sauber und zuverlässig einzusetzen, erfordert ein hohes Mass an Know-how und sorgfältiges Testen.

Durch den Einsatz beider Varianten in Kombination erhält man selbstverständlich die besten Ergebnisse.

3.CMS oder Individualentwicklung?

Die Antwort auf diese Frage hängt alleine von den Anforderungen an Ihre Applikation ab. Die meisten CMS-Systeme haben einen klar definierten Einsatzzweck mit zugehöriger Zielgruppe. Zudem lassen sie sich in unterschiedlichem Umfang durch Programmierung erweitern. Da die meisten Systeme Open Source sind, könnte man mit jedem System, jede Anforderung abdecken, jedoch ist der damit verbundene Aufwand als Konsequenz höher oder tiefer. Bei Menschen würde man von der Komfortzone sprechen.

Im Bezug auf Performance schneiden CMS-Systeme, insbesondere ohne Optmierungen, deutlich schlechter ab. Welche weiteren Unterschiede für Sie relevant sein können, möchten wir Ihnen anhand des folgenden Vergleichs schildern.

CMS-Systeme: Beispiel WordPress

WordPress entstand als einfache Blog-Software, deren Kernaufgabe die Verwaltung von Inhaltsartikeln und Kategorien war. Mittlerweile hat es sich zu einem beachtlichen Web-CMS gemausert und glänzt durch Benutzerfreundlichkeit. Die Erweiterbarkeit ist jedoch vergleichsweise schlecht, denn im Kern ist es immer noch das alte WordPress.

Eine unglaubliche Anzahl an Plugins täuscht über die Tatsache hinweg, dass die Architektur der Software immer noch auf den ursprünglichen Zweck ausgelegt ist. Ist WordPress deshalb schlecht? Im Gegenteil! Es gibt keine bessere Software für Websites, welche - zumindest hauptsächlich - eine Website bleiben sollen. Wenn Sie jedoch individuelle Anforderungen an eine Website haben, es sich also mehr um eine Web-Applikation handelt, ist WordPress wahrscheinlich die falsche Wahl. Dies ist oft der Fall, wenn Sie eigene Entitäten (Kunden, Projekte, Termine, Zeiterfassung, ...) verwalten, Schnittstellen einbinden oder Geschäftsprozesse abbilden möchten. Auch solche Fälle lassen sich in WordPress abbilden, jedoch nicht mit verhältnissmässigem Aufwand.

Ein erheblicher Nachteil ist die Sicherheit: Hacker erkennen blitzschnell, wenn Sie ein Standardprodukt wie WordPress im Einsatz haben. Bereits bekannte Lücken können so angegriffen werden. Stetige Updates sind deshalb unabdingbar. Weiter sind Realease-Zyklen teilweise problematisch. Dies weil die Daten, je nach Umfang des Updates, nicht automatisch portiert werden können.

Individualentwicklung

Eine individuell auf Sie zugeschnittene Software deckt genau die Anwendungsfälle ab, die Sie benötigen. Als Resultat profitieren Sie von sehr einfacher und übersichtlicher Bedienung und - sofern richtig umgesetzt - einer sehr hohen Performance. Schnittstellen lassen sich genau nach Vorgaben einbinden und komplexe Geschäftsprozesse 1:1 abbilden. Auch hier beginnt man nicht bei Null: Durch den Einsatz von Frameworks werden einem die grundlegenden Arbeiten wie Sicherheit, Routing, etc. abgenommen. Die Entwicklung beginnt also direkt bei Ihrem Prozess. Beispiele für solche Frameworks sind Yii, Laravel, Symfony und viele andere.

Typische Fälle für Individualentwicklungen sind Intra- / Extranet oder webbasierte Geschäftsapplikationen. Lassen Sie sich nicht täuschen: Eine auf den ersten Blick einfache Website mit Anbindung von ERP-Sytemen, spezifischer Benutzerverwaltung, Datensynchronisation, etc. kann durchaus auch in diese Kategorie fallen!

Der Nachteil liegt im Vergleich zu CMS-Systemen in deren Kernfunktion: der Inhaltsverwaltung und Aufbereitung. Um denselben Umfang und dieselbe Funktionalität in diesem Bereich zu erhalten, müsste man ein CMS nachbauen. Durch den Einsatz derselben Editoren und Werkzeuge kann der Unterschied jedoch auf ein Minimum reduziert werden.

4.Hinter der Kulisse unserer Website

Bei unserer Website handelt es sich um eine Individualentwicklung, welche von der Architektur her für sehr hohe Zugriffslasten konzipiert ist. Natürlich hat die Seite bei Weitem nicht so viele Zugriffe, wie sie verkraften könnte, jedoch können wir so die Konzepte validieren, welche wir auch bei Grossapplikationen einsetzen. Folgende Komponenten haben wir dabei berücksichtigt:

Komponente Massnahme
Code-Optimierung Mittels serverseitiger Analyse haben wir den Ressourcenverbrauch des Codes ausgewertet und konnten diverse Engpässe lokalisieren. Diese Engpässe haben wir dann soweit möglich neu geschrieben. Wo dies nicht möglich war, haben wir an genau diesen Stellen auf Caching-Verfahren zurückgegriffen.
OPcache Die PHP-Code-Dateien werden beim ersten Ladevorgang kompiliert. Danach werden diese im Cache gehalten und müssen erst wieder analysiert werden, wenn sie verändert wurden.
Ressource-Cache Aufwendige DB-Zugriffe werden in einem Daten-Cache zwischengespeichert. Vor jedem Zugriff wird überprüft, ob sich die Daten verändert haben oder ob die maximale Lebensdauer des Cache-Eintrags erreicht wurde.
Page-Cache Die einzelnen Seiten sind an diverse Ressourcen gebunden. Hat seit dem letzten Zugriff auf eine Seite nichts geändert, so wird der Server-Code gar nicht ausgeführt, sondern die Seite vollumfänglich aus dem Cache geladen. Diese Massnahme bringt den grössten Effekt, ist jedoch sehr komplex in der Implementierung der Abhängigkeiten.
Datenübertragung Sämtliche Verbindungen werden auf eine verschlüsselte Verbindung abgewickelt (SSL/TLS). Dies garantiert einerseits Sicherheit, erlaubt andererseits aber auch den neuen HTTP/2-Standard. Bei diesem bleibt die Verbindung zwischen einzelnen Anfragen an den Server offen und beschleunigt so den gesamten Ladeprozess.
Server-Konfiguration Wo möglich werden die Dateien komprimiert übertragen. Insbesondere bei textbasierten Dateien führt dies zu einer deutlichen Reduktion der Datenmenge.
Optimierung der Ressourcen-Dateien Sowohl Style-Definitionen, als auch Script-Dateien werden mit einem Builder zusammengefasst und verkleinert.
HTML-Code (SEO) Der gesamte HTML-Code ist Suchmaschinen-optimiert und setzt die semantischen Empfehlungen der relevanten Suchmaschinen um. Diese Massnahme hat einen wesentlichen Einfluss auf die Indexierung einer Suchmaschine, da das Ranking heutzutage nicht nur über die Meta-Daten, sondern in hohem Masse von den eigentlichen Seiteninhalten abhängt.
SEO Ergänzend zum vorangehenden Punkt nutzen wir Structured-Data. Ein Verfahren, mit welchem man Teile des Seiteninhalts explizit kennzeichnen kann. So können wir einem Crawler direkt mitteilen, dass es sich bei einem Text-Block beispielsweise um eine Person oder einen Blog-Post handelt.
Sitemap Die Sitemap wird laufend neu generiert und berücksichtigt bei der Link-Priorisierung die Publikationsdaten und die interne Priorisierung der einzelnen Seiten.
Bilder und Videos Sämtliche Bilder und Videos sind entsprechend für den Web-Kontext vorbereitet. JPG-Bilder werden beispielsweise für einen optimierten Ladevorgang progressiv encodiert. Hier haben wir die Bildqualität höher gewichtet, als die reine Ladegeschwindigkeit. Schliesslich ist die Bildwelt ein wesentlicher Bestandteil unseres Auftritts.
Lazy-Loading Sämtliche Ressourcen werden erst geladen, wenn sie wirklich gebraucht werden. Dies hält die Load-Zeit tief, ohne dass Sie als Besucher etwas davon merken. Bei den Header-Bildern wird beispielsweise immer nur das erste Bild geladen. Die Restlichen folgen anschliessend im Hintergrund.

5.Fazit

Zugegeben: für eine einfache Website mit wenigen Besuchern ist dieser Aufwand nicht verhältnismässig. Viele der genannten Punkte lassen sich jedoch, entsprechendes Know-how vorausgesetzt, mit erstaunlich wenig Zusatzaufwand umsetzen. Wichtig ist dabei, dass dies ab Projektstart berücksichtigt wird.

Da wir neben regulären Websites vor allem komplexe Web-Applikationen umsetzen, war unsere neue Website ein ideales Projekt, die Massnahmen im kleinen und isolierten Kontext zu validieren. Mit der genutzten Architektur und Projektstruktur kann problemlos ein Web-Portal mit tausenden Anfragen und einer komplexen Datenbank- und Schnittstellen-Integration umgesetzt werden. Diese Erfahrung durften wir in diversen Kundenportalen, individuell entwickelten Business-Software-Produkten und Intranet einfliessen lassen.

Wie optimiert ist Ihre Website, bzw. Web-Applikation? Gerne analysieren wir Ihr Web-Auftritt und helfen Ihnen, die Performance zu steigern. Wir freuen uns auf Ihre Kontaktaufnahme.


Pascal Müller

Bereichsleiter Software Engineering


Mit mehr als 15 Jahren Web-Erfahrung durfte ich bereits den einen oder anderen Technologiesprung mitverfolgen. Die Anforderungen in Bezug auf Performance blieben dabei konstant. Eine Website oder Web-Applikation soll sich schnell anfühlen. Die Web-Entwicklung ist heute komplexer als je zuvor und parallel dazu steigen auch die Know-how Anforderungen. Ein CMS-System zu installieren, Inhalte zu erfassen und die Seite aufzuschalten reicht heute in den meisten Fällen nicht mehr. Und genau hier kommen wir ins Spiel.