Im 5. und letzten Teil der Artikelreihe Webseiten beschleunigen will ich erklären, wie ihr den Code eurer Webseiten optimieren könnt. Die Möglichkeiten sind natürlich gerade bei HTML und CSS sehr begrenzt, da es sich ja nicht um Programmiersprachen sondern um eine Auszeichnungssprache (HTML) bzw. um eine Beschreibungssprache (CSS) handelt. Ein paar Tipps wie ihr euren Code optimieren und damit eure Webseiten beschleunigen könnt, kann ich euch aber trotzdem geben.
Reihenfolge von CSS und Javascript optimieren
Wenn ihr mit Page Speed eure Website überprüft, dann spuckt das Tool eventuell folgende Fehlermeldung aus:
Optimize the order of styles and scripts
Oder auf Deutsch: „Optimieren Sie die Reihenfolge der Stile und Skripte“. Mit styles (Stile) sind die CSS-Dateien gemeint und mit scripts (Skripte) Javascript-Dateien. Warum ist es nun wichtig, bei der Einbindung dieser Dateien auf die richtige Reihenfolge zu achten? Das liegt einfach daran, dass der Browser den HTML-Code erst verarbeiten kann, wenn er weiß, wie dieser formatiert wird. Deshalb ist es sinnvoll, die CSS-Dateien bereits im <head>-Teil des HTML-Dokuments zu laden (alles andere wäre im übrigen auch nicht valide). Dann weiß der Browser wie die einzelnen HTML-Befehle dargestellt werden sollen und kann sofort damit beginnen.
Außerdem ist es wichtig, die Dateien zu gruppieren. Zuerst sollten alle CSS-Befehle im Code erscheinen und danach alle Javascript-Anweisungen. Gleichartige Dateien kann der Browser nämlich gleichzeitig herunterladen. Bei verschiedenen Dateitypen muss der Browser allerdings immer warten, bis ein Typ fertig geladen ist, bevor er mit dem nächsten beginnen kann. Eine richtige Einbindung von CSS- und Javascript-Befehlen sieht demnach so aus:
<link rel="stylesheet" type="text/css" href="style1.css" />
<link rel="stylesheet" type="text/css" href="style2.css" />
<script src="javascript1.js" type="text/javascript"></script>
<script src="javascript2.js" type="text/javascript"></script>
Dateien kombinieren
Sehr oft spuckt Page Speed auch eine der beiden folgenden Meldungen aus:
– Combine external JavaScript
– Combine external CSS
Damit weist das Tool daraufhin, dass es natürlich schneller ist, wenn ein Browser nur eine Datei übertragen muss, anstatt 2 oder sogar noch mehr. Generell ist es deshalb empfehlenswert, Javascript- und CSS-Dateien soweit wie möglich zusammenzufassen.
Allerdings gibt es auch Fälle, in denen das nicht unbedingt sinnvoll ist. Wenn ich z. B. auf Seite A nur einen einzigen Javascript-Befehl brauche, auf Seite B brauche ich aber mehrere und vielleicht sogar noch eine große JavaScript-Bibliothek wie z. B. jQuery, wäre eine Zusammenlegung kontraproduktiv.
Dateien minimieren
Um den Code übersichtlich und gut lesbar zu machen, werden in Javascript- und CSS-Dateien oftmals viele Zeichenumbrüche und Kommentare verwendet. Während der Entwicklung ist das sicher auch sinnvoll. Wenn der Code allerdings fertig ist, solltet ihr diesen überflüssigen Ballast entfernen. Darauf weisen die beiden Page Speed-Meldungen „Minify CSS“ und „Minify JavaScript“ hin. Bei großen JavaScript-Bibliotheken wie dem bereits angesprochenen jQuery gibt es meistens bereits eine minimierte (minified) Version. Außerdem bietet Page Speed sowohl für JavaScript als auch für CSS eine minimierte Version an, die ihr nur abspeichern und auf den eigenen Webspace hochladen müsst.
Page Speed bietet auch an, HTML-Dateien zu minimieren. Dies kann ich allerdings nicht empfehlen, da es bei mir bei einigen HTML-Dateien vorkam, dass sie danach nicht mehr richtig dargestellt wurden.
Grafiken richtig einbinden
Im ersten Teil dieser Serie habe ich ja beschrieben, wie ihr Grafiken verkleinern könnt, um Übertragungskapazität zu sparen. Um den Seitenaufbau zu beschleunigen ist aber nicht nur eine geringe Dateigröße der Grafik wichtig, sondern auch die richtige Einbindung in den HTML-Code. So sollte im img-Tag die Breite und Höhe einer Grafik angegeben werden, also z. B. so:
<img src="test.jpg" width="300" height="200" alt="Test-Grafik" />
Wichtig dabei ist aber, dass die im img-Tag angegebenen Größen auch mit der tatsächlichen Bildgröße übereinstimmen. Ist das nicht der Fall, muss der Browser das Bild an die angegebenen Werte anpassen. Das hat 2 große Nachteile: Erstens kostet die Vergrößerung oder Verkleinerung einer Grafik sehr viele Ressourcen und verlangsamt dadurch den Seitenaufbau erheblich.
Und zweitens sind Browser dazu entwickelt worden, Webseiten dazustellen und nicht dazu, die Größe von Grafiken zu verändern. Deshalb sind die vom Browser veränderten Grafiken meistens unscharf und sehen nicht gut aus. Am einfachsten ist es, wenn ihr eure Bilder zuerst in einem Bildbearbeitungsprogramm wie paint.net oder gimp auf die richtige Größe bringt und sie erst danach in eure Webseite einbaut.
Webseiten beschleunigen
Damit ist die Artikelreihe „Webseiten beschleunigen“ nun abgeschlossen. Wer all die gegebenen Tipps umsetzt, kann die Ladezeit seiner Webseiten erheblich verkürzen. Ich hatte bei meiner Rätselseite zu Beginn der Optimierung bei Page Speed einen Wert von ungefähr 80, den ich dann durch die von mir beschriebenen Optimierungs-Tipps auf 99 verbessern konnte. Durch den Einbau von Werbebannern, auf deren Code ich leider keinen Einfluss nehmen kann, ist der Wert zwar wieder gesunken, trotzdem hat sich die Ladezeit gegenüber dem Anfang erheblich verkürzt.
Eure Optimierungstipps
Habt ihr noch Fragen dazu, wie ihr eure Webseiten beschleunigen könnt? Liefert euch Page Speed vielleicht eine Meldung, die ihr nicht versteht? Oder habt ihr noch einige Tipps, wie der Aufbau von Webseiten beschleunigt werden kann? Dann schreibt doch bitte etwas in den Kommentaren dazu.
Artikelreihe Webseiten beschleunigen:
Bei einer Domain von mir, die ein Script basierend auf Templates verwendet, haue ich gerade die in den TPL-Datein verwendeten IF-Bedingungen raus, zu denen ich die Einstellung via ACP garantiert nicht verändern werde.
Was hältst Du davon?
Das halte ich für eine gute Idee. IF-Bedingungen, von denen man genau weiß, das man sie nicht braucht, kann man natürlich entfernen.
Ich mache das z. B. oft bei der .htaccess. Wenn ich genau weiß, dass mein Webspace ein bestimmtes Modul unterstützt, brauche ich das Vorhandensein des Moduls doch nicht mehr mit einem if-Befehl abzufragen.
„Gleichartige Dateien kann der Browser nämlich gleichzeitig herunterladen.“
Ein modernern Browser lädt alle möglichen Dateien parallel herunter.
Ernsthaft? Breite und Höhe des Bildes per style-Tag angeben? CSS hat dort – meiner Meinung nach – nichts zu suchen, da dies schließlich das Layout und nicht den Content verändern sollte. Die Attribute width und height haben es schließlich nicht aus Langeweile in den HTML5-Standard geschafft (Randnotiz: in HTML5 wurden sehr viele Attribute entfernt, da diese nur das Layout beeinflussen und somit durch CSS ersetzt werden sollen)
Extra Tipp:
JavaScript wird ausgeführt, sobald es geladen wurde. Es bietet sich also an JavaScript-Dateien am Ende einer Seite einzubinden und erst auszuführen, wenn die Seite geladen wurde. Dies verändert zwar nicht wirklich die Geschwindigkeit mit der eine Seite geladen wird, sorgt jedoch dafür das die Seite früher angezeigt wird.
@Jemand
Deinen Tipp mit dem Laden im Nachhinein von Javascripts finde ich interessant. Kannst Du das näher erläutern? Bin dahingehend etwas blond! 😉
@Erik
Habe mir gerade mal den Quellcode von Deinem Blog angesehen. Warum teilst Du den CSS-Teil auf die zu ladene CSS-Datei (style.css) und den Header auf?
Header:
Macht für mich keinen Sinn, da auch CSS gecached werden kann! Auch ein Tipp?
@Jemand Es ist trotzdem besser, die Dateien zu gruppieren. Lies dir dazu mal die Hilfe von Google zur Meldung Optimize the order of styles and scripts durch.
Das mit dem style-Tag war natürlich falsch. Ich habe den Code korrigiert. Danke für den Hinweis.
Dein Extra-Tipp ist natürlich auch richtig 🙂
http://developer.yahoo.com/performance/rules.html
@chander: Dort (s.O.) wird zumindest kurz angeschnitten, warum JavaScript am Ende eingebunden werden sollte (Siehe Überschrift „Put Scripts at the Bottom“)
JavaScript wird unmittelbar ausgeführt, da es direkt den Inhalt einer Seite verändern kann (Stichwort document.write). Ich versuche immer JS-Dateien erst am Ende einer Seite einzubinden und mittels JS-Framework erst nach dem onload-Event auszuführen. Aber wie gesagt, es verändert nicht zwingend die Ladezeit, führt aber dazu, das eine Seite schneller angezeigt wird.
Beispiel:
HTML laden => JS einbinden => JS ausführen => Anzeige
HTML laden => Anzeige => JS einbinden => JS ausführen
@Erik: Das mit der direkten Ausführung von JavaScript erklärt auch, wieso es zu den größeren Ladezeiten kommt, wenn JS- und CSS-Dateien „wild durcheinander gewürfelt“ eingebunden werden.
Aber danke für den Link
Nochmals danke für den Link:
Optimize the order of styles and scripts
Meine Optimierungstipps sind:
Denke wie eine Maschine und verwende gesunden Menschenverstand.
@Chandor Das Theme hier ist ein fertiges Design. Da habe ich nur wenig daran verändert. Außerdem habe ich ja im Artikel geschrieben, dass es durchaus Sinn machen kann, nicht alle CSS-Befehle in eine Datei zu stecken.
Wenn du meine Optimierungstipps nachvollziehen willst, dann gucke dir lieber mal meine Rätselseite an. Da habe ich alles umgesetzt, was ich hier im Artikel beschrieben habe.
Für WordPress gibt es das Plugin „Supercache“. Ich bin damit relativ zufrieden, d.h.: vorher war die Seite elendig langsam, jetzt läd sie deutlich schneller. Ganz zufrieden bin ich trotzdem noch nicht und ich werde ein paar von deinen Tipps testen. Hatte eigentlich gehofft, mich nicht allzusehr mit dem Code beschäftigen zu müssen, das ist oft so langwierig.
Manche Scripte, die die Website läd sind auf einem furchtbar langsamen Server. Da macht es Sinn de lokal zu speichern. Natürlich nur wenn der eigene Server schneller ist (kleiner Scherz) Das gilt auch für Werbeeinblendungen und Ähnliches. Damit spart man auch die Zeit den anderen Server zu besuchen, was Page Speed ja auch zu Recht moniert. Auch muss man nicht unbedingt jedes Javascript auf jeder Seite laden – das wäre dann wieder ein Beispiel für eine nützliche If-Anweisung;-)
Hallo
Ich habe http://gtmetrix.com zum Testen benutzt. Dort gibt auch gute Hinweise. Prima ist auch der direkte Vergleich zwischen Page Speed und YSlow.
Zum Thema, Javascript einbinden gibt es auch noch den interessanten Beitrag: „Wieso man Javascript nicht im Head lädt (und im Footer besser auch nicht)“ unter [1]
[1] http://www.guido-muehlwitz.de/2011/01/wieso-man-javascript-nicht-im-head-laedt-und-im-footer-besser-auch-nicht/
Weiter Möglichkeiten den Code zu optimieren sind:
Die Leerzeilen entfernen (Whitspaces).
Ordnerstruktur möglichst flach halten, also möglichst keine Unterordner verwenden.
Besser a href=“pages/seite.html“
als a href=“../pages/seite.html“
Auch bei CSS gibt es viele Einsparungsmöglichkeiten.
Statt -> div id=“container“ -> div id=“co“
Ebenso: {background-color:#ffffff;} oder {background-color:#003366;}
Besser: {background-color:#fff;} oder
{background-color:#036;}.
Oft sieht man auch: {margin:0px;} oder ähnliches,
aber es reicht auch {margin:0;} -> 0px gibt es nicht.
Gerade bei größeren Seiten mit großen CSS-Dateien lässt sich damit einiges an Code einsparen.
@Hansen Danke für die Tipps. Du hast recht, die sparen einiges an Code und damit auch an Ladezeit ein.
Ich habe auch noch einige Tipps zu diesem Thema gefunden, http://page-speed.net/ vor allem der Bereich CSS und JS kombiniert laden ist interessant.