<?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>Blog :: deam.org &#187; combined js</title>
	<atom:link href="http://blog.deam.org/tag/combined-js/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.deam.org</link>
	<description>hier schreibt Klaus M. Brantl</description>
	<lastBuildDate>Wed, 25 Jan 2012 16:18:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Technik hinter Hausverbrauch.de: Ladezeit</title>
		<link>http://blog.deam.org/2010/07/21/technik-hinter-hausverbrauch-de-ladezeit/</link>
		<comments>http://blog.deam.org/2010/07/21/technik-hinter-hausverbrauch-de-ladezeit/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 06:53:45 +0000</pubDate>
		<dc:creator>Klaus M. Brantl</dc:creator>
				<category><![CDATA[Hausverbrauch.de]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[combined css]]></category>
		<category><![CDATA[combined js]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[GZIP]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[S3]]></category>

		<guid isPermaLink="false">http://blog.deam.org/?p=398</guid>
		<description><![CDATA[Das wir das ganze mit PHP und MySQL umgesetzt haben, sollte einigermassen klar sein. Natürlich kommt auch hier wieder das deam.org-framework zum Einsatz. Interessanter ist es einige andere Aspekte der Umsetzung zu beleuchten. Nur zur Erinnerung: wir sind noch nicht fertig und es gibt noch eine grosse Menge an Bestandteilen, die optimierungsbedürftig sind. Ich werden [...]]]></description>
			<content:encoded><![CDATA[<p>Das wir das ganze mit PHP und MySQL umgesetzt haben, sollte einigermassen klar sein. Natürlich kommt auch hier wieder das deam.org-framework zum Einsatz.</p>
<p>Interessanter ist es einige andere Aspekte der Umsetzung zu beleuchten. Nur zur Erinnerung: wir sind noch nicht fertig und es gibt noch eine grosse Menge an Bestandteilen, die optimierungsbedürftig sind.<br />
Ich werden über die nächsten Wochen in loser Folge über einige der &#8220;Frontend-Aspekte&#8221; schreiben. Vor allem auch über das &#8220;Warum&#8221; einzelner Entscheidungen.</p>
<p>Die Schwerpunkte bisher waren:</p>
<ol>
<li><strong>Ladezeit</strong>: Alles kombinieren und komprimieren.</li>
<li><strong>Verteilung</strong>: Statische Bestandteile nicht via www.hausverbrauch.de, sondern via Amazon-S3</li>
<li><strong>ein Markup</strong>: Die mobile Version unterscheidet sich im HTML-Markup nicht von der Desktop-Version</li>
<li><strong>kein IE6</strong>: naja &#8211; eigentlich mehr nach dem Motto &#8220;<strong>CSS3 anstatt Workarounds</strong>&#8220;</li>
</ol>
<h2><span id="more-398"></span>Ladezeit</h2>
<p>Die Startseite von https://www.hausverbrauch.de/ löst aktuell 6 Requests aus und hat knapp 120kb an Datenmenge zu transferieren.<br />
Das ist zugegebenermassen noch immer zu viel. Das reine HTML in gepackter Form schlägt mit nur 2,4kb zu Buche und das Logo erreicht fast 16kb.</p>
<p>Der Löwenanteil ist das &#8220;combo.min.gz.js&#8221; mit fast 92kb.<br />
Dieses Javascript-Bundle ist noch wenig optimiert. Es enthält diese Einzelpakete:</p>
<ul>
<li>jquery-1.4.2.min.js</li>
<li>jquery.cookie-1.0.min.js</li>
<li>jquery-ui-1.8.custom.min.js</li>
<li>jquery.bgiframe-2.1.1.min.js</li>
<li>jquery.passStrengthener-0.9.1.min.js</li>
<li>jquery.tooltip-1.3.min.js</li>
<li>jquery.scrollTo-1.4.0.min.js</li>
<li>jquery.flot.min.js</li>
<li>jquery.flot.selection.min.js</li>
<li>functions.min.js</li>
</ul>
<p>Den verhältnismässig größten Anteil übernimmt jQuery-UI. Wir verwenden nicht alle UI-Funktionen, dennoch ist das ganze Paket enthalten. Das wollen wir im Laufe der Beta-Phase noch korrigieren. Aktuell gehe ich davon aus, das wir für &#8220;combo.min.gz.js&#8221; im gepackten Zustand etwa 50kb erreichen können.</p>
<p>Ausserdem enthält &#8220;combo.min.gz.js&#8221; auch Scripte die in der mobilen Version nicht zum Tragen kommen. Hier werden wir noch überlegen inwieweit eine getrennte Auslieferung hier vielleicht noch Vorteile bringen kann.</p>
<p>Randbemerkung:<br />
Es wird landläufig empfohlen Javascript-Files nicht im &lt;head&gt;, sondern am Ende des &lt;body&gt; zu platzieren, da ein JS-Download im &lt;head&gt; &#8220;blocking&#8221; ist. Das ist allerdings nicht ganz unproblematisch und bedeutet auch, das bestimmte Funktionen noch nicht nutzbar sind. Man muss hier im Grunde dann sehr stark mit DOM-Operationen arbeiten und das ist zumindest bei IE7 und IE8 nicht wirklich spassig (jedenfalls nicht, wenn man einen betagten WIndows-Rechner im Einsatz hat).</p>
<p>Zum Kombinieren und Komprimieren verwende ich ein einfaches Shell-Script. Hier ein beispielhafter Codeauszug:</p>
<pre class="ln-"><code class="html">#!/bin/bash
echo '** kombiniere alle js-files'
cat htdocs/static/libraries/jquery-1.4.2.min.js &gt; htdocs/static/libraries/combo.min.js
cat htdocs/static/libraries/jquery.cookie-1.0.min.js &gt;&gt; htdocs/static/libraries/combo.min.js
cat htdocs/static/libraries/jquery-ui-1.8.custom.min.js &gt;&gt; htdocs/static/libraries/combo.min.js
cat htdocs/static/libraries/functions.min.js &gt;&gt; htdocs/static/libraries/combo.min.js

echo 'gzip-Version'
gzip -9 &lt; htdocs/static/libraries/combo.min.js &gt; htdocs/static/libraries/combo.min.gz.js
</code></pre>
<p>Die Dateiendung hat seinen Sinn:<br />
Entweder hat man einen Apache mit mod_headers und kann dann eine solche Konfiguration einsetzen:</p>
<pre class="ln-"><code class="php">&lt;FilesMatch "(.gz.js|.gz.css)$"&gt;
        Header add "Content-Encoding" "gzip"
&lt;/FilesMatch&gt;
</code></pre>
<p>Oder man verwendet Amazon-S3 und setzt den &#8220;Content-Encoding&#8221;-Header beim Upload der Datei auf &#8220;gzip&#8221;.</p>
<p>Achja: Das Minify machen wir derzeit mit dem yuicompressor-2.4.2.jar. Das hat mehr oder weniger historische Gründe. Ich werde mir bei Gelegenheit noch Alternativen ansehen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deam.org/2010/07/21/technik-hinter-hausverbrauch-de-ladezeit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

