Ladezeiten verbessernCSS und JavaScript komprimierenKai Greinkepageload timetacho 3d © vege – Fotolia.com
Auf die Plätze …, Fertig …URL eingeben   ENTER    Warten
Was passiert in der ZeitWas passiert in der ZeitWerkzeuge für die AnalyseAnalysieren der InhalteMöglichkeiten beim CSSJavaScript KomprimierenWeitere OptimierungGZIP Komprimierung nutzenCache aktivierenZusammenfassung
Was passiert in der Zeit …HTTP/1.0 200 OKDate: Fri, 15 Jun 2009 16:04:22 GMTContent-Language: deContent-Type: text/html;charset=utf-8<HTML>…</HTML>
Browser verarbeitet Inhalte …<title> gesetzt und favicon dargestellt
Browser verarbeitet Inhalte  …Es folgen die JavaScript Dateien im Quellcode… der Browser fordert die Dateien sofort an …
Browser verarbeitet Inhalte  …Dann kommen die CSS Dateien… der Browser fordert auch diese an …
Browser verarbeitet Inhalte  …Der <body> beginnt… der Browser könnte loslegen …
Wie viel Zeit ist verstrichen?Quelle: www.webpagetest.orgDer Browser könnte loslegen,wenn schon alle Dateien da wären!
Werkzeuge für die AnalyseWas passiert in der ZeitWerkzeuge für die AnalyseAnalysieren der InhalteMöglichkeiten beim CSSJavaScript KomprimierenWeitere OptimierungGZIP Komprimierung nutzenCache aktivierenZusammenfassung
Online Toolsz. B. www.webpagetest.orgWerkzeuge für die Analyse
Werkzeuge für die AnalyseFirefox Add-onFirebug
Werkzeuge für die AnalyseFirefox Add-onYSlow
Werkzeuge für die AnalyseGoogle Page Speed Add-On für den Firefox
Werkzeuge für die AnalyseSnifferz. B. Wireshark
Analysieren der InhalteWas passiert in der ZeitWerkzeuge für die AnalyseAnalysieren der InhalteMöglichkeiten beim CSSJavaScript KomprimierenWeitere OptimierungGZIP Komprimierung nutzenCache aktivierenZusammenfassung
Wo kann man optimieren?Quelle: www.webpagetest.orgNach 6 Sekunden beginnt der Browser die Seite zu rendern (letzt CSS / JS Datei).Nach 11,8 Sekunden ist die Seite fertig geladen.Test mit einer 1.5 Mbit/s aDSL Leitung in den USA … Erster Aufruf
Analysieren der InhalteBrowser … wartetHTMLCSSJavaScriptBrowser … rendertBilder (in- und extern)Audio / VideoRSS  (fremde Inhalte)<imgsrc=“images/bild.jpg“ width=“100“  height=“
Möglichkeiten beim CSSWas passiert in der ZeitWerkzeuge für die AnalyseAnalysieren der InhalteMöglichkeiten beim CSSJavaScript KomprimierenWeitere OptimierungGZIP Komprimierung nutzenCache aktivierenZusammenfassung
Beispiel für die CSS Komprimierung.button {   border-left-width: 6px;   border-left-style: solid;   border-left-color: rgb(153,153,153);   border-bottom-width: 2px;   border-bottom-style: solid;   border-bottom-color: rgb(153,153,153);}216
Verkürzte Schreibweise nutzen.button {   border-left-width: 6px;   border-left-style: solid;   border-left-color: rgb(153,153,153);   border-bottom-width: 2px;   border-bottom-style: solid;   border-bottom-color: rgb(153,153,153);}216106.button {    border-left: 6px solid rgb(153,153,153);    border-bottom: 2px solid rgb(153,153,153);}
HEX- statt RGB-Notation.button {    border-left: 6px solid rgb(153,153,153);    border-bottom: 2px solid rgb(153,153,153);}10688.button {    border-left: 6px solid #999999;    border-bottom: 2px solid #999999;}
Verkürzte Schreibweise (Farben).button {    border-left: 6px solid #999999;    border-bottom: 2px solid #999999;}8882.button {    border-left: 6px solid #999;    border-bottom: 2px solid #999;}
Zeilenumbrüche & Leerzeichen.button {    border-left: 6px solid #999;    border-bottom: 2px solid #999;}8266.button{border-left: 6px solid #999;border-bottom: 2px solid #999}
Vorher   Nachher.button {   border-left-width: 6px;   border-left-style: solid;   border-left-color: rgb(153,153,153);   border-bottom-width: 2px;   border-bottom-style: solid;   border-bottom-color: rgb(153,153,153);}21666.button{border-left: 6px solid #999;border-bottom: 2px solid #999}
Online Tools (compressor.ebiene.de)177.button{border-left-width:6px;border-left-style: solid;border-left-color:rgb(153,153,153);border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:rgb(153,153,153);}
YUI Compressor153.button{border-left-width:6px;border-left-style:solid;border-left-color:#999;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:#999;}
Free CSS Toolbox152.button{border-bottom-color:#999;border-bottom-style:solid;border-bottom-width:2px;border-left-color:#999;border-left-style:solid;border-left-width:6px}
Pingates CSS Compressor (tools.pingates.com)66.button{border-left:2px solid #999;border-bottom:6px solid #999}
JavaScript komprimierenWas passiert in der ZeitWerkzeuge für die AnalyseAnalysieren der InhalteMöglichkeiten beim CSSJavaScript KomprimierenWeitere OptimierungGZIP Komprimierung nutzenCache aktivierenZusammenfassung
Das JavaScript Framework „mootools“ hat ca. 72 KByteKann man „mootools.js“ komprimieren?Werden die „mootools.js“ überhaupt benötigt?
mootools komprimieren?179 KByte
mootools komprimieren…179 kByte      JavaScript Minifier      72 kByte nachher
mootools komprimieren…179 kByte      YUI Compressor      63 kByte nachher
mootools  - YUI statt JSMin63 kByte  72 kByte
mootools deaktivierenIn der index.php des Templates direkt nach <head>
Ladezeit ohne caption.js und mootools.js Die Seite wird nach 1.8 Sekunden gerendert und ist nach 5 Sekunden fertig geladen.
Nochmals zumVergleichmit und ohne mootools
Weitere OptimierungenWas passiert in der ZeitWerkzeuge für die AnalyseAnalysieren der InhalteMöglichkeiten beim CSSJavaScript KomprimierenWeitere OptimierungGZIP Komprimierung nutzenCache aktivierenZusammenfassung
Korrekte Reihenfolge von CSS und JavaScript Dateien
Deklaration von JavaScript FunktionenDer Aufruf der Funktion kann vor oder nach der Deklaration der Funktion sein.Probleme (z. B. mit Simple Mooticker) wenn mootools erst zum Schluss geladen werden.
Probleme beim sofortigen ausführen von SkriptenWerden Funktionen  nicht über Ereignisse, sondern direkt im Quelltext aufgerufen, so muss die Funktion vorher deklariert worden sein.Daher werden manche Erweiterungen laufen und manche nicht.Testen, testen, testen …
CSS- und JavaScript-Dateien zusammenführen …Alle JavaScripts in eine Datei (1 statt 2 Requests)Alle CSS-Formatierungen in eine Datei(1 statt 5 Requests)Reduziert die Anforderungen von 7 auf 2
Der Browser hat Schuld …Anzahl gleichzeitiger Verbindungen früherIE 7, Firefox 2 (zwei)Anzahl gleichzeitiger Verbindungen heuteIE 8, Firefox 3 (sechs) Safari, Opera (vier)
Inhalte auf mehrere Server verteilenHTTP 1.1 Spezifikation: Max. zwei gleichzeitige Verbindung zum ServerFirefox 2			  zweiFirefox 3			  sechsOpera 9.26:		  vierOpera 10.50:		  16 … !!!Safari 3 Max/Windows:	  vierIE 7:				  zwei IE 8:			  sechs / zweiServer1Server2Browser
Inhalte auf mehrere Server verteilenHauptinhalte:		www.joomla-fulda.deBilder			img.joomla-fulda.de
Brandbreite hilft …Vernetzung © Mardre - Fotolia.comCell phone on white © Mellow - Fotolia.com
?Gedanken zum HostingDer Server des Billighosters ist für1,45 € im Monat genau so schnell wie der Server des Premium Hosters für 79,00 € im Monat
GZIP Komprimierung nutzenWas passiert in der ZeitWerkzeuge für die AnalyseAnalysieren der InhalteMöglichkeiten beim CSSJavaScript KomprimierenWeitere OptimierungGZIP Komprimierung nutzenCache aktivierenZusammenfassung
mod_deflate ist i.d.R. aktiv
gzip für Joomla! aktivieren
Kommunikation ohne GZIP
Kommunikation mit GZIP
Serverseitige Komprimierung (gzip komprimiert php-Dateien)index.php ohne gzip = 23 kByte.index.php mit gzip = 8 kByte.
css als php einbindentemplate.css ohne gzip = 12,7 kByte
css als php einbindentemplate.css              template.php
css als php einbinden
css als php einbindentemplate.css ohne gzip = 12,7 kBytetemplate.php mit gzip = 3,4 kByte
mootools als php einbinden
mootools als php einbindenDie index.php des Templates entsprechend anpassen
mootools.jsohne gzip = 72 kBytemootools.js.php mit gzip = 20 kBytemootools als php einbinden
Cache aktivierenWas passiert in der ZeitWerkzeuge für die AnalyseAnalysieren der InhalteMöglichkeiten beim CSSJavaScript KomprimierenWeitere OptimierungGZIP Komprimierung nutzenCache aktivierenZusammenfassung
Schalter im Backend
ETag (entity tag)Server generiert Etag …Inode   +   Filesize   +   Date Last Modification
ETag (entity tag)Erste Anfrage …
ETag (entity tag)Erneute Anfrage …
ETag (entity tag)Prüfen, ob Etag gleich …
ETag (entity tag)304 Not Modified
Alle Techniken kombiniert
CSS – Alle Zusammen … (1/2)css_together.php
CSS – Alle Zusammen … (2/2)css_together.php
Index.php des Templatesmootools.js und caption.js deaktiviertStylesheets rausgeschmissenjs_together.php und css_together.php übernehmen
Ergebnis – Erste Anfrage
Ergebnis – Zweite Anfrage
Langsame Verbindung (56k)Ab 28 Sekunden rendern … Nach 49 Sek komplettAb 11 Sekunden rendern … Nach 22 Sek komplett
Wiederholter Aufruf (56k)Ab 9 Sekunden rendern … Nach 25 Sek komplettAb 1,4 Sekunden rendern … Nach 4 Sek komplett
.htaccess nutzenPrima Ideen auch mit Hilfe der .htaccess
ZusammenfassungWas passiert in der ZeitWerkzeuge für die AnalyseAnalysieren der InhalteMöglichkeiten beim CSSJavaScript KomprimierenWeitere OptimierungGZIP Komprimierung nutzenCache aktivierenZusammenfassung
Zusammenfassung (1/3)Requests minimierenAlle Dateien vom selben Server _oder_Dateien auf max. 2-4 Server verteilenFremde Inhalte erhöhen Zeit um eine weitere Sekunde, können Anz. Download aber erhöhenAnzahl der Serverzugriffe minimierenAlle CSS Dateien in eine Datei zusammenfassenAlle JS Dateien in eine Datei zusammenfassen
Zusammenfassung (2/3)Dateigröße reduzierenCode optimierenCSS-Farben: z. B. Hex Schreibweise statt RGBJavaScript: z. B. Kommentare entfernenCSS und JavaScript auslagernWir nur einmal geladenGZIP nutzenPHP-Dateien meist kein ProblemCSS, JavaScripts als php
Zusammenfassung (3/3)Rendern optimierenErneutes „Rendern“ vermeidenHöhe und Breite von Bildern und Tabellen angeben.CSS Dateien in den <head>„Rendern“ früher beginnenJavaScripts am Ende (vor dem </body>) einbinden
Vielen DankPräsentation aufwebdevfulda.deBeitrag aufjoomla-fulda.deViel Spaß beim Testen der MöglichkeitenKai Greinke

Ladezeiten Verbessern - Css Und JavaScript Komprimieren