ColdFusion: Ladezeitoptimierung mit Combine.cfc

ColdFusion No Comments »

Viele moderne Websites nutzen aufwendige AJAX Features. Dadurch müssen teilweise mehrere Bibliotheken wie Scriptacluos, Prototype oder jQuery, so wie diverse Plugins und eigene Scripte geladen werden. Auch wenn die einzelnen Dateien nicht sonderlich groß sind, verursachen sie viele einzelne HTTP-Requests.

Hier kommt die Combine.cfc ins Spiel. Das Paket besteht aus einer combine.cfm, combine.cfc so wie verschiedenenen Java Archiven und Klassen. Die Archive yuicompressor-2.4.2.jar und combine.jar müssen, ebenso wie der Inhalt des Ordners com, zum ColdFusion Classpath hinzugefügt werden.

Nun kann man statt die Dateien einzeln zu verlinken:

<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="js/jquery.easing.1.2.js"></script>
<script type="text/javascript" src="js/jquery.corner.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.7.2.custom.min.js"></script>
<script type="text/javascript" src="js/jquery.dimensions.min.js"></script>
<script type="text/javascript" src="js/jquery.tooltip.min.js"></script>
<script type="text/javascript" src="js/jquery.dltoggle.min.js"></script>
<script type="text/javascript" src="js/funny-stuff.js"></script>

Alle Dateien über einen Link laden:

<script type="text/javascript" src="combine.cfm?files=js/jquery-1.3.2.min.js,js/jquery.easing.1.2.js,js/jquery.corner.js,js/jquery-ui-1.7.2.custom.min.js,js/jquery.dimensions.min.js,js/jquery.tooltip.min.js,js/jquery.dltoggle.min.js,js/funny-stuff.js"></script>

Combine fügt nun die einzelnen Dateien zu einer Datei zusammen, so das effektiv nur eine Datei geladen werden muss, welche zusätzlich noch komprimiert wird. Combine entfernt unter anderem alle Leerräume, wie man es z.B. von der jQuery-minified her kennt. Keine Leerzeichen, keine Leerzeilen.

Der große Vorteil liegt darin, dass die Originaldateien nicht angerührt werden. So kann man einzelne Dateien immer noch problemlos ändern oder updaten.

Das ganze funktioniert auch mit CSS Dateien!

Apache: Ladezeit durch GZip optimieren

Apache No Comments »

Die Ladezeiten einer Website lassen sich mit dem Apache enorm verkürzen. Hierzu wird das mod_deflate benötigt, welches eigentlich bei jeder Linux Distro, OS X und Windows installiert sein sollte.

Um mod_deflate nutzen zu können sind zwei Schritte notwendig.

Schritt 1
Das Modul laden. Hierfür öffnen wir die httpd.conf bzw. apache2.conf (je nach OS) und suchen nach folgender Zeile:

#LoadModule deflate_module modules/mod_deflate.so

Hier entfernen wird das #, speichern die Datei und starten den Apache neu. Bevor wir die Datei schliessen, suchen wir noch nach der Zeile:

Load config files from the config directory

Hier steht wo sich zusätzliche Konfigurationsdateien befinden müssen, damit sie geladen werden. Auf den meisten Linux Systemen sollte der Pfad /etc/httpd/conf.d lauten.

Schritt 2
Wir wechseln in den Ordner /etc/httpd/conf.d und erstellen eine leere Textdatei, die wir deflate.conf nennen. Diese füllen wir mit folgenden Anweisungen:

SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|iso|tar|bz2|sit|rar|png|jpg|gif|jpeg|flv|swf)$ no-gzip dont-vary
DeflateCompressionLevel 9
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0

Erklärung:
SetOutputFilter DEFLATE
Aktiviert das Modul

SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|iso|tar|bz2|sit|rar|png|jpg|gif|jpeg|flv|swf)$ no-gzip dont-vary
Setzt einen Filter, welche Dateitypen NICHT komprimiert werden sollen. Dazu gehören Binärdaten, Bilder (sind schon komprimiert), komprimierte Archive (zip, rar etc.), Flash und Flashvideo. Alles andere wird komprimiert. (Ihr könnt diese natürlich euren Bedürnissen entsprechend anpassen.)

DeflateCompressionLevel 9
Setzt die Kompressionsstärke. 9 ist die höchste Stufe, hier werden je nach Datei bis zu 75% eingespart!

BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0

Hier werden einige Browser ausgeklammert, von denen bekannt ist, das sie mit GZip nicht umgehen können. Diese bekommen den Inhalt unkomprimiert.

Und hier könnt ihr testen, ob die Komprimierung funktioniert und wie stark das Datenvolumen reduziert wird.

MySQL: Rettet MySQL!

No Comments »

Mehr braucht man dazu eigentlich nicht sagen!

HTML5: Erste Gehversuche

XHTML / CSS No Comments »

Die Fusionality Website wurde heute erfolgreich auf HTML5 umgestellt. An sich kein Hexenwerk, denn im Prinzip ist jedes valide HTML 4.01 oder XHTML 1.0 Dokument auch valides HTML5. Es gab allerdings zwei Überraschungen.

Die erste Überraschung war leider negativ, denn in HTML5 gibt es kein profile-Attribut im head-Element. Dadurch lassen sich microformats wie die hCard derzeit nicht sinnvoll nutzen. Für die Nutzung von semantischen Erweiterungen empfehle ich sonst das profile-Attribut http://purl.org/uF/2008/03/ , da dieses Profil sowohl die microformats als auch die XHMTL Friend Network Attribute unterstützt.

Die positive Überraschung war, dass der W3C Validator bei der Verwendung von WAI-ARIA Landmark Roles nicht mehr meckert.

Nach dem also das bisherige XHTML 1.0 Dokument erfolgreich mit neuem Doctype validiert wurde, begann ich einige DIVs durch neue HTML5 Elemente auszutauschen. Das Logo und die Navigation befinden sich nun in einem header-Element, die Navigations-DIV wurde durch ein nav-Element ersetzt. Der Inhalt wurde in ein section-Element gepackt und dort weiter unterteilt. Der Hauptinhalt befindet sich in einem article-Element, die Bilder in einem aside-Element und der Footer ist nun auch wirklich ein footer-Element.

Zum Abschluss wurden noch entsprechende WAI-ARIA Rollen vergeben.

Mal sehen was 2010 auf uns Webworker zukommen wird. In diesem Sinne wünsche ich allen Lesern ein erfolgreiches neues Jahr!

MySQL: Table is marked as crashed and should be repaired

MySQL No Comments »

Eigentlich wollte ich heute nur 1 Feld zu einer MySQL Tabelle hinzufügen. Also wie immer phpMyAdmin aufgerufen und die entsprechende Tabelle ausgewählt.
Und BANG! Table xyz is marked as crashed and should be repaired

Im phpMyAdmin unter Operationen nachgesehen, doch die dort üblicherweise Verfügbaren Hilfsmittel standen nicht zur Auswahl. Was tun also, wenn's brennt?

Man wendet sich an Ruth, den Ruth darf alles ;)

Terminal auf, SSH Verbindung zum Server und los geht's:

[root@host ~]# mysqlcheck -A  -r -uBenutzer -pPasswort

Das -A sorgt dafür dass alle Tabellen überprüft werden, das -r sorgt dafür dass versucht wird die Tabellen zu reparieren.

Sollte das nicht ausreichen, sollte man die MySQL Dokumentation konsultieren. Hier findet man ein weiteres Tool "myisamchk".

Powered by Mango Blog. ©2010 Patrick Heppler. Design inspired by the GlossyBlue Theme © N.Design Studio.
RSS Feeds