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 :)

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…

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.

FMX 2010 – 10 / GUI User Interface

logo

10 / GUI – User Interface von Clayton Miller

Bei der Flashconference 2010 hat Clayton Miller seine bemerkenswerte Vision eines neuartigen Bedienkonzeptes für die Nutzung von Desktop PC´s vorgestellt. Das 10/GUI funktioniert durch Multitouchinteraktion mit beiden Händen und bis zu zehn Fingern. So ist es dem Benutzer möglich mehrere interaktionen gleichzeitig auszuführen.

10 / GUI VIDEO

ERGONOMIE

Bei Touchscreens ist – wie der Name schon sagt – der Screen und das Touchpad zusammengefasst. Das ist schön und gut, aber für längere Arbeiten nicht geeignet, da entweder der Nacken oder der Touch-Arm belastet wird.

Snap4

Das 10/GUI ist vom Screen getrennt und ermöglicht dadurch dem User die Hände bequem auf dem Tisch in einer Ruhehaltung abzulegen. So wie wir es bei der Mouse kennen.

Snap7Snap3

SOFTWARE

Da es in den gängigen Betriebssystemen noch schwierig ist mit einem Touchpad zu navigieren hat sich Miller auch Gedanken über eine benutzerfreundliche Benutzeroberfläche gemacht die auf das 10/GUI abgestimmt ist. “Con10uum” genannt. Dabei gestaltet er das Windowverhalten von Desktopapplikationen um.

Fenster werden nicht mehr unordentlich übereinander, sondern horizontal nebeneinander angeordnet. Die fenster nehmen sich Kontextabhängig ihren Raum und verdrängen andere Fenster nach links und rechts.

Snap10Snap11

Die Fenster lassen sich dann mit drei Fingern verschieben und skalieren. Mit vier Fingern kann man durch alle Anwendungen scrollen und aus der Reihe der Anwendungen herauszoomen und hineinzoomen. Natürlich ist es dann auch möglich mit beiden händen gleichzeitig zu arbeiten. Also z.B. mit der einen Hand aus allen Anwendungen rauszoomen und gleichzeitig Fenster verschieben oder skalieren.

Zoomt man aus den Anwendungen komplett heraus, bekommt man eine Thumbnailansicht aller Anwendungen.

Snap14

Für den Aufruf des Startmenüs und des Menüs der aktiven Anwendung dienen zwei Tasten, die seitlich neben dem Touchpad angebracht sind.

Snap5

Snap12Snap13

Das Konzept ist noch nicht ganz ausgereift und fraglich ob es in der Form je auf den Markt kommt.

Ich bin ja mal gespannt :)

Quellen:

http://www.10gui.com

FMX 2010 – Social Games in Japan
Fast jeder hat sicher wenigstens einmal ein Social Game gespielt (z.B. Farmville), wohl auf Facebook. In Japan, wo salonfähiges Nerdtum nicht nur eine Modeerscheinung ist, sondern Alltag, sind diese Games extrem beliebt.
items
Japan ist schon immer die vorderste Front in Sachen Spieleentwicklung und -innovation. Letztes Jahr schaffte es eine handvoll Firmen, in den dort geradezu explodierenden mobilen Social Networks, je über 100 Mio USD an Einkünften zu erwirtschaften – mit dem Verkauf von virtuellen Gegenständen in Social Games.

Am Freitag auf der fmx berichtete David Collier, CEO von Pikkle, einem Social Game Publisher in Tokio aus der Welt aktueller populärer Spiele.
FMX 2010 – THE GAP – eine interaktive Abenteuerinstallation

florian_mühleggstefan_kolbe

Florian Mühlegg und Stefan Kolbe, zwei Studenten Interaktiver Medien der Filmakademie Baden-Württemberg haben diese Installation auf der FMX 2010 in Stuttgart vorgestellt:

“THE GAP ist ein Augmented Virtuality Adventure Game. In einer interaktiven Rauminszenierung verbindet das Spiel real erfahrbare Objekte mit einem virtuellen Raumerlebnis.
Dabei schlüpft der Spieler in die Rolle eines Forschers, der auf der Suche nach dem magischen Schatz der Xiong-Indianer ein gefährliches Hindernis überwinden muss.”

Das Hindernis, von dem die Rede ist, ist eine 5m lange Hängebrücke, über die es zu balancieren gilt.

hängebrücke

Klingt einfach, ist es aber nicht!

Der Spieler trägt eine VR-Brille mit einer Webcam, welche das Sichtfleld des Spielers erfasst und in den Computer einspeist. Dieser ersetzt dann das grün in der Greenbox durch ein 3D-Szenario. Alles, was nicht grün ist, wird nicht ersetzt. Die Position und Blickrichtung des Spielers wird anhand eines Helms mit Infrarot-LEDs und einer Wii-Sensorik erfasst und damit das 3D-Szenario gesteuert.

action

Somit kann sich der Spieler in dem 3D-Szenario umschauen und seine Sinne werden genial manipuliert.

“Realraum und virtuelle Elemente verschmelzen zu einer “Realität” und schaffen dadurch ein ganz neues Raumempfinden, das auch auf der auditiven Ebene durch ein interaktives Sounddesign spürbar wird – eine neue, immersive Welt entsteht.

Mit einem Head-Mounted-Display, in dem Livebild mit Echtzeit-3D-Bildern kombiniert werden, wird das Abenteuer hautnah erlebbar. Durch das Display kann man die realen Objekte und die virtuelle Umgebung als Einheit wahrnehmen.”

Ich bekam bei dem Anblick jedenfalls ganz schön Höhenangst.

schlucht

FMX 2010 – Verschiedenes

Letzte Woche war es wieder soweit. Die FMX 2010 rief und wir erlebten zwei infomationsgefüllte Tage in Stuttgart.

Zuerst gab es einen Vortrag zu Heavy Rain. “How art was used to Create a Movie Experience” hieß es dort in einem Vortrag von Chrisoph Brusseaux (Art & Graphic Director, Quantic Dream). Hier ging es vor allem um den benötigten Aufwand um ein atmosphärisches Spielerlebnis zu erschaffen. Angefangen bei ausgedehnter Recherche über die Erstellung der “visual grammer” und “moodboards” zu einzelnen Szenen bis hin zum fertigen Produkt.

Todd Masters von MasterFX zeigte uns anschließend den Fortschritt von MakeupFX im Filmgeschäft. Hierbei fiel vorallem der nachwievor häufige Gebrauch traditioneller Maskenbildnerei auf, der Dank neuer Materialien und Einfallsreichtum nicht komplett durch digitale Effekte vertrieben wird. In einer Reise durch die Filmgeschichte durften wir Zeuge der Entwicklung der Effektschmiede werden. Ein Bild kann davon kann man sich am Besten auf der MasterFX Webseite machen.

Florian Feilers Vortrag “iPhone Apps with Flash CS5″ wurde kurzerhand in “Mobile Apps with Flash CS5″ umgetauft. Auf der einen Seite beschließt zwar Flash von ihren Geräten zu verbannen, jedoch geschieht im Android Lager eher gegenteiliges. Zwar wird der iPhone Support Seitens Adobe eingestellt jedoch wird vermutlich ein Flash Packer für CS5 nachgereicht mit dem es möglich wird von Flash aus Android Apps zu exportieren. (Anmeldung zum Beta Test ist derzeit hier möglich: AndroidAir, AndroidFlash).

Raúl Escolano von Nikodemo zeigte dann noch den Produktionsablauf von Almorria, einer in Flash erstellten Trickfilmserie. Hier zahlt sich die Skalierbarkeit der Flashgrafiken aus die einem Export nach 1080p mit nichts im Wege stehen.

Nebenbei gab es noch Screenings wie zum Beispiel “The Animation Show of Shows” der acmefilmworks und die Vorführung der Gewinner der Siggraph 2009.

Webseiten Performance …

Google ist nicht mehr wegzudenken. Schon gar nicht für Webseitenbetreiber und Agenturen. Das Ranking ist entscheidend für die Besucherzahl einer Seite.

Vor einigen Wochen hat Google die schockierende Nachricht publiziert, dass Webseitengeschwindigkeit einen Einfluss auf die Position der Ergebnisse nehmen soll.

Vorerst ist der Parameter für die Geschwindigkeit nicht wesentlich relevant, da dieser bisher nur auf google.com und auch nur für weniger als 1% der Suchabfragen angewandt wird. Doch hat Google auch angekündigt den Parameter in allen Google-Suchmaschinen anzuwenden. Daher bietet die beliebteste Suchmaschine Webseitenentwicklern an, Tools zuverwenden, die Seiten auf ihre Geschwindigkeit testen und zur Optimierung verhelfen sollen.
Weiterlesen

123