becks.de Cache Optimierungen

Im Zuge des Relaunches von becks.de haben wir uns auch Gedanken über zusätzliche Maßnahmen zur Performancesteigerung und einen schnelleren Seitenaufbau gemacht.

Ganz abgesehen von Optimierungen in den Datenbank-Abfragen, einsetzen von File- und Ram-Caches ging es auch um das setzen von Cache-Direktiven für statische Dateien sowie eine Subdomain zur Auslieferung dieser und der damit verbundenen Erhöhung der parallelen Anfragen durch den Browser.

Wir haben zur Analyse Tools wie YSlow! von Yahoo oder Page Speed von Google genommen (wir berichteten), um damit Dinge zu finden, die es zu verbessern gab.

Schritt 1: Fasse zusammen und komprimiere

Als ersten Schritt haben wurden dazu die Stylesheets und Javascript-Dateien zusammengefasst und anschließend komprimiert (Entfernen von Kommentaren, Zeilenumbrüchen, doppelten Leerzeichen etc.). Dieser Vorgang geschieht komplett automatisiert, die dadurch erzeugten Dateien werden gecached und mit einer versionierten URL ausgegeben (z.B. http://becks.de/media/201104/js/…). Diese URL ändert sich, je nachdem wann eine der eingebundenen Dateien das letzte mal verändert wurden ist, selbstständig.

Schritt 2: Komprimiere erneut. Bitte was? Ja, nochmal!

Ein weiterer Schritt war die erneute Kompression der Inhalte. Das mag jetzt erstmal verwirrend sein, hat aber seinen Grund. Zwar haben wir im vorhergehenden Schritt bereits die Dateien komprimiert, wir haben die jedoch nur von unnötigen Zeichen entfernt. In diesem Schritt jedoch komprimieren wir Dateien selbst mittels dem gzip-Verfahren. Dadurch können wir die Dateigrößen teils bis zu 80% verkleinern, was dazu führt, dass der Server (Traffic) und der Browser (Ladezeiten) weniger Daten übertragen müssen. Jedoch ist dabei zu beachten, dass nicht alle Daten komprimiert übertragen werden dürfen. PDF’s, Filme, Flashdateien – um nur mal drei zu nennen – dürfen beispielsweise nicht komprimiert werden, da die Datei ansonsten nicht mehr korrekt gelesen werden können. Unproblematisch ist das Komprimieren hingegen bei der Ausgabe von HTML, bei Bildern, Stylesheets, Javascript, XML, JSON und und und. Kurzum, bei eigentlich allen Dokumenten die als Textform übertragen werden. Diese komprimierten Daten werden vom Browser anschließend wieder dekomprimiert und verwendet.

Schritt 3: Ablauf-Datum in Zukunft und Vergangenheit

Dieser Schritt befasst sich mit den Expires- und Last-Modified-Headern von statischen Dateien. Diese werden verwendet um den Browser zu sagen, wann eine Datei verändert wurde oder abläuft. Anders formuliert, wann eine Datei vom Browser neu geladen muss. Diese Header-Angaben kann man sich zu nutze machen um den Browser somit Direktiven zu vermitteln, damit dieser statische Inhalte länger im Cache behält und die Seite beim erneuten Besuch um ein vielfachen schneller lädt. Beispielsweise wurden auf der Startseite von becks.de, mit leerem Browser-Cache, Daten in der Größe von 1.3 MB geladen. Mit gefüllten Cache, also bei erneutem Besuch, wurden nur noch Daten von 43 KB geladen. Diese 43 KB waren lediglich das HTML selbst, dem wir als Ablaufs-Datum ein Datum aus der Vergangenheit gegeben haben. Damit suggerieren wir dem Browser, dass diese Datei längst überfällig ist und er sie erneut laden soll und gehen damit auf Nummer sicher, dass alle Änderungen auf der (dynamischen) Startseite auch so beim User dargestellt werden.

Schritt 4: die Andere

Zu guter Letzt haben wir unser Ausgabe-System so angepasst, dass alle Bilder von einer Subdomain (http://static.becks.de) ausgegeben werden. Damit ermöglichen wir dem Browser, mehr parallel ablaufende Anfragen durchzuführen als er es bei nur einer Domain könnte und können somit den Seitenaufbau beim User nochmal etwas beschleunigen.

Damit dieser Artikel nicht arg so theoretisch ist, haben wir euch hier unsere .htaccess als Beispiel eingefügt.

 

 

# rewrites
# +++++++++++++++++++++++++++++++++++++++++++++++++

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{HTTP_HOST} !www.becks.de [NC]
    RewriteCond %{HTTP_HOST} !static.becks.de [NC]
    RewriteRule ^(.*)$ http://www.becks.de/$1 [L,R=301]

    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    RewriteRule ^media/([0-9]+)/(.*)$ /application/cache/$2 [L]

    RewriteRule ^sitemap_becks.xml$ /searches/sitemap [L]

    RewriteRule ^index.php/(.*)$ /$1 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

# media caching
# +++++++++++++++++++++++++++++++++++++++++++++++++

Header unset ETag
FileETag None
<FilesMatch "(?i)^.*\.(ico|flv|jpg|jpeg|png|gif|js|css)$">
    Header set Last-Modified "Fri, 11 Mar 2022 10:10:36 GMT"
    Header set Cache-Control "public, no-transform"
</FilesMatch>

# expires header
# +++++++++++++++++++++++++++++++++++++++++++++++++

<IfModule mod_expires.c>
    # turn on the module for this directory
    ExpiresActive on

    # set default - not active due caching of pages
    #ExpiresDefault "access plus 24 hours"

    # cache common graphics
    ExpiresByType image/jpg "access plus 1 months"
    ExpiresByType image/gif "access plus 1 months"
    ExpiresByType image/jpeg "access plus 1 months"
    ExpiresByType image/png "access plus 1 months"

    # cache CSS
    ExpiresByType text/css "access plus 1 months"

    # cache other filetypes
    ExpiresByType text/javascript "access plus 1 months"
    ExpiresByType application/javascript "access plus 1 months"
    ExpiresByType application/x-shockwave-flash "access plus 1 months"
</IfModule>

# compressing header
# +++++++++++++++++++++++++++++++++++++++++++++++++

<IfModule mod_deflate.c>

    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/x-javascript application/x-httpd-php application/rss+xml application/atom_xml

</IfModule>

 

Wer mehr zu diesem Thema wissen möchte dem sei die Seite askapache.com empfohlen, welche sehr ausführliche Artikel, Anleitungen und Beispiele enthält und auch uns als Hilfe diente.

TemplaVoila Spalten im Typo3 Backend anpassen

TemplaVoila! für Typo3 ist schon eine schicke Sache und wird sehr gern für unsere Kundenprojekte genutzt. Dumm jedoch, dass TV seit geraumer Zeit die Elemente mit dem Typ “Inhaltselemente auswählen” im Backend in Spalten nebeneinander und nicht untereinander darstellt. Nicht nur, dass es für uns verwirrend ist, es ist auch für die Kunden die später mal ihre Seiten selbst pflegen sollen alles andere als intuitiv.

Um dieses Problem zu beheben und euch an der Lösung teilhaben zu lassen, beschreiben wir, wir ihr das Layout selt in wenigen Schritten ändern könnt.

Schritt 1:
Als erstes öffnet bitte die index.php im Order typo3conf/ext/templavoila/mod1.

Schritt 2:
Geht dann zu Zeile 1408. Dort ersetzt ihr folgenden Inhalt:

foreach ($cells as $cell) {
	$headerCells[] = vsprintf('<td width="%4$d%%" class="bgColor6 tpm-title-cell">%3$s</td>', $cell);
	$contentCells[] = vsprintf('<td %2$s width="%4$d%%" class="tpm-content-cell">%5$s</td>', $cell);
}

$output = '
<table border="0" cellpadding="2" cellspacing="2" width="100%" class="tpm-subelement-table">
	<tr>' . (count($headerCells) ? implode('', $headerCells) : '<td>&nbsp;</td>') . '</tr>
	<tr>' . (count($contentCells) ? implode('', $contentCells) : '<td>&nbsp;</td>') . '</tr>
</table>
';

durch diesen hier:

foreach ($cells as $cell) {
	//$headerCells[] = vsprintf('<td width="%4$d%%" class="bgColor6 tpm-title-cell">%3$s</td>', $cell);
	//$contentCells[] = vsprintf('<td %2$s width="%4$d%%" class="tpm-content-cell">%5$s</td>', $cell);
	$contentCells[] = '<tr>' . vsprintf('<td width="100%%" class="bgColor6 tpm-title-cell">%3$s</td>', $cell) . '</tr>'; // header cell
	$contentCells[] = '<tr>' . vsprintf('<td %2$s width="100%%" class="tpm-content-cell">%5$s</td>', $cell) . '</tr>'; // content cell
}

//$output = '
//	<table border="0" cellpadding="2" cellspacing="2" width="100%" class="tpm-subelement-table">
//		<tr>' . (count($headerCells) ? implode('', $headerCells) : '<td>&nbsp;</td>') . '</tr>
//		<tr>' . (count($contentCells) ? implode('', $contentCells) : '<td>&nbsp;</td>') . '</tr>
//	</table>
//';

$output = '
	<table border="0" cellpadding="2" cellspacing="2" width="100%" class="tpm-subelement-table">
		' . (count($contentCells) ? implode('', $contentCells) : '<tr><td>&nbsp;</td></tr>') . '
	</table>
';

Schritt 3:
Fertig! Nun braucht ihr nur noch die entsprechende Seite im Backend anschauen und euch davon zu überzeugen :)

Personas für Firefox

persona

Ihren Browser individuell anpassen? Das hat Firefox mit “Personas” möglich gemacht. Auf der Seite getpersonas.com kann man mit der Maus über ein kleines Vorschaubild navigieren und Firefox verkleidet sich in ein komplett neues Design. Mit einem Klick auf “Wear It” ist dieses Design dauerhaft auf deinem Firefox installiert.

Eine klasse Idee und extrem einfach. Deshalb hat sich coma Gedanken gemacht, wie man ein “Persona” auf der eigenen Seite integrieren kann. Mit dieser Methode können Seiten über den definierten Anzeigebereich hinauswachsen und mit dem Design des Browsers verschmelzen, was  zu einem ganz neuen Surf-Erlebnis führen würde.
Dieser Blogeintrag hat ein “Persona” integriert, das man, wenn sie man der Maus über das obige Bild des Eintrags fährt, angezeigt bekommt.

Dazu sollte die Seite, die man dafür nutzen möchte, als “vertrauenswürdig” im Browser gekennzeichnet sein. Das muss jeder Seitenbesucher selbst einstellen.

Hier eine kurze Anleitung:

  • Navigieren Sie im Browsermenü auf “Extras” und anschließend auf “Einstellungen…”.
  • Makieren Sie den Reiter “Sicherheit” und klicken Sie auf den Button “Ausnahmen”.
  • Geben Sie hier eine Seite an, die ein Persona anbietet (hier “www.comander.de”) und bestätigen Sie dies mit dem Button “Erlauben”.
  • Klicken Sie im Anschluss auf “Schließen” und bei den Einstellungen auf “OK”.
  • Wenn Sie mit der Maus über das obige Bild fahren, sollten Sie das “Persona” sehen können.

Wer selber ein Persona auf seiner Seite nutzen möchte, schaut sich am besten diesen Artikel an: Personas Previewing Code

Viel Spaß beim Programmieren.

Die Bahn – Auch in Social Media zu spät

ueberfuellter-zugMan kann jetzt die Deutsche Bahn AG auf Facebook gefällt-mir-en. Mit einer eigentlich gut durchdachten Aktion hat die Bahn auch in knapp 34 Stunden 4.000 Fans generiert. Es gibt ein nettes Spiel mit guten und attraktiven Gewinnen, es gibt Sonderkonditionen für die Facebook-Fans, die dort exklusive Sonderrabatte in Anspruch nehmen können. Die Seite sieht auch nett aus, es gibt eine Art eigenes CI mit klarer Verbindung zu Facebook, das Teilnahmeformular zum Gewinnspiel fragt keine unnötigen Infos ab und alles in allem würde ich die ganze Aktion als gelungen bezeichnen. Weiterlesen

Weniger ist Mehr

Über Augmented Reality haben wir ja viel gehört in den (vor-)letzten Monaten und ich kann das Jahr 2020 kaum abwarten, wenn mir endlich meine Sonnenbrille die Namen, Hobbies, Lieblingsfarben und Haustiernamen meiner Mitmenschen verrät…. “Diminished Reality” jedoch ist mal was neues:

Bleibt nur abzuwarten wann ich endlich meine Sonnenbrille habe, manche Leute und Dinge einfach ausblenden zu können wäre möglicherweise keine schlechte idee…

Sensing Nature @ Mori Art Museum Tokyo

Eine wirklich sehenswerte Ausstellung, die noch bis 7. November geöffnet ist. Leider nicht in Deutschland sondern in Tokyo. Dabei geht es geht darum, wie wir unsere Natur wahrnehmen. Takashi Kuribayashi, Taro Shinoda und Tokujin Yoshioka zeigen hier in groß(artig)en Installationen wie sehr wir Menschen ein Teil der allumfassenden Natur sind.

sensingNature

Einige Eindrücke kann man sich hier holen: http://www.designboom.com/…
Aber falls man grad in der Nähe sein sollte, unbedingt ansehen!

Link zum Museum: http://www.mori.art.museum/english/contents/sensing_nature/index.html

Buzzword-Bingo: CSS3

failDie aktuelle Entwicklung ist spannend und enttäuschend zugleich. Da bahnen sich HTML5 und CSS3 langsam ihren Weg, doch wirklich nutzen können wird man beides wohl erst in vielen Jahren   so manchem Browserhersteller sei Dank.

Beispiele was mit CSS3 möglich ist, hat das smashingmagazine in einem Beitrag zusammengetragen.

Viele Beispiele sind inspirierend bis beeindruckend, jedoch sollte man immer bedenken, dass manche Browser (also eigentlich der IE) teilweise etwas andere Ansichten von der Realität haben. Ein schönes Beispiel dafür ist der komplett mit CSS3 nachgebaute Fail Whale. Je nach Browser wird man hier sogar mit flatternden Vögelchen und wogenden Wellen belohnt. Was der IE jedoch davon hält, ist im verlinkten Beitrag als Screenshot zu sehen. Schade eigentlich.

Umzug

Hemd aus, neues Hemd an, fertig.

Universal Everything bei der OFFF 2010

Ich bin ein großer Fan der Arbeiten von Universal Everything und das eigentlich schon eine ganze Weile. Matt Pyke ist der Mann hinter dem Namen, der recht abgeschieden in einer Hütte mitten im grünen Schottland arbeitet. Von dort aus kollaboriert er projektbezogen mit Kreativen rund um die Welt. Seit Jahren schafft er es den Spagat zwischen Kunst, Design und Werbung perfekt zu meistern, was sein abwechslungsreiches Showreel zeigt. Weiterlesen

Julien Vallee auf der OFFF 2010

julienvaleet_offf

Der Vortrag des Designer Julien Vallée aus Montreal war ebenfalls eines der Highlights der diesjährigen OFFF. Der noch relative junge Designer und Art Director überzeugt durch seine sehr frische und sympathische Art und durch seine Abwechslungsreichen Arbeiten. Besonders die Arbeit mit diversen Materialien und Techniken zeichnen seine Projekte aus. Weiterlesen