<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>50North</title>
	<atom:link href="http://50north.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://50north.de</link>
	<description>Klingt ehrlich, ist aber so!</description>
	<lastBuildDate>Mon, 23 Jan 2012 20:59:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<atom:link rel='hub' href='http://50north.de/?pushpress=hub'/>
		<item>
		<title>Hinten anstellen &#8211; xtcModified on&#160;steroids</title>
		<link>http://50north.de/hinten-anstellen-xtcmodified-on-steroids/</link>
		<comments>http://50north.de/hinten-anstellen-xtcmodified-on-steroids/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 20:58:30 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[E-Commerce]]></category>
		<category><![CDATA[It's all about speed!]]></category>

		<guid isPermaLink="false">http://50north.de/?p=582</guid>
		<description><![CDATA[Man kennt das aus dem Supermarkt: An der Kasse mal eben vordr&#228;ngeln, um dann den Betrieb komplett aufzuhalten, weil man 14,83 Euro passend abgez&#228;hlt in aller Seelenruhe aus dem Geldbeutel kramt. Gibt's bei der Geschwindigkeitsoptimierung im Web auch. Hei&#223;t da aber nicht Oma Meier sondern Javascript. ]]></description>
			<content:encoded><![CDATA[<p>Man kennt das aus dem Supermarkt: An der Kasse mal eben vordr&#228;ngeln, um dann den Betrieb komplett aufzuhalten, weil man 14,83 Euro passend abgez&#228;hlt in aller Seelenruhe aus dem Geldbeutel kramt. Gerne noch gepaart mit: „Ich hou mei Brilln daham vergessn, guggn sa amol, sinn des f&#252;nf odder zwaa Zent?”. Gibt&#8217;s bei der Geschwindigkeitsoptimierung im Web auch. Hei&#223;t da aber nicht Oma Meier sondern Javascript. </p>
<h2>Javascript sp&#228;ter parsen</h2>
<blockquote><p>Parsen Sie Javascript sp&#228;ter, um die Blockierung der Seitendarstellung zu reduzieren.</p></blockquote>
<p>Weil Javascript Inhalt und DOM der Seite ver&#228;ndern kann warten die Browser, sobald sie auf einen Script-Tag sto&#223;en, bis das Javascript geladen, geparsed und gerendert ist, bevor sie mit dem eigentlichen Rendering der Seite fortfahren. Durch das Mischen von Javascript- und CSS-Tags kann das Laden noch einmal zus&#228;tzlich verlangsamt werden, Page Speed listet das unter &#8216;Reihenfolge der Formate und Skripts optimieren&#8217;. Eine Grafik, wie diese Verz&#246;gerung eben durch das Stoppen des eigentlichen Rendervorgangs aussehen kann, findet sich <a href="http://code.google.com/speed/page-speed/docs/rtt.html#PutStylesBeforeScripts">bei Google</a>.</p>
<p>Heute geht es also darum, die Reihenfolge von CSS und Javascript im Hinblick auf Ladezeiten zu optimieren. Dabei gilt die Faustregel, CSS gleich zu Beginn und Javascript ganz am Ende zu laden. Allerdings muss man beachten, dass es F&#228;lle gibt, bei denen man von dieser Regel abweichen muss, weil man Javascript-Funktionen schon vorher ben&#246;tigt. Hat man beispielsweise einen SSL-Proxy und muss <a href="http://www.searchmasters.co.nz/articles/103/google-analytics-tracking-between-domains/">Cross-Domain-Tracking mittels Google Analytics</a> implementieren, ben&#246;tigt man das Analytics-Javascript vorher und kann es eben nicht ganz ans Ende verfrachten.<br />
Auch die eigentliche Reihenfolge der Scripte ist wichtig, erfordern manche Funktionen bestimmte Bibliotheken, z.B. jQuery, muss dieses nat&#252;rlich vorher geladen werden. Und vertauscht man die Reihenfolge bei CSS-Dateien k&#246;nnte es aufgrund der Kaskade zu unerwarteten Darstellungsfehlern kommen.</p>
<p>Im Sourcecode von xtcModified finden sich Hinweise, dass man dieses Thema auch schon mal angegangen ist, aufgrund von Fehlern bei jQuery wurde das aber wieder r&#252;ckg&#228;ngig gemacht. Aktuell konnten ich bei Tests im Demoshop keine derartigen Probleme feststellen. In xtcModified findet sich au&#223;erdem noch sehr viel Javascript-Code, der nicht &#252;ber eine externe Datei geladen wird. Hier aufzur&#228;umen und den Code, der zum Teil noch aus dem originalen xt:Commerce stammt, gegen moderne, auf jQuery basierende Funktionen zu tauschen, w&#252;rde eine eigene Serie gut f&#252;llen.</p>
<p>Daher beschr&#228;nke ich mich hier mal auf das naheliegendste: In <tt>includes/header.php</tt> alles von Zeile 75 bis Zeile 278 in die Zwischenablage kopieren und dann l&#246;schen, ebenso Zeile 279 l&#246;schen. In <tt>includes/application_bottom.php</tt> die Zeilen 42 bis 46 markieren:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//BOF - DokuMan - 2010-02-25 - Enhance page loading time by putting CSS on TOP of page and JavaScript on BOTTOM of page</span>
<span style="color: #666666; font-style: italic;">//BOF - web28 - 2010-07-14 -  change to TOP of page again because jquery view problems</span>
<span style="color: #666666; font-style: italic;">//require('templates/'.CURRENT_TEMPLATE.'/javascript/general.js.php');</span>
<span style="color: #666666; font-style: italic;">//EOF - web28 - 2010-07-14 -  change to TOP of page again because jquery view problems</span>
<span style="color: #666666; font-style: italic;">//EOF - DokuMan - 2010-02-25 - Enhance page loading time by putting CSS on TOP of page and JavaScript on BOTTOM of page</span></pre></div></div>

<p>und durch</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>ersetzen. Anschlie&#223;end den Inhalt der Zwischenablage einf&#252;gen.</p>
<p>Betrachtet man die reinen Zahlen k&#246;nnte man meinen, diese &#196;nderung bringt uns prim&#228;r ein gutes Gef&#252;hl.</p>
<div id="attachment_585" class="wp-caption alignnone" style="width: 310px"><a href="http://50north.de/wp-content/uploads/2012/01/Yslow-mit-Javascript-am-Seitenende.jpg"><img src="http://50north.de/wp-content/uploads/2012/01/Yslow-mit-Javascript-am-Seitenende-300x233.jpg" alt="" title="Yslow-mit-Javascript-am-Seitenende" width="300" height="233" class="size-medium wp-image-585" /></a><p class="wp-caption-text">YSlow mit Javascript am Seitenende</p></div>
<div id="attachment_584" class="wp-caption alignnone" style="width: 310px"><a href="http://50north.de/wp-content/uploads/2012/01/Page-Speed-mit-Javascript-am-Seitenende.jpg"><img src="http://50north.de/wp-content/uploads/2012/01/Page-Speed-mit-Javascript-am-Seitenende-300x233.jpg" alt="" title="Page-Speed-mit-Javascript-am-Seitenende" width="300" height="233" class="size-medium wp-image-584" /></a><p class="wp-caption-text">Page Speed mit Javascript am Seitenende</p></div>
<p>Der eigentliche Erfolg ist hier aber eher offensichtlich, wenn man sich das Rendering ansieht. Mit <a href="http://www.webpagetest.org/result/120112_T0_2V9EJ/1/breakdown/">Javascript im oberen Bereich der Seite</a> wird der Browser sehr fr&#252;h blockiert und beginnt erst nach ca 2,5 Sekunden mit dem Rendern. Hingegen beginnt dieser Prozess <a href="http://www.webpagetest.org/result/120123_F5_2ZBQR/1/breakdown/">nach der &#196;nderung</a> gut eine Sekunde fr&#252;her. </p>
<h4>Weitere Artikel der Serie</h4>
<ol>
<li><a href="http://50north.de/hoeher-schneller-weiter-xtcmodified-on-steroids/">H&#246;her, schneller, weiter</a></li>
<li><a href="http://50north.de/verfallsdatum-ueberschritten-xtcmodified-on-steroids/">Verfallsdatum &#252;berschritten</a></li>
<li><a href="http://50north.de/druck-machen-xtcmodified-on-steroids/">Druck machen – xtcModified on steroids</a></li>
</ol>
<hr/>
Disclaimer: Ich bin nach wie vor der Meinung, dass viele der Einstellungen in der Serverkonfiguration besser aufgehoben sind als in der .htaccess-Datei, da aber sicherlich viele das ganze auch auf Shared Hosting umsetzen m&#246;chten werden alle &#196;nderungen, die auch &#252;ber die .htaccess durchgef&#252;hrt werden k&#246;nnen, im Rahmen dieser Artikelreihe dort vorgenommen.</p>
]]></content:encoded>
			<wfw:commentRss>http://50north.de/hinten-anstellen-xtcmodified-on-steroids/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Druck machen &#8211; xtcModified on&#160;steroids</title>
		<link>http://50north.de/druck-machen-xtcmodified-on-steroids/</link>
		<comments>http://50north.de/druck-machen-xtcmodified-on-steroids/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 05:30:50 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[E-Commerce]]></category>
		<category><![CDATA[It's all about speed!]]></category>

		<guid isPermaLink="false">http://50north.de/?p=554</guid>
		<description><![CDATA[Diesmal wollen wir im Rahmen der Artikelserie zur Geschwindigkeitsoptimierung mal ein bisschen Druck aus&#252;ben, denn die Steigerung von 36 auf 60 Punkten ist bestenfalls ein Teilerfolg.
]]></description>
			<content:encoded><![CDATA[<p>Diesmal wollen wir im Rahmen der Artikelserie zur Geschwindigkeitsoptimierung mal ein bisschen Druck aus&#252;ben, denn die Steigerung von 36 auf 60 Punkten ist bestenfalls ein Teilerfolg.</p>
<h2>Komprimierung aktivieren</h2>
<blockquote><p>Die Komprimierung der folgenden Ressourcen mit gzip k&#246;nnte ihre &#220;bertragungsgr&#246;&#223;e um 90.0 KiB verringern (Reduzierung um 70%).</p></blockquote>
<p>70% der zu &#252;bertragenden, komprimmierungsf&#228;higen Daten k&#246;nnte man sich also sparen, wenn man diese vor der Auslieferung zippt. Das Entpacken findet dann beim Empf&#228;nger durch den Browser transparent statt. Jeder moderne Browser kann damit umgehen. Will man es auf die Goldwaage legen k&#246;nnte man argumentieren, dass der Browser durch den erforderlichen Entpackvorgang l&#228;nger braucht, um die Seite zu rendern. Aber das Nadel&#246;hr ist nach wie vor ganz klar die Bandbreite der Leitung zum Empf&#228;nger, w&#228;hrend die Prozessoren in moderner (Desktop-)Hardware gerade mal m&#252;de l&#228;cheln, wenn sie komprimierte Daten vorgesetzt bekommen.<br />
F&#252;r die meisten eher unbedeutend ist in Zeiten von Traffic-Flatrates auch f&#252;r Server die Einsparung beim Datenvolumen. Aber sp&#228;testens beim Thema CDN, wo nach wir vor nach Traffic abgerechnet wird, wird es pl&#246;tzlich wieder interessant.</p>
<h3>Komprimierung? Bringt der Shop doch schon mit!</h3>
<p>php bietet von Haus aus die M&#246;glichkeit, Daten komprimiert auszuliefern und in xtcModified ist die Option im Admin unter &#8216;Erweiterte Konfiguration&#8217; &#8211; &#8216;Gzip Kompression&#8217; auch schnell gefunden und aktiviert. Nur: Das gelbe Ausrufezeichen in Page Speed verschwindet nicht, die Note von YSlow f&#252;r die Komprimierung wird nur marginal besser.</p>
<p>Der Grund ist einfach: Die shopeigene Komprimierung wird wie gesagt vom php-Parser zur Verf&#252;gung gestellt. Nur Dateien, die diesen vor Auslieferung passieren, werden komprimiert. Und genau das gilt nicht f&#252;r CSS und Javascript. Aber gerade hier findet sich ein enormes Einsparpotential. </p>
<h3>mod_deflate k&#252;mmert sich um alles</h3>
<p>Auch hier kommt uns wieder ein Apache-Modul zu Hilfe: mod_defalte (seit Apache 2, davor hie&#223; es mod_gzip und wer noch einen Apache 1 im Einsatz hat sollte seinen Serveradmin mal fragen, ob er nicht lieber mit etwas Geld verdienen m&#246;chte, womit er sich auch auskennt). Und auch hier lohnt ein Blick in die .htaccess des <a href="http://h5bp.com/">HTML5Boilerplate</a>. Zuvor schalten wir aber die shopeigene Komprimierung wieder aus, sie wird nicht ben&#246;tigt.</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;">&lt;<span style="color: #000000; font-weight:bold;">IfModule</span> mod_deflate.c&gt;
&nbsp;
<span style="color: #adadad; font-style: italic;"># Force deflate for mangled headers developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/</span>
&lt;<span style="color: #000000; font-weight:bold;">IfModule</span> mod_setenvif.c&gt;
  &lt;<span style="color: #000000; font-weight:bold;">IfModule</span> mod_headers.c&gt;
    <span style="color: #00007f;">SetEnvIfNoCase</span> ^(Accept-EncodXng|X-cept-Encoding|X{<span style="color: #ff0000;">15</span>}|~{<span style="color: #ff0000;">15</span>}|-{<span style="color: #ff0000;">15</span>})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{<span style="color: #ff0000;">4</span>,<span style="color: #ff0000;">13</span>}$ HAVE_Accept-Encoding
    RequestHeader append Accept-Encoding <span style="color: #7f007f;">&quot;gzip,deflate&quot;</span> env=HAVE_Accept-Encoding
  &lt;/<span style="color: #000000; font-weight:bold;">IfModule</span>&gt;
&lt;/<span style="color: #000000; font-weight:bold;">IfModule</span>&gt;
&nbsp;
<span style="color: #adadad; font-style: italic;"># HTML, TXT, CSS, JavaScript, JSON, XML, HTC:</span>
&lt;<span style="color: #000000; font-weight:bold;">IfModule</span> filter_module&gt;
  FilterDeclare   COMPRESS
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/html
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/css
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/plain
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/xml
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/x-component
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/javascript
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/json
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/xml
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/xhtml+xml
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/rss+xml
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/atom+xml
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/vnd.ms-fontobject
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $image/svg+xml
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/x-font-ttf
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $font/opentype
  FilterChain     COMPRESS
  FilterProtocol  COMPRESS  DEFLATE change=yes;byteranges=no
&lt;/<span style="color: #000000; font-weight:bold;">IfModule</span>&gt;
&nbsp;
&lt;<span style="color: #000000; font-weight:bold;">IfModule</span> !mod_filter.c&gt;
  <span style="color: #adadad; font-style: italic;"># Legacy versions of Apache</span>
  AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
  AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
  AddOutputFilterByType DEFLATE image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
&lt;/<span style="color: #000000; font-weight:bold;">IfModule</span>&gt;
&lt;/<span style="color: #000000; font-weight:bold;">IfModule</span>&gt;</pre></div></div>

<p>Zun&#228;chst k&#252;mmert man sich um Clients, die aufgrund von Proxies oder anderer Einfl&#252;sse kaputte Header schicken und standardm&#228;&#223;ig nicht mit komprimierten Inhalten versorgt werden w&#252;rden. Gem&#228;&#223; einem <a href="http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/">Blogpost im Yahoo! Developer Network</a> sind das ca. 15% der Besucher, also eine nicht zu untersch&#228;tzende Anzahl.</p>
<p>Anschlie&#223;end werden mit Hilfe von mod_filter, das wesentlich flexibler ist als das fr&#252;her benutzte <tt>AddOutputFilterByType</tt>, Inhalte in Abh&#228;ngigkeit ihres MIME-Type (den wir ja schon <a href="http://50north.de/verfallsdatum-ueberschritten-xtcmodified-on-steroids/">im zweiten Teil</a> gerade gezogen haben) komprimiert. Bei Bildern beispielsweise w&#228;re das nur verschwendete Rechenleistung. Der letzte Block ist f&#252;r Server, die ohne mod_filter laufen, indem die &#8216;alte&#8217; mod_deflate-Syntax zum Einsatz kommt.</p>
<p>Wer jetzt neu l&#228;dt wird sich wundern, dass sich nach wie vor nichts tut, unsere Javascript- und CSS-Daten noch immer bem&#228;ngelt werden. Nachdem wir aber bereits im vorherigen Teil die Expire-Zeiten hoch gesetzt haben fragt der Browser gar nicht mehr beim Server nach, sondern holt die Datei aus seinem Cache und die ist nat&#252;rlich unkomprimiert.<br />
Um realistische Ergebnisse aus Page Speed zu bekommen m&#252;ssen wir also den Browsercache umgehen, entweder indem wir ihn leeren oder indem wir mit gedr&#252;ckter Hochstelltaste auf das &#8216;Neu laden&#8217;-Icon klicken &#8211; zumindest in Firefox und Chrome f&#252;hrt das zum gew&#252;nschten Ergebnis. Das ist aber auch nur deshalb praktikabel, weil sich unser Shop noch im Testbetrieb befindet. Wie man das Problem im Livebetrieb umgeht haben wir ja schon behandelt.</p>
<div id="attachment_556" class="wp-caption alignnone" style="width: 310px"><a rel="lightbox[post]" href="http://50north.de/wp-content/uploads/2012/01/YSlow-nach-mod_deflate.jpg"><img src="http://50north.de/wp-content/uploads/2012/01/YSlow-nach-mod_deflate-300x233.jpg" alt="YSlow jetzt mit der Gesamtnote A" title="YSlow jetzt mit der Gesamtnote A" width="300" height="233" class="size-medium wp-image-556" /></a><p class="wp-caption-text">YSlow jetzt mit der Gesamtnote A</p></div>
<div id="attachment_557" class="wp-caption alignnone" style="width: 310px"><a rel="lightbox[post]" href="http://50north.de/wp-content/uploads/2012/01/Page-Speed-nach-mod_deflate.jpg"><img src="http://50north.de/wp-content/uploads/2012/01/Page-Speed-nach-mod_deflate-300x233.jpg" alt="Auch bei Page Speed die 75%-Marke &#252;berschritten" title="Auch bei Page Speed die 75%-Marke &#252;berschritten" width="300" height="233" class="size-medium wp-image-557" /></a><p class="wp-caption-text">Auch bei Page Speed die 75%-Marke &#252;berschritten</p></div>
<p>Nat&#252;rlich gibt es auch die neue .htaccess mit dem <a href="http://50north.de/wp-content/uploads/2012/01/htaccess-mit-mod_deflate.txt">aktuellen Status zum Dowload</a>. </p>
<h4>Weitere Artikel der Serie</h4>
<ol>
<li><a href="http://50north.de/hoeher-schneller-weiter-xtcmodified-on-steroids/">H&#246;her, schneller, weiter</a></li>
<li><a href="http://50north.de/verfallsdatum-ueberschritten-xtcmodified-on-steroids/">Verfallsdatum &#252;berschritten</a></li>
</ol>
<hr/>
Disclaimer: Ich bin nach wie vor der Meinung, dass viele der Einstellungen in der Serverkonfiguration besser aufgehoben sind als in der .htaccess-Datei, da aber sicherlich viele das ganze auch auf Shared Hosting umsetzen m&#246;chten werden alle &#196;nderungen, die auch &#252;ber die .htaccess durchgef&#252;hrt werden k&#246;nnen, im Rahmen dieser Artikelreihe dort vorgenommen.</p>
]]></content:encoded>
			<wfw:commentRss>http://50north.de/druck-machen-xtcmodified-on-steroids/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Verfallsdatum &#252;berschritten &#8211; xtcModified on&#160;steroids</title>
		<link>http://50north.de/verfallsdatum-ueberschritten-xtcmodified-on-steroids/</link>
		<comments>http://50north.de/verfallsdatum-ueberschritten-xtcmodified-on-steroids/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 21:04:23 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[E-Commerce]]></category>
		<category><![CDATA[It's all about speed!]]></category>

		<guid isPermaLink="false">http://50north.de/?p=522</guid>
		<description><![CDATA[36 von 100 m&#246;glichen Punkten erreicht ein frisch installierter <a href="http://50north.de/hoeher-schneller-weiter-xtcmodified-on-steroids/">xtcModified auf einem 1&#38;1 Virtual Server</a>. Diesen Wert gilt es jetzt im Rahmen dieser Artikelserie zu optimieren.
]]></description>
			<content:encoded><![CDATA[<p>36 von 100 m&#246;glichen Punkten erreicht ein frisch installierter <a href="http://50north.de/hoeher-schneller-weiter-xtcmodified-on-steroids/">xtcModified auf einem 1&amp;1 Virtual Server</a>. Diesen Wert gilt es jetzt im Rahmen dieser Artikelserie zu optimieren.</p>
<h2>Browser-Caching nutzen</h2>
<p>Ganz oben auf der Liste von Page Speed steht das fehlende Browser Caching. </p>
<blockquote><p>Die Aktualit&#228;t der folgenden Cache-f&#228;higen Ressourcen ist nur von kurzer Dauer. Legen Sie fest, dass folgende Ressourcen k&#252;nftig mindestens einmal pro Woche ablaufen:</p></blockquote>
<p>Und darunter kommt so ziemlich jedes Bild, das Stylesheet und die Javascript-Dateien, die alle kein Ablaufdatum haben. Dieses w&#252;rde festlegen, wie lange der Browser oder auch ein Proxyserver die Datei als aktuell betrachtet. Mit der aktuellen Konfiguration fordert er jede Datei bei jedem Aufruf erneut an, denn kein Ablaufdatum bedeutet, dass die Datei aus Browsersicht sofort veraltet ist.</p>
<p>Ein solches Verhalten ist sinnvoll und w&#252;nschenswert bei Inhalten, die bei jeder Anforderung die aktuellen Gegebenheiten reflektieren m&#252;ssen, so f&#252;hrt beispielsweise das hinzuf&#252;gen eines Artikels zum Warenkorb zu einer &#196;nderung und das HTML f&#252;r den Warenkorb darf dann eben nicht aus dem Cache geholt werden. Bilder, Stylesheets und Scripts &#228;ndern sich aber in der Regel nicht mit jedem Klick. Es ist also v&#246;llig unn&#246;tig, diese Dateien jedes Mal erneut anzufordern bzw. auch nur beim Server anzufragen, ob sich was ge&#228;ndert hat.</p>
<h3>mod_expires for the rescue</h3>
<p>Zwar gibt es in der .htaccess-Datei, die mit xtcModified mitkommt, einen Eintrag, um bestimmte Formate mit einem Ablaufdatum von einem Monat zu versehen (der aber standardm&#228;&#223;ig nicht aktiv ist), ich bevorzuge hier aber die feiner aufgranulierte L&#246;sung aus dem <a href="http://h5bp.com">HTML5Boilerplate</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;">&lt;<span style="color: #000000; font-weight:bold;">IfModule</span> mod_expires.c&gt;
  <span style="color: #00007f;">ExpiresActive</span> <span style="color: #0000ff;">on</span>
&nbsp;
<span style="color: #adadad; font-style: italic;"># Perhaps better to whitelist expires rules? Perhaps.</span>
  <span style="color: #00007f;">ExpiresDefault</span>                          <span style="color: #7f007f;">&quot;access plus 1 month&quot;</span>
&nbsp;
<span style="color: #adadad; font-style: italic;"># cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5)</span>
  <span style="color: #00007f;">ExpiresByType</span> text/cache-manifest       <span style="color: #7f007f;">&quot;access plus 0 seconds&quot;</span>
&nbsp;
<span style="color: #adadad; font-style: italic;"># Your document html </span>
  <span style="color: #00007f;">ExpiresByType</span> text/html                 <span style="color: #7f007f;">&quot;access plus 0 seconds&quot;</span>
&nbsp;
<span style="color: #adadad; font-style: italic;"># Data</span>
  <span style="color: #00007f;">ExpiresByType</span> text/xml                  <span style="color: #7f007f;">&quot;access plus 0 seconds&quot;</span>
  <span style="color: #00007f;">ExpiresByType</span> application/xml           <span style="color: #7f007f;">&quot;access plus 0 seconds&quot;</span>
  <span style="color: #00007f;">ExpiresByType</span> application/json          <span style="color: #7f007f;">&quot;access plus 0 seconds&quot;</span>
&nbsp;
<span style="color: #adadad; font-style: italic;"># Feed</span>
  <span style="color: #00007f;">ExpiresByType</span> application/rss+xml       <span style="color: #7f007f;">&quot;access plus 1 hour&quot;</span>
  <span style="color: #00007f;">ExpiresByType</span> application/atom+xml      <span style="color: #7f007f;">&quot;access plus 1 hour&quot;</span>
&nbsp;
<span style="color: #adadad; font-style: italic;"># Favicon (cannot be renamed)</span>
  <span style="color: #00007f;">ExpiresByType</span> image/x-icon              <span style="color: #7f007f;">&quot;access plus 1 week&quot;</span> 
&nbsp;
<span style="color: #adadad; font-style: italic;"># Media: images, video, audio</span>
  <span style="color: #00007f;">ExpiresByType</span> image/gif                 <span style="color: #7f007f;">&quot;access plus 1 month&quot;</span>
  <span style="color: #00007f;">ExpiresByType</span> image/png                 <span style="color: #7f007f;">&quot;access plus 1 month&quot;</span>
  <span style="color: #00007f;">ExpiresByType</span> image/jpg                 <span style="color: #7f007f;">&quot;access plus 1 month&quot;</span>
  <span style="color: #00007f;">ExpiresByType</span> image/jpeg                <span style="color: #7f007f;">&quot;access plus 1 month&quot;</span>
  <span style="color: #00007f;">ExpiresByType</span> video/ogg                 <span style="color: #7f007f;">&quot;access plus 1 month&quot;</span>
  <span style="color: #00007f;">ExpiresByType</span> audio/ogg                 <span style="color: #7f007f;">&quot;access plus 1 month&quot;</span>
  <span style="color: #00007f;">ExpiresByType</span> video/mp4                 <span style="color: #7f007f;">&quot;access plus 1 month&quot;</span>
  <span style="color: #00007f;">ExpiresByType</span> video/webm                <span style="color: #7f007f;">&quot;access plus 1 month&quot;</span>
&nbsp;
<span style="color: #adadad; font-style: italic;"># HTC files  (css3pie)</span>
  <span style="color: #00007f;">ExpiresByType</span> text/x-component          <span style="color: #7f007f;">&quot;access plus 1 month&quot;</span>
&nbsp;
<span style="color: #adadad; font-style: italic;"># Webfonts</span>
  <span style="color: #00007f;">ExpiresByType</span> font/truetype             <span style="color: #7f007f;">&quot;access plus 1 month&quot;</span>
  <span style="color: #00007f;">ExpiresByType</span> font/opentype             <span style="color: #7f007f;">&quot;access plus 1 month&quot;</span>
  <span style="color: #00007f;">ExpiresByType</span> application/x-font-woff   <span style="color: #7f007f;">&quot;access plus 1 month&quot;</span>
  <span style="color: #00007f;">ExpiresByType</span> image/svg+xml             <span style="color: #7f007f;">&quot;access plus 1 month&quot;</span>
  <span style="color: #00007f;">ExpiresByType</span> application/vnd.ms-fontobject <span style="color: #7f007f;">&quot;access plus 1 month&quot;</span>
&nbsp;
<span style="color: #adadad; font-style: italic;"># CSS and JavaScript</span>
  <span style="color: #00007f;">ExpiresByType</span> text/css                  <span style="color: #7f007f;">&quot;access plus 1 year&quot;</span>
  <span style="color: #00007f;">ExpiresByType</span> application/javascript    <span style="color: #7f007f;">&quot;access plus 1 year&quot;</span>
&nbsp;
  &lt;<span style="color: #000000; font-weight:bold;">IfModule</span> mod_headers.c&gt;
    <span style="color: #00007f;">Header</span> append Cache-Control <span style="color: #7f007f;">&quot;public&quot;</span>
  &lt;/<span style="color: #000000; font-weight:bold;">IfModule</span>&gt;
&nbsp;
&lt;/<span style="color: #000000; font-weight:bold;">IfModule</span>&gt;</pre></div></div>

<p>Das ganze in If-Bedingungen zu verpacken verhindert effektiv Internal Server Errors (500), wenn das Modul nicht installiert ist. Klar, dass das ganze dann auch nichts bringt, aber ein Shop, der Inhalte ohne die Optimierung ausliefert ist immer noch besser als ein Shop, der nur eine Fehlermeldung zur&#252;ckgibt.<br />
Wenn aber mod_expires aktiv ist geschieht folgendes: Der generelle Wert f&#252;r das Ablaufdatum wird auf einen Monat gesetzt und das ganze dann f&#252;r Inhalte, die nicht gecached werden sollen, wieder zur&#252;ckgesetzt. Anschlie&#223;end werden die Werte f&#252;r einzelnen Formate basierend auf dem MIME-Type gesetzt. Man k&#246;nnte alles weglassen, was dem generellen Wert entspricht, aber ich lasse das hier mal mit aufgef&#252;hrt, vielleicht will man den ein oder anderen Ablaufzeitraum doch anpassen, bei <a href="http://www.x-skating.com/">X-Skating</a> sind es beispielsweise 10 Jahre f&#252;r Bilder. Auf die dabei auftretenden Probleme gehe ich sp&#228;ter noch ein.<br />
Cache-Control &#8220;public&#8221; sorgt dann noch daf&#252;r, dass diese Inhalte auch von Proxies gecached werden k&#246;nnen, auch wenn man sich vorher per HTTP authentifizieren musste (was f&#252;r xtcModified aber nicht zutrifft).</p>
<p>Da mod_expires auf Grundlage der MIME-Types arbeitet empfiehlt es sich, noch einen anderen Bereich aus der Datei von HTML5Boilerplate zu &#252;bernehmen, n&#228;mlich den Teil, wo die MIME-Types vereinheitlicht werden, gerade Javascript kommt je nach Serverkonfiguration mit den obskursten MIME-Types daher:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #adadad; font-style: italic;"># JavaScript</span>
<span style="color: #adadad; font-style: italic;">#   Normalize to standard type (it's sniffed in IE anyways)</span>
<span style="color: #adadad; font-style: italic;">#   tools.ietf.org/html/rfc4329#section-7.2</span>
<span style="color: #00007f;">AddType</span> application/javascript         js
&nbsp;
<span style="color: #adadad; font-style: italic;"># Audio</span>
<span style="color: #00007f;">AddType</span> audio/ogg                      oga ogg
<span style="color: #00007f;">AddType</span> audio/mp4                      m4a
&nbsp;
<span style="color: #adadad; font-style: italic;"># Video</span>
<span style="color: #00007f;">AddType</span> video/ogg                      ogv
<span style="color: #00007f;">AddType</span> video/mp4                      mp4 m4v
<span style="color: #00007f;">AddType</span> video/webm                     webm
&nbsp;
<span style="color: #adadad; font-style: italic;"># SVG</span>
<span style="color: #adadad; font-style: italic;">#   Required for svg webfonts on iPad</span>
<span style="color: #adadad; font-style: italic;">#   twitter.com/FontSquirrel/status/14855840545</span>
<span style="color: #00007f;">AddType</span>     image/svg+xml              svg svgz
<span style="color: #00007f;">AddEncoding</span> gzip                       svgz
&nbsp;
<span style="color: #adadad; font-style: italic;"># Webfonts</span>
<span style="color: #00007f;">AddType</span> application/vnd.ms-fontobject  eot
<span style="color: #00007f;">AddType</span> application/x-font-ttf         ttf ttc
<span style="color: #00007f;">AddType</span> font/opentype                  otf
<span style="color: #00007f;">AddType</span> application/x-font-woff        woff
&nbsp;
<span style="color: #adadad; font-style: italic;"># Assorted types</span>
<span style="color: #00007f;">AddType</span> image/x-icon                        ico
<span style="color: #00007f;">AddType</span> image/webp                          webp
<span style="color: #00007f;">AddType</span> text/cache-manifest                 appcache manifest
<span style="color: #00007f;">AddType</span> text/x-component                    htc
<span style="color: #00007f;">AddType</span> application/x-chrome-extension      crx
<span style="color: #00007f;">AddType</span> application/x-opera-extension       oex
<span style="color: #00007f;">AddType</span> application/x-xpinstall             xpi
<span style="color: #00007f;">AddType</span> application/octet-stream            safariextz
<span style="color: #00007f;">AddType</span> application/x-web-app-manifest+json webapp
<span style="color: #00007f;">AddType</span> text/x-vcard                        vcf</pre></div></div>

<p>Die einzige &#196;nderung, die wir noch an den Expires vornehmen ist das Favicon, das wird ebenfalls auf einen Monat gesetzt. Die .htaccess, wie sie bis zu diesem Zeitpunkt aussieht, kann <a href="http://50north.de/wp-content/uploads/2012/01/htaccess-mit-mod_expire.txt">hier heruntergeladen werden</a>.</p>
<p>Erneut durch YSlow und Page Speed &#252;berpr&#252;ft ergibt sich schon ein wesentlich besseres Bild. YSlow pendelt sich jetzt bei 89 Punkten ein, noch deutlicher ist die Steigerung bei Page Speed, 60 von 100 m&#246;glichen Punkten stehen jetzt bereits zu Buche.</p>
<div id="attachment_539" class="wp-caption alignnone" style="width: 310px"><a rel="lightbox[post]" href="http://50north.de/wp-content/uploads/2012/01/YSlow-nach-mod_expires.jpg"><img src="http://50north.de/wp-content/uploads/2012/01/YSlow-nach-mod_expires-300x228.jpg" alt="" title="YSlow klettert von 80 auf 89 Punkte..." width="300" height="228" class="size-medium wp-image-539" /></a><p class="wp-caption-text">YSlow klettert von 80 auf 89 Punkte...</p></div><br />
<div id="attachment_538" class="wp-caption alignnone" style="width: 310px"><a rel="lightbox[post]" href="http://50north.de/wp-content/uploads/2012/01/Page-Speed-nach-mod_expires.jpg"><img src="http://50north.de/wp-content/uploads/2012/01/Page-Speed-nach-mod_expires-300x233.jpg" alt="" title="...Page Speed sogar von 36 auf 60" width="300" height="233" class="size-medium wp-image-538" /></a><p class="wp-caption-text">...Page Speed sogar von 36 auf 60</p></div>
<p>Auch sch&#246;n zu sehen ist die extreme Reduktion an HTTP-Requests durch diese Ma&#223;nahme. So zeigt das Wasserfalldiagramm bei <a href="http://www.webpagetest.org/">webpagetest.org</a> ohne mod_expire auch bei der <a href="http://www.webpagetest.org/result/120111_33_2TTYT/">Anfragewiederholung</a> noch alle Bilder etc. Der Server antwortet zwar mit <em>304 Not Modified</em>, aber die Anfrage geht trotzdem raus und muss beantwortet werden. Sind Expire-Header gesetzt <a href="http://www.webpagetest.org/result/120112_FE_2V96S/">geh&#246;rt das der Vergangenheit an</a>. </p>
<h3>Inhalte aktualisieren bei langen Expires</h3>
<p>(Sehr) lange Expire-Zeiten bringen ein Problem mit sich: Da der Browser davon ausgeht, dass die CSS-Datei, die er gestern geladen hat, noch ein Jahr g&#252;ltig ist, wird er erst gar nicht auf die Idee kommen, diese neu anzufordern. Daher kommt man um eine Versionierung nicht herum. HTML5Boilerplate empfiehlt das &#252;ber Query-Paramter zu machen, statt <tt>stylesheet.css</tt> ruft man also beispielsweise <tt>stylesheet.css?20120112</tt> auf. Damit man das nicht jedes Mal h&#228;ndisch aktualisieren muss sollte man die Zeilen 15 und 16 in <tt>templates/xtc5/css/general.css.php</tt> wie folgt &#228;ndern:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">link</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&lt;?php echo 'templates/'.CURRENT_TEMPLATE; ?&gt;</span></span>/stylesheet.css?<span style="color: #009900;">&lt;?php echo filemtime<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'templates/'</span>.CURRENT_TEMPLATE.<span style="color: #ff0000;">'/stylesheet.css'</span><span style="color: #66cc66;">&#41;</span> ?&gt;</span>&quot; type=&quot;text/css&quot; /&gt;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">link</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&lt;?php echo 'templates/'.CURRENT_TEMPLATE; ?&gt;</span></span>/css/thickbox.css?<span style="color: #009900;">&lt;?php echo filemtime<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'templates/'</span>.CURRENT_TEMPLATE.<span style="color: #ff0000;">'/css/thickbox.css'</span><span style="color: #66cc66;">&#41;</span> ?&gt;</span>&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;</pre></div></div>

<p>Damit wird immer das Datum der letzten Modifikation als Unix-Zeitstempel angehangen. Das gleiche sollte man auch f&#252;r das Javascript machen, aber da wir uns dem eh im Rahmen dieser Serie noch gesondert annehmen m&#252;ssen verschieben wir das auf einen sp&#228;teren Zeitpunkt.</p>
<p>Als letztes Problemkind bleiben die Bilder. Die L&#246;sung daf&#252;r ist etwas aufwendiger und wird behandelt werden wenn wir auf das Thema Content Delivery Networks (CDN) zu sprechen kommen.</p>
<h4>Weitere Artikel der Serie</h4>
<ul>
<li><a href="http://50north.de/hoeher-schneller-weiter-xtcmodified-on-steroids/">Teil 1: H&#246;her, schneller, weiter</a></li>
</ul>
<hr/>
Disclaimer: Ich bin nach wie vor der Meinung, dass viele der Einstellungen in der Serverkonfiguration besser aufgehoben sind als in der .htaccess-Datei, da aber sicherlich viele das ganze auch auf Shared Hosting umsetzen m&#246;chten werden alle &#196;nderungen, die auch &#252;ber die .htaccess durchgef&#252;hrt werden k&#246;nnen, im Rahmen dieser Artikelreihe dort vorgenommen.</p>
]]></content:encoded>
			<wfw:commentRss>http://50north.de/verfallsdatum-ueberschritten-xtcmodified-on-steroids/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>H&#246;her, schneller, weiter &#8211; xtcModified on&#160;steroids</title>
		<link>http://50north.de/hoeher-schneller-weiter-xtcmodified-on-steroids/</link>
		<comments>http://50north.de/hoeher-schneller-weiter-xtcmodified-on-steroids/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 19:37:09 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[E-Commerce]]></category>
		<category><![CDATA[It's all about speed!]]></category>

		<guid isPermaLink="false">http://50north.de/?p=503</guid>
		<description><![CDATA[So langsam erreicht die Erkenntnis, dass Websitegeschwindigkeit (auch) ein Rankingkriterium sein kann, auch die kleineren und ganz kleinen Shops. 
]]></description>
			<content:encoded><![CDATA[<p>So langsam erreicht die Erkenntnis, dass Websitegeschwindigkeit (auch) ein Rankingkriterium sein kann, auch die kleineren und ganz kleinen Shops. </p>
<p>Zeit, in einer Artikelserie mal zu zeigen, wie man aus einem der derzeit beliebtesten Open-Source-Systeme, n&#228;mlich aus <a href="http://www.xtc-modified.org/">xtcModified</a>, das Maximum rauskitzeln kann. </p>
<h2>Ausgangssituation</h2>
<h3>Shopsystem</h3>
<p>Es beginnt mit einem xtcModified, wie er aus der Schachtel f&#228;llt. Zum Zeitpunkt dieser Artikelserie tr&#228;gt er den sch&#246;nen und leicht zu merkenden Namen <em>1.05 SP1b</em>. In diesen wurden die <a href="http://www.xtc-modified.org/wiki/Demoartikel_f%C3%BCr_einen_Demoshop_(dump)">Demoartikel</a> importiert, allerdings mit individuellen Artikelnummern, damit es mehr als vier unterschiedliche Produkte sind. Au&#223;erdem wurden noch SEO-URLs aktiviert und vier Artikel auf die Startseite gestellt.</p>
<h3>Hosting</h3>
<p>Installiert ist der Shop auf einem <a href="http://profiseller.de/shop1/index.php3?ps_id=P6622418&amp;shop=1&amp;banner=29">1&amp;1 Virtual Server L</a>, denn nur so hat man die maximale Kontrolle. Das sollte man im Hinterkopf behalten, wenn man die im Rahmen dieser Serie vorgestellten Tipps auf einem Shared Hosting umsetzen will, manche Sachen gehen dort einfach nicht. </p>
<h3>Domain</h3>
<p>Ach ja, Domains kauft man nicht, Domains hat man. Es stimmt, dass man die bei eigentlich jedem Hosting hinterherworfen bekommt. Trotzdem sollte man darauf achten, dass man eine gr&#246;&#223;tm&#246;gliche Flexibilit&#228;t bei der Konfiguration hat.<br />
10 Subdomains, wie es 1&amp;1 beispielsweise fr&#252;her f&#252;r einen Server angeboten hat, sind eine absolut sinnlose k&#252;nstliche Limitation. <a href="https://www.domaindiscount24.net/?00505696">Domaindiscount24</a> hat sich in den vergangenen Jahren als zuverl&#228;ssiger Partner erwiesen was das Domainhosting angeht. Wer keinen eigenen Server hat sollte aber vorher mit seinem Hoster kl&#228;ren, ob dieser Fremddomains einrichten kann. Bei den meisten geht das kostenlos, bei manchen muss man eine geringe monatliche Geb&#252;hr einplanen.</p>
<h2>Tools</h2>
<p>Yahoos <a href="https://addons.mozilla.org/de/firefox/addon/yslow/">YSlow</a> und Googles <a href="http://code.google.com/speed/page-speed/">Page Speed</a> sind sicherlich die beiden bekanntesten Browser-Plugins, die sich dem Thema Websitegeschwindigkeit widmen. Diese beiden werden uns im Rahmen der Serie begleiten, hin und wieder aber vom ein oder anderen Online-Tool erg&#228;nzt werden. Die Kritierien, die beide &#252;berpr&#252;fen, &#228;hneln sich, die Ergebnisse k&#246;nnten aber unterschiedlicher nicht sein. </p>
<div id="attachment_504" class="wp-caption alignnone" style="width: 310px"><a rel="lightbox[post]" href="http://50north.de/wp-content/uploads/2012/01/Ausgangssituation-YSlow.png"><img src="http://50north.de/wp-content/uploads/2012/01/Ausgangssituation-YSlow-300x233.png" alt="" title="Ausgangssituation YSlow" width="300" height="233" class="size-medium wp-image-504" /></a><p class="wp-caption-text">Ausgangssituation YSlow</p></div>
<p>W&#228;hrend YSlow 80 Punkte vergibt und damit auf die amerikanische Schulnote &#8216;B&#8217; kommt kann sich Page Speed bei unserem Testshop unter <a href="http://www.ladeze.it/">www.ladeze.it</a> lediglich f&#252;r 36 von 100 Punkten erw&#228;rmen, was zu einem roten Gesamtwert f&#252;hrt.</p>
<div id="attachment_505" class="wp-caption alignnone" style="width: 310px"><a rel="lightbox[post]" href="http://50north.de/wp-content/uploads/2012/01/Ausgangssituation-PageSpeed.png"><img src="http://50north.de/wp-content/uploads/2012/01/Ausgangssituation-PageSpeed-300x233.png" alt="" title="Ausgangssituation PageSpeed" width="300" height="233" class="size-medium wp-image-505" /></a><p class="wp-caption-text">Ausgangssituation PageSpeed</p></div>
<p>Damit konfrontiert geht es jetzt an die Optimierung, denn auch beim &#8216;B&#8217; von YSlow ist deutlich Optimierungspotential zu sehen, gibt es doch f&#252;r den ein oder anderen Punkt eine glatte Sechs.</p>
<p>Wer sich die Wartezeit bis zum zweiten Teil etwas verk&#252;rzen will sollte in den <a href="http://www.onlineradar.de/007/">Podacst von OnlineRader</a> reinh&#246;ren. Der bietet einen guten &#220;berblick zum Thema.</p>
<hr/>
Disclaimer: Ich bin nach wie vor der Meinung, dass viele der Einstellungen in der Serverkonfiguration besser aufgehoben sind als in der .htaccess-Datei, da aber sicherlich viele das ganze auch auf Shared Hosting umsetzen m&#246;chten werden alle &#196;nderungen, die auch &#252;ber die .htaccess durchgef&#252;hrt werden k&#246;nnen, im Rahmen dieser Artikelreihe dort vorgenommen.</p>
]]></content:encoded>
			<wfw:commentRss>http://50north.de/hoeher-schneller-weiter-xtcmodified-on-steroids/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>#btconf &#8211; the&#160;aftermath</title>
		<link>http://50north.de/btconf-the-aftermath/</link>
		<comments>http://50north.de/btconf-the-aftermath/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 15:57:00 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://50north.de/?p=473</guid>
		<description><![CDATA[Have been to my first conference ever <a href="http://50north.de/btconf-the-aftermath/#note1">[1]</a> and it was great! Basically, that says it all. You can stop reading now.]]></description>
			<content:encoded><![CDATA[<p><em>Der nachfolgende Post ist in englisch. Aus Gr&#252;nden.</em></p>
<p>Have been to my first conference ever <a href="#note1">[1]</a> and it was great! Basically, that says it all. You can stop reading now.<br />
<span id="more-473"></span></p>
<p>I&#8217;m in the web business for 15 years now. This means I own spam that might be older than you. But I&#8217;ve never been to a conference before. Going part-time self-employed this year I decided it was time to change this and along with this decision came <a href="http://2011.beyondtellerrand.com/">beyond tellerrand</a>. I not only grabbed the very last very early bird ticket but also a seat in one of the workshops, although I wasn&#8217;t sure if it&#8217;s a good idea to attend a completely english-spoken workshop and conference. Looking back I can say it was a very good decision.</p>
<p>So my beyond tellerrand adventure started with Seb Lee-Delisle&#8217;s workshop on <a href="http://2011.beyondtellerrand.com/workshops.php#lee_delisle">Creative JS and HTML5</a>. Not long ago Javascript had been demonized mostly because of security issues in Internet Explorer. Turns out it was an ugly duckling. It is fascinating to see where it is today and what can be done solely with Javascript in the browser. <a href="http://creativejs.com/">CreativeJS.com</a> is a good starting point to check out.<br />
Speaking of ducks I didn&#8217;t expect to get roasted duck served for lunch. But it was a dish that matched the time-honored <a href="http://2011.beyondtellerrand.com/locations.php">location</a> and a great workshop perfectly. Seb is not only a great teacher but also has a lot of other <a href="http://sebleedelisle.com/work/">fascinating projects</a> running. I love his large projections as much as I love <a href="http://www.kronachleuchtet.com/">Kronach leuchtet</a>. Would be really great to see him perform there one day. </p>
<p>So being in town already I decided to go for the <a href="http://www.meetup.com/The-SmashingMagazine-Meetup/events/41021332/">smashing meetup</a> in the evening. Finally putting faces to twitter names (e.g. <a href="https://twitter.com/ScreenOrigami">Sandra</a> and <a href="https://twitter.com/yatil">Eric</a>). Meeting new fascinating people like <a href="https://twitter.com/fernmuendlich">Maik</a> or <a href="https://twitter.com/freiherz">Christian</a>, who are definitely worth a follow. Having great talks with people from all over the world. </p>
<p>Starting the next day at 10am is brilliant. Honestly. And the Capitol is an awesome location! I will only cover some personal highlights, if you are interested in a more in-depth view check <a href="http://baudson.cute-ice.de/serendipity/index.php?/archives/90-Beyond-Tellerrand-day-one.html">here for day one</a> and <a href="http://baudson.cute-ice.de/serendipity/index.php?/archives/91-Beyond-Tellerrand-day-two.html">here for day two</a> or wait for the <a href="http://vimeo.com/channels/beyondtellerrand">videos</a> that should pop up on Vimeo shortly. </p>
<p><a href="http://christianheilmann.com/">Chris Heilmann</a> presented lots of interesting stuff from Mozilla, including <a href="http://blog.mozilla.com/tilt/">Tilt</a>, a plugin that gives you a 3D visualization of any webpage, and <a href="http://browserid.org/">BrowserID</a>, which finally might become the sign in mechanism OpenID never became.<br />
<a href="http://seb.ly/">Seb Lee-Delisle</a> is extremly entertaining when he is on stage and he has incredible live coding skills. What I took from <a href="http://aaron-gustafson.com/">Aaron Gustafson&#8217;s</a> talk was that I have to dig deeper into progressive enhancement. Or just stop stacking books on this subject on my desk and start reading.</p>
<p>Also prices for drinks and pretzels had been very reasonable throughout the conference, the free (as in free beer) beer at the party was highly appreciated. Had another evening with interesting talks. </p>
<p>Loved the talks by <a href="http://jakearchibald.com/">Jake Archibald</a> and <a href="http://jontangerine.com/">Jon Tan</a> on day two. Jake is really entertaining, or to quote <a href="https://twitter.com/#!/ScreenOrigami/status/139004156580073472">Sandra</a> on this:</p>
<blockquote><p>If the internet got shut down for good, <a href="https://twitter.com/#!/jaffathecake">@jaffathecake</a> could easily make a fortune in stand up comedy. <img src='http://50north.de/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  <a href="https://twitter.com/#!/search?q=%23btconf">#btconf</a></p></blockquote>
<p>Jon on web fonts covered a topic that I started experimenting with on <a href="http://blog.heimat.fr/anken">Frænkisch</a> a while ago, used it on a <a href="http://www.x-skating.com/">business project</a> for the first time this year and will push it even further on a project that&#8217;s in the pipeline already. </p>
<p>But when I have to name my favorite talk I will definitely vote for <a href="http://colly.com/">Simon Collison</a>. Speaking of web development as a craft, he addressed so much how I think and feel about the industry we&#8217;re in. You should <a href="http://speakerdeck.com/u/colly/p/notes-from-the-edge-1">check out his slides</a>.</p>
<p>So this was my first conference but for sure not my last one. It&#8217;s great to meet so many people who not only love what they do but are passionate about it. This includes the speakers, the people attending and this of course includes Marc Thiele and his team.</p>
<div id="attachment_496" class="wp-caption alignnone" style="width: 310px"><a href="http://50north.de/wp-content/uploads/2011/11/IMG_1024.jpg" rel="lightbox[post]"><img src="http://50north.de/wp-content/uploads/2011/11/IMG_1024-300x225.jpg" alt="" title="beyond tellerrand 2011" width="300" height="225" class="size-medium wp-image-496" /></a><p class="wp-caption-text">beyond tellerrand 2011</p></div>
<p><span id="note1">[1]</span> Honestly, it wasn&#8217;t my first conference. But I decided to start over. Maybe I write about the reasons one day. Maybe not. </p>
]]></content:encoded>
			<wfw:commentRss>http://50north.de/btconf-the-aftermath/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Vertrauensbildende&#160;Ma&#223;nahmen</title>
		<link>http://50north.de/vertrauensbildende-massnahmen/</link>
		<comments>http://50north.de/vertrauensbildende-massnahmen/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 13:37:03 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[E-Commerce]]></category>

		<guid isPermaLink="false">http://50north.de/?p=414</guid>
		<description><![CDATA[Vertrauen schaffen zwischen dem H&#228;ndler und dem Kunden ist eine der Grundvoraussetzungen f&#252;r erfolgreiche Gesch&#228;fte im Online-Handel. Ein mit SSL verschl&#252;sselter Checkoutprozess war f&#252;r uns daher schon immer eine Selbstverst&#228;ndlichkeit - nicht jeder Mitbewerber sieht das so.]]></description>
			<content:encoded><![CDATA[<p><img src="http://50north.de/wp-content/uploads/2011/08/compliant.jpg" alt="" title="compliant" width="230" height="150" class="alignright size-full wp-image-420" />Vertrauen schaffen zwischen dem H&#228;ndler und dem Kunden ist eine der Grundvoraussetzungen f&#252;r erfolgreiche Gesch&#228;fte im Online-Handel. Ein mit SSL verschl&#252;sselter Checkoutprozess war f&#252;r uns daher schon immer eine Selbstverst&#228;ndlichkeit &#8211; nicht jeder Mitbewerber sieht das so. Dar&#252;ber hinaus arbeiten wir seit Jahren erfolgreich mit <a href="http://www.trustedshops.de/">Trusted Shops</a> zusammen. Im vergangenen Jahr haben wir unser Engagement in diesem Bereich noch weiter ausgebaut und lassen unsere Webseiten t&#228;glich von McAfee Secure auf m&#246;gliche Schwachstellen pr&#252;fen &#8211; als erster und selbst zum Zeitpunkt dieses Posts ein Jahr sp&#228;ter einziger Anbieter im Bereich <a href="http://www.erzgebirge-palace.com/">erzgebirgische Volkskunst</a> und <a href="http://www.schwarzwald-palast.de/">Kuckucksuhren</a>.</p>
<p>In diesem Jahr gehen wir noch einen Schritt weiter. Unser Anbieter f&#252;r SSL-Zertifikate, die <a href="http://www.psw.net/">PSW Group</a>, hat uns in Zusammenarbeit mit <a href="http://www.comodo.com/">Comodo</a> ein Paket geschn&#252;rt, mit dem wir die &#220;berpr&#252;fung auf Schwachstellen nicht nur auf alle unsere Shops ausweiten, sondern dar&#252;ber hinaus auch noch alle Shops mit sogenannten <a href="http://de.wikipedia.org/wiki/Extended-Validation-Zertifikat">Extended-Validation-Zertifikaten</a> versehen k&#246;nnen, die neben der schon vorhandenen Verschl&#252;sselung auch klar und deutlich zum Ausdruck bringen, wer hinter der Website steckt und damit noch mehr Sicherheit f&#252;r unsere Kunden bieten.<br />
Damit &#252;bernehmen wir beim Thema sicheres Einkaufen nicht nur im Erzgebirge und im Schwarzwald die Vorreiterrolle, sondern jetzt auch im Bereich <a href="http://www.x-skating.com/">Nordic Cross Skating</a> und lassen damit teilweise weit gr&#246;&#223;ere und umsatzst&#228;rkere Konkurrenzunternehmen hinter uns.</p>
]]></content:encoded>
			<wfw:commentRss>http://50north.de/vertrauensbildende-massnahmen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Krisenmanagement bei&#160;1&amp;1</title>
		<link>http://50north.de/krisenmanagement-bei-11/</link>
		<comments>http://50north.de/krisenmanagement-bei-11/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 07:47:05 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Real-World-Problems]]></category>

		<guid isPermaLink="false">http://50north.de/?p=461</guid>
		<description><![CDATA[In der Krise zeigt sich, was der Provider wirklich drauf hat. Krise bei 1&#038;1 war gestern. Und das Krisenmanagement hat sich mit der Internetleitung einen Wettstreit darum geliefert, wer von beiden der gr&#246;&#223;ere Totalausfall ist.]]></description>
			<content:encoded><![CDATA[<p>In der Krise zeigt sich, was der Provider wirklich drauf hat. Krise bei 1&amp;1 war gestern. Und das Krisenmanagement hat sich mit der Internetleitung einen Wettstreit darum geliefert, wer von beiden der gr&#246;&#223;ere Totalausfall ist. </p>
<p>Los ging es um kurz vor drei. F&#252;nf von f&#252;nf Servern nicht erreichbar. Ein kurzer Check &#252;ber die serielle Konsole ergab aber, dass es nicht an den Servern lag. Der Twitter-Account <a href="https://twitter.com/1und1">@1und1</a> brauchte dann geschlagene 20 Minuten, um das auch zu bemerken. Die, man sollte annehmen eigentlich genau f&#252;r einen solchen Fall gedachte, Statusseite <a href="http://status.1und1.de/">status.1und1.de</a> hingegen verk&#252;ndet auch heute morgen noch, dass alle Systeme funktionieren w&#252;rden und dies seit dem 4. August so sei. </p>
<p><a href="http://50north.de/wp-content/uploads/2011/09/uptime.jpg"><img src="http://50north.de/wp-content/uploads/2011/09/uptime.jpg" alt="" title="uptime" width="600" height="155" class="alignnone size-full wp-image-466" /></a></p>
<p>Ziemlich genau zwei Stunden sp&#228;ter waren dann alle Server wieder erreichbar bis kurz vor 20 Uhr. Und hier kommt der Teil, der mich an dieser Geschichte wirklich aufregt. Fehler k&#246;nnen immer mal auftreten, da kann man sich noch so gut absichern. Und ich gestehe jedem eine angemessene Zeit zu, dass er diese beheben kann. Wenn man aber um kurz nach f&#252;nf mit gro&#223;en Halali auf Twitter verk&#252;ndet, <a href="https://twitter.com/#!/1und1/status/118343060542328832">dass jetzt wieder alles gut sei</a>, dann sollte man alles daran setzen, dass nicht genau der gleiche Fehler kurz darauf wieder auftritt:</p>
<p><img src="http://50north.de/wp-content/uploads/2011/09/Die-Ursache-ist-bekannt.jpg" alt="" title="Die Ursache ist bekannt" width="601" height="270" class="alignnone size-full wp-image-462" /><br />
<em>Die Ursache ist bekannt.</em> In anderen Worten: </p>
<blockquote><p>Schei&#223;e, genau das gleiche wie vorhin. Warum haben wir das nicht einfach vern&#252;nftig gefixt?</p></blockquote>
<p>Und obwohl 1&amp;1 wei&#223;, woran es liegt, brauchen sie erneut &#252;ber zwei Stunden, um das Problem aus der Welt zu schaffen!<br />
Krisenmanagement und vor allem auch Krisenkommunikation sieht anders aus. Die angesprochene Statusseite hat sich auch beim zweiten Ausfall nicht aktualisiert und der Twitter-Account war eigentlich immer so viel zu sp&#228;t dran, dass man sich auch den h&#228;tte sparen k&#246;nnen.</p>
]]></content:encoded>
			<wfw:commentRss>http://50north.de/krisenmanagement-bei-11/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Relaunch der vhs Kreis&#160;Kronach</title>
		<link>http://50north.de/relaunch-der-vhs-kreis-kronach/</link>
		<comments>http://50north.de/relaunch-der-vhs-kreis-kronach/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 19:27:26 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Slovig Enterprises]]></category>

		<guid isPermaLink="false">http://50north.de/?p=448</guid>
		<description><![CDATA[Im frischen Look pr&#228;sentiert sich seit dem Herbstsemster 2011 der Internetauftritt der vhs Kreis Kronach. Moderner geht es dabei aber nicht nur bei der Optik zu, sondern auch unter der Haube.
]]></description>
			<content:encoded><![CDATA[<p>Im frischen Look pr&#228;sentiert sich seit dem Herbstsemster 2011 der Internetauftritt der vhs Kreis Kronach. Moderner geht es dabei aber nicht nur bei der Optik zu, sondern auch unter der Haube.</p>
<p>Erstmals kommt bei einem Webauftritt das <a href="http://html5boilerplate.com/">HTML 5 Boilerplate</a> zum Einsatz, das einfach schon von vornherein viele Stolpersteine aus dem Weg r&#228;umt. Damit einher geht dann aber auch der Wechsel vom antiquierten ISO-8859-1 hin zu UTF-8 und HTML5. Obwohl nicht zwingend notwendig, aber nat&#252;rlich absolut sinnvoll, kommt jetzt auch php5 zum Einsatz. </p>
<div id="attachment_453" class="wp-caption alignnone" style="width: 310px"><a href="http://50north.de/wp-content/uploads/2011/09/vhs-Website-vor-dem-Relaunch.jpg" rel="lightbox[post]"><img src="http://50north.de/wp-content/uploads/2011/09/vhs-Website-vor-dem-Relaunch-300x201.jpg" alt="" title="vhs-Website-vor-dem-Relaunch" width="300" height="201" class="size-medium wp-image-453" /></a><p class="wp-caption-text">Von 1999 bis 2011 das Online-Gesicht der vhs</p></div>
<p>Dank HTML5 konnte das schon vorhandene, semantische Markup weiter optimiert werden, CSS3 sorgt, sofern es der Browser unterst&#252;tzt, mit Schatten und abgerundeten Ecken f&#252;r ein bisschen Pep in der Optik. Und weil das ganze eben nicht aus dem Baukasten kommt sieht es auch nicht aus wie Baukasten.</p>
<div id="attachment_454" class="wp-caption alignnone" style="width: 310px"><a href="http://50north.de/wp-content/uploads/2011/09/vhs-Website-nach-dem-Relaunch.jpg" rel="lightbox[post]"><img src="http://50north.de/wp-content/uploads/2011/09/vhs-Website-nach-dem-Relaunch-300x201.jpg" alt="" title="vhs-Website-nach-dem-Relaunch" width="300" height="201" class="size-medium wp-image-454" /></a><p class="wp-caption-text">Mit frischer Optik ins neue Jahrzehnt</p></div>
<p>Der Besucher findet auf der neuen Homepage vor allem mehr Information. War die alte Seite eher eine digitale Version des Programmheftes zeigt der neue Auftritt, was die vhs Kreis Kronach neben dem klassischen Unterrichtsprogramm sonst noch tut &#8211; von internationalen Projekten bis hin zu Firmenkooperationen. Damit das auch alles aktuell bleibt werkelt im Hintergrund als CMS <a href="http://wordpress.org/">WordPress</a>. Da man als vhs auch im Bloggingbereich, bei Youtube und bei Facebook st&#228;rker vertreten sein will erlaubt es der Einsatz von WordPress f&#252;r den Internetauftritt, ohne doppelten Schulungsaufwand gleich zwei Kan&#228;le zu bedienen. </p>
<p>Und nicht nur in Sachen Web 2.0 wird in Zukunft noch das ein oder andere zu sehen sein, eine f&#252;r den mobilen Einsatz optimierte Version der Homepage ist bereits in Arbeit und &#252;ber den Winter wird auch in Sachen Barrierefreiheit noch das ein oder andere verwirklicht werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://50north.de/relaunch-der-vhs-kreis-kronach/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mach ma&#160;kleiner!</title>
		<link>http://50north.de/mach-ma-kleiner/</link>
		<comments>http://50north.de/mach-ma-kleiner/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 11:35:16 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[It's all about speed!]]></category>
		<category><![CDATA[Webworkertools]]></category>

		<guid isPermaLink="false">http://50north.de/?p=424</guid>
		<description><![CDATA[An allen Ecken und Enden wird optimiert, was das Zeug h&#228;lt. Bei Javascript und CSS geh&#246;rt es quasi mittlerweile zum guten Ton, das ganze um Leerzeichen und Kommentare bereinigt auszuliefern, um die Dateigr&#246;&#223;e zu minimieren und damit die Ladezeiten zu optimieren. Bei Bildern, so scheint es, ist diese Erkenntnis noch nicht &#252;berall angekommen. Aber auch hier steckt immenses Optimierungspotential. ]]></description>
			<content:encoded><![CDATA[<p>An allen Ecken und Enden wird optimiert, was das Zeug h&#228;lt. Bei Javascript und CSS geh&#246;rt es quasi mittlerweile zum guten Ton, das ganze um Leerzeichen und Kommentare bereinigt auszuliefern, um die Dateigr&#246;&#223;e zu minimieren und damit die Ladezeiten zu optimieren. Bei Bildern, so scheint es, ist diese Erkenntnis noch nicht &#252;berall angekommen. Aber auch hier steckt immenses Optimierungspotential. </p>
<p>Zwei Apps erleichtern dem Webworker dabei die t&#228;gliche Arbeit. </p>
<h3>Smaller</h3>
<p><img src="http://50north.de/wp-content/uploads/2011/08/Smaller.png" alt="" title="Smaller" width="128" height="128" class="alignleft size-full wp-image-428" />Sicher, es gibt diverse <a href="http://refresh-sf.com/yui/">Online-L&#246;sungen</a>, die ein unkomprimiertes Javascript oder CSS durch den <a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a> jagen und man kann sich diesen nat&#252;rlich auch selbst installieren, aber eine grafische Oberfl&#228;che, die auch Dateien per Stapelverarbeitung abarbeiten kann, w&#228;re schon sch&#246;n. Genau das leistet die Shareware <a href="http://smallerapp.com/">Smaller</a>, die dar&#252;ber hinaus auch noch HTML komprimiert. Mit $20 nicht ganz billig, aber ich m&#246;chte im t&#228;glichen Arbeitsablauf nicht mehr darauf verzichten m&#252;ssen. Neben der reinen Komprimierung kann das Programm dar&#252;ber hinaus auch noch mehrere Dateien zu einer kombinieren.</p>
<h3>ImageOptim</h3>
<p><img src="http://50north.de/wp-content/uploads/2011/08/ImageOptim.png" alt="" title="ImageOptim" width="128" height="128" class="alignleft size-full wp-image-427" />Eine verlustfreie Komprimierung von Bildern hat sich dagegen <a href="http://imageoptim.pornel.net/">ImageOptim</a> auf die Fahnen geschrieben. Auch hier ist eine Stapelverarbeitung m&#246;glich, das Tool unterst&#252;tzt alle g&#228;ngigen Web-Grafikformate (inkl. animierterter GIFs, sofern das heutzutage noch jemand braucht) und w&#228;hlt selbst&#228;ndig die beste Kompressionsmethode. Selbst aus Bilder, die in Photoshop mit „F&#252;r Web speichern” gespeichert wurden kitzelt es noch ein paar Prozent raus. Punkten kann das Tool auch beim Preis, es ist n&#228;mlich Freeware.</p>
<p>Kleinere Dateien wirken sich nicht nur bei der Ladezeit positiv aus sondern mitunter auch im Geldbeutel, beispielweise wenn man seine Bild- und CSS-Dateien &#252;ber ein CDN ausliefern l&#228;sst.</p>
]]></content:encoded>
			<wfw:commentRss>http://50north.de/mach-ma-kleiner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Konfigurierbare Produkte mit&#160;individuellen Preisen</title>
		<link>http://50north.de/konfigurierbare-produkte-mit-individuellenpreisen/</link>
		<comments>http://50north.de/konfigurierbare-produkte-mit-individuellenpreisen/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 13:32:21 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[E-Commerce]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Real-World-Problems]]></category>

		<guid isPermaLink="false">http://50north.de/?p=403</guid>
		<description><![CDATA[Bei manchen Funktionalit&#228;ten, die in Magento eingebaut sind, fragt man sicht schon, ob man bei Varien mit dem, was man sich da zusammenkl&#246;ppelt, auch einen Praxisbezug sieht oder ob man einfach irgendwas programmiert, egal ob es in der Praxis brauchbar ist oder nicht. Die Preisvergabe bei konfigurierbaren Produkten ist so ein Fall. ]]></description>
			<content:encoded><![CDATA[<p>Bei manchen Funktionalit&#228;ten, die in Magento eingebaut sind, fragt man sicht schon, ob man bei Varien mit dem, was man sich da zusammenkl&#246;ppelt, auch einen Praxisbezug sieht oder ob man einfach irgendwas programmiert, egal ob es in der Praxis brauchbar ist oder nicht. Die Preisvergabe bei konfigurierbaren Produkten ist so ein Fall. Magento sieht von Haus aus vor, dass man einer Variante, etwa einer anderen Gr&#246;&#223;e, einen festen oder prozentualen Aufpreis geben kann. Oder anders gesagt, die untenstehende Preismatrix funktioniert mit diesem System schon nicht mehr:</p>
<table>
<tr>
<th>&nbsp;</th>
<th>11cm</th>
<th>15cm</th>
</tr>
<tr>
<th>natur</th>
<td>28,40</td>
<td>31,80</td>
</tr>
<tr>
<th>Goldrand</th>
<td>31,20</td>
<td>34,90</td>
</tr>
<tr>
<th>lasiert</th>
<td>34,60</td>
<td>40,70</td>
</tr>
</table>
<p>Denn bei natur kostet die 15cm-Variante 3,40 Euro mehr, bei Goldrand aber schon 3,70 Euro und bei lasiert gar 6,10 Euro. Das l&#228;sst sich weder durch einen Fixpreis noch durch einen prozentualen Aufschlag abdecken und wenn man dann noch bedenkt, dass man das auch noch f&#252;r die Ausf&#252;hrung (natur, Goldrand, lasiert) machen muss bricht das ganze System in sich zusammen.</p>
<p>Zum Gl&#252;ck gibt es eine L&#246;sung, die eigentlich so naheliegend ist, dass man sich fragt, warum Magento das nicht einfach von Haus aus kann: <a href="http://www.magentocommerce.com/magento-connect/Matt+Dean/extension/596/simple-configurable-products">Simple Configurable Products</a>. Die Erweiterung sorgt daf&#252;r, dass einfach der direkt beim Produkt hinterlegte Preis benutzt wird. Und nicht irgendwelche komischen Berechnungen durchgef&#252;hrt werden, die am Ende doch nicht zum gew&#252;nschten Ergebnis f&#252;hren. </p>
<p>Einen kleinen Bug hat die Erweiterung aber: Zeigt man die gew&#228;hlte Option im Warenkorb an, dann wird immer das Admin-Label f&#252;r das Attribut verwendet, welches nicht mehrsprachig ist. Aber daf&#252;r gibt es Abhilfe. Die Datei, um die es geht, ist <tt>Checkout/Block/Cart/Item/Renderer.php</tt>. Dort findet sich in Zeile 81:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #0000ff;">'label'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$attribute</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getFrontendLabel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span></pre></div></div>

<p>Das muss lediglich durch</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #0000ff;">'label'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$attribute</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getStoreLabel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span></pre></div></div>

<p>ersetzt werden und schon sind die Label auch in der jeweiligen Store-Sprache.</p>
]]></content:encoded>
			<wfw:commentRss>http://50north.de/konfigurierbare-produkte-mit-individuellenpreisen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

