<?xml version="1.0" encoding="utf-8" ?>

<rdf:RDF 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns="http://my.netscape.com/rdf/simple/0.9/">
<channel>
    <title>Sascha Hameisters Javascript Input Output</title>
    <link>http://www.javascript.io/</link>
    <description>Javascript-Blog im Web...</description>
    <dc:language>de</dc:language>

    <image rdf:resource="http://www.javascript.io/templates/default/img/s9y_banner_small.png" />

    <items>
      <rdf:Seq>
        <rdf:li resource="http://www.javascript.io/index.php?/archives/47-guid.html" />
        <rdf:li resource="http://www.javascript.io/index.php?/archives/51-guid.html" />
        <rdf:li resource="http://www.javascript.io/index.php?/archives/52-guid.html" />
        <rdf:li resource="http://www.javascript.io/index.php?/archives/56-guid.html" />
        <rdf:li resource="http://www.javascript.io/index.php?/archives/48-guid.html" />
        <rdf:li resource="http://www.javascript.io/index.php?/archives/53-guid.html" />
        <rdf:li resource="http://www.javascript.io/index.php?/archives/44-guid.html" />
        <rdf:li resource="http://www.javascript.io/index.php?/archives/45-guid.html" />
        <rdf:li resource="http://www.javascript.io/index.php?/archives/46-guid.html" />
        <rdf:li resource="http://www.javascript.io/index.php?/archives/55-guid.html" />
        <rdf:li resource="http://www.javascript.io/index.php?/archives/39-guid.html" />
        <rdf:li resource="http://www.javascript.io/index.php?/archives/40-guid.html" />
        <rdf:li resource="http://www.javascript.io/index.php?/archives/42-guid.html" />
        <rdf:li resource="http://www.javascript.io/index.php?/archives/38-guid.html" />
        <rdf:li resource="http://www.javascript.io/index.php?/archives/34-guid.html" />
      </rdf:Seq>
    </items>
</channel>

<image rdf:about="http://www.javascript.io/templates/default/img/s9y_banner_small.png">
        <url>http://www.javascript.io/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Sascha Hameisters Javascript Input Output - Javascript-Blog im Web...</title>
        <link>http://www.javascript.io/</link>
        <width>100</width>
        <height>21</height>
    </image>


<item rdf:about="http://www.javascript.io/index.php?/archives/47-guid.html">
    <title>Piping bei der Variablenzuweisung</title>
    <link>http://www.javascript.io/index.php?/archives/47-Piping-bei-der-Variablenzuweisung.html</link>
    <description>
    Pipes dienen in Javascript bekannterweise als logisches ODER. Neben dem Einsatz für Fallunterscheidungen lassen sich Pipes auch sehr gut zur direkten Wertzuweisung nutzen. Als Beispiel dient eine Methode mit einem Parameter &lt;code&gt;param1&lt;/code&gt;, dessen Standartwert &lt;code&gt;0&lt;/code&gt; sein soll, wenn kein Parameter angegeben wurde. Hierfür könnte man mit Fallunterscheidungen arbeiten, aber ist folgender Code nicht viel eleganter?
&lt;pre&gt;&lt;code&gt;function dummy (param1) {
    var param1 = param1 || 0;
}&lt;/code&gt;&lt;/pre&gt;
 
    </description>

    <dc:publisher>Sascha Hameisters Javascript Input Output</dc:publisher>
    <dc:creator>nospam@example.com (Sascha Hameister)</dc:creator>
    <dc:subject>
    Syntax, </dc:subject>
    <dc:date>2008-05-17T12:00:00Z</dc:date>
    <wfw:comment>http://www.javascript.io/wfwcomment.php?cid=47</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.javascript.io/rss.php?version=1.0&amp;type=comments&amp;cid=47</wfw:commentRss>
    
    
</item>
<item rdf:about="http://www.javascript.io/index.php?/archives/51-guid.html">
    <title>Dokumentierst du noch oder codest du schon?</title>
    <link>http://www.javascript.io/index.php?/archives/51-Dokumentierst-du-noch-oder-codest-du-schon.html</link>
    <description>
    Ohne groß zu überlegen würde ich fehlende Dokumentation als Hauptmängel hergestellter Javascript-Quelltexte bezeichnen. In manchen Projekten würde ich gerne alle Mitentwickler in ein Seminar alá  „Dokumentieren – Wie, Wann, Warum“ verfrachten. Fragt sich nur, was schlimmer ist – undokumentierter Code oder schlecht/falsch dokumentierter Code. Gerade habe ich mal wieder so etwas gefunden. Wie soll mir folgende &lt;i&gt;Dokumentation&lt;/i&gt; helfen?
&lt;pre&gt;&lt;code&gt;/**
 * Does some magic. Expects 2 integer params and returns the correct resultvalue for us
**/&lt;/code&gt;&lt;/pre&gt;
Aah, nun bin ich schlauer… nein, nicht wirklich - wirklich nicht!&lt;br /&gt;&lt;br /&gt;
&lt;em&gt;Javascript-Entwickler dieser Welt, bitte dokumentiert!&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;
Das ist auch ganz einfach! Haltet euch an die &lt;a href=&quot;http://www.scriptdoc.org/specification.htm&quot;&gt;Spezifikationen&lt;/a&gt; und erzeugt eine schicke Dokumentation mit dem &lt;a href=&quot;http://jsdoctoolkit.org/&quot;&gt;JSDoc Toolkit&lt;/a&gt;. Einen besseren Weg, mich als Freund zu bekommen, gibt es nicht. &lt;img src=&quot;http://www.javascript.io/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;&lt;br /&gt; 
    </description>

    <dc:publisher>Sascha Hameisters Javascript Input Output</dc:publisher>
    <dc:creator>nospam@example.com (Sascha Hameister)</dc:creator>
    <dc:subject>
    Syntax, </dc:subject>
    <dc:date>2008-05-14T10:00:00Z</dc:date>
    <wfw:comment>http://www.javascript.io/wfwcomment.php?cid=51</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.javascript.io/rss.php?version=1.0&amp;type=comments&amp;cid=51</wfw:commentRss>
    
    
</item>
<item rdf:about="http://www.javascript.io/index.php?/archives/52-guid.html">
    <title>Tipp der Woche: Ich packe meinen Koffer…</title>
    <link>http://www.javascript.io/index.php?/archives/52-Tipp-der-Woche-Ich-packe-meinen-Koffer.html</link>
    <description>
    …und natürlich auch meine Javascript-Quelltexte und zwar mit dem &lt;a href=&quot;http://developer.yahoo.com/yui/compressor/&quot;&gt;YUI Compressor&lt;/a&gt;, einem Java-Programm, dass die Vorteile von Douglas Crockfords &lt;a href=&quot;http://crockford.com/javascript/jsmin&quot;&gt;JS Minifier&lt;/a&gt;, Dojos &lt;a href=&quot;http://dojotoolkit.org/docs/shrinksafe&quot;&gt;Shrinksafe&lt;/a&gt; und Dean Edwards &lt;a href=&quot;http://dean.edwards.name/packer/&quot;&gt;Packer&lt;/a&gt; vereint. Toll an der Java-Variante ist, dass sie ganz einfach in den Deployment-Prozess mit &lt;code&gt;ant&lt;/code&gt; eingebunden werden kann.&lt;br /&gt;&lt;br /&gt;
&lt;a href=&quot;http://blog.datanomisch.de/&quot;&gt;Timo&lt;/a&gt; hat mich noch auf den &lt;a href=&quot;http://www.jasob.com/&quot;&gt;Javascript and CSS Obfuscator&lt;/a&gt; aufmerksam gemacht. Schau ich mir auf jeden Fall mal an! Ihr auch? &lt;img src=&quot;http://www.javascript.io/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;  
    </description>

    <dc:publisher>Sascha Hameisters Javascript Input Output</dc:publisher>
    <dc:creator>nospam@example.com (Sascha Hameister)</dc:creator>
    <dc:subject>
    Tipp der Woche, </dc:subject>
    <dc:date>2008-05-12T12:00:00Z</dc:date>
    <wfw:comment>http://www.javascript.io/wfwcomment.php?cid=52</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.javascript.io/rss.php?version=1.0&amp;type=comments&amp;cid=52</wfw:commentRss>
    
    
</item>
<item rdf:about="http://www.javascript.io/index.php?/archives/56-guid.html">
    <title>Tipps der Woche: Silverlight</title>
    <link>http://www.javascript.io/index.php?/archives/56-Tipps-der-Woche-Silverlight.html</link>
    <description>
    In dieser Woche steht der thematische Stern bei mir auf &lt;a href=&quot;http://www.silverlight.net&quot;&gt;Silverlight&lt;/a&gt;, denn ich bin für Microsoft auf der &lt;a href=&quot;http://www.fmx.de&quot;&gt;fmx&lt;/a&gt; im Sinne von Silverlight unterwegs. Mehrfach wurde ich nun gefragt, ob ich nicht einen guten Tipp zum Lernen der Entwicklung mit Silverlight hätte. Mein Geheimtipp ist die Seite &lt;a href=&quot;http://slxlbc.datenverdrahten.de/&quot;&gt;Silverlight - Learning bei Coding&lt;/a&gt; von Datenverdrahten. Weil es aber noch mehr gute Links zum Thema gibt, heisst dieses Special heute ausnahmsweise &lt;b&gt;Tipps der Woche&lt;/b&gt;.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://slxlbc.datenverdrahten.de/&quot;&gt;Silverlight - Learning bei Coding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.silverlight.net/quickstarts/&quot;&gt;Silverlight Quickstarts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://designwithsilverlight.com/&quot;&gt;Design with Silverlight&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://silverlight.net/Learn/&quot;&gt;Video Tutorials&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;em&gt;Frage&lt;/em&gt;&lt;br /&gt;
Wie habt ihr Silverlight gelernt? Habt ihr bereits schicke Schmuckstücke online (Wo?)? Warum habt ihr euch für Silverlight entschieden? 
    </description>

    <dc:publisher>Sascha Hameisters Javascript Input Output</dc:publisher>
    <dc:creator>nospam@example.com (Sascha Hameister)</dc:creator>
    <dc:subject>
    Silverlight, Tipp der Woche, </dc:subject>
    <dc:date>2008-05-06T12:00:00Z</dc:date>
    <wfw:comment>http://www.javascript.io/wfwcomment.php?cid=56</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.javascript.io/rss.php?version=1.0&amp;type=comments&amp;cid=56</wfw:commentRss>
    
    
</item>
<item rdf:about="http://www.javascript.io/index.php?/archives/48-guid.html">
    <title>Konstanten berechnen oder kommentieren</title>
    <link>http://www.javascript.io/index.php?/archives/48-Konstanten-berechnen-oder-kommentieren.html</link>
    <description>
    Performance gegen gut wartbaren, übersichtlichen Code. Mehrfach habe ich schon geschrieben, dass ich es wichtig finde hier die richtige Balance einzuhalten. Doch wo beginnt die richtige Balance und wo endet Sie, wenn man sich sicher ist einen Quelltext eigentlich nur ein Mal anzufassen, wie beispielsweise beim Setzen einer Konstante? Als Beispiel habe ich mir Zeit ausgesucht, denn Zeit ist so wunderbar konstant und klar geregelt. In einem Snippet von mir habe ich folgende Zeilen entdeckt:
&lt;pre&gt;&lt;code&gt;// Variante 1
TIME = {
	MILLISECOND:   1,
	SECOND:     1000,
	MINUTE:     1000 * 60,
	HOUR:       1000 * 60 * 60,
	DAY:        1000 * 60 * 60 * 24,
	WEEK:       1000 * 60 * 60 * 24 * 7,
	MONTH:      1000 * 60 * 60 * 24 * 30,
	YEAR:       1000 * 60 * 60 * 24 * 365
}&lt;/pre&gt;&lt;/code&gt;
Aber muss der Browser wirklich bei jedem Aufruf diese Konstanten berechnen, wenn wir ihm nicht vorher die Arbeit abnehmen könnten? Das könnte dann kommentiert so aussehen:
&lt;pre&gt;&lt;code&gt;// Variante 2
TIME = {
	MILLISECOND:      1, // 1
	SECOND:        1000, // 1000 *  1 
	MINUTE:       60000, // 1000 * 60
	HOUR:       3600000, // 1000 * 60 * 60
	DAY:     1000606024, // 1000 * 60 * 60 * 24
	WEEK:    7004242168, // 1000 * 60 * 60 * 24 *   7
	MONTH: 100060602430, // 1000 * 60 * 60 * 24 *  30
	YEAR:  365221198760  // 1000 * 60 * 60 * 24 * 365
}&lt;/pre&gt;&lt;/code&gt;
&lt;a href=&quot;http://www.antfarm.de/&quot;&gt;Sean&lt;/a&gt; hat vor dem Verfassen des Artikels mit mir darüber sinniert, dass Variante 2 zwar eine höhere Performance hätte, aber natürlich auch wesentlich feheranfälliger wäre, da man hier nicht auf einen Blick erkennen kann, ob hohe Zahlen wirklich stimmen.&lt;br /&gt;&lt;br /&gt;
Als gangbarer Mittelweg ist uns folgender eingefallen:
&lt;pre&gt;&lt;code&gt;// Variante 3
TIME = {
	MILLISECOND:    1,
	SECOND:      1000 * TIME.MILLISECOND,
	MINUTE:        60 * TIME.SECOND,
	HOUR:          60 * TIME.MINUTE,
	DAY:           24 * TIME.HOUR,
	WEEK:           7 * TIME.DAY,
	MONTH:         30 * TIME.MONTH,
	YEAR:         365 * TIME.DAY
}&lt;/code&gt;&lt;/pre&gt;
Hier werden zwar Rechnungen vorgenommen, aber wesentlich weniger als in Variante 1 und der Code ist lesbarer als  Variante 2, dadurch aber langsamer.&lt;br /&gt;&lt;br /&gt;
&lt;em&gt;Fazit&lt;/em&gt;&lt;br /&gt;
Es gibt immer wieder Orte, an denen man Abstriche machen muss und viele akzeptable Lösungen, je nach Zielanspruch. Welche wir wählen, sollte von den Vorraussetzungen des Produktes abhängen.&lt;br /&gt;&lt;br /&gt;
&lt;em&gt;Frage&lt;/em&gt;&lt;br /&gt;
Welche der drei oben genannten Varianten findet ihr am besten? Welche würdet ihr am ehesten in Projekten einsetzen? Habt ihr vielleicht eine noch ganz andere Idee, solche Konstanten sinnvoll zu definieren? Ich freue mich auf Kommentare!&lt;br /&gt;&lt;br /&gt; 
    </description>

    <dc:publisher>Sascha Hameisters Javascript Input Output</dc:publisher>
    <dc:creator>nospam@example.com (Sascha Hameister)</dc:creator>
    <dc:subject>
    Performance, </dc:subject>
    <dc:date>2008-05-02T11:00:00Z</dc:date>
    <wfw:comment>http://www.javascript.io/wfwcomment.php?cid=48</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.javascript.io/rss.php?version=1.0&amp;type=comments&amp;cid=48</wfw:commentRss>
    
    
</item>
<item rdf:about="http://www.javascript.io/index.php?/archives/53-guid.html">
    <title>Tipp der Woche: Google Caja</title>
    <link>http://www.javascript.io/index.php?/archives/53-Tipp-der-Woche-Google-Caja.html</link>
    <description>
    &lt;a href=&quot;http://www.antfarm.de/&quot;&gt;Sean&lt;/a&gt; hat mich an einem netten Abend auf ein Projekt von Google aufmerksam gemacht. Viele moderne Webanwendungen beziehen Daten, wie zum Beispiel News von anderen Seiten via RSS und binden Diese dann direkt ein. Hierfür gab es bisher zwei relativ einfache Wege.
&lt;ol&gt;
&lt;li&gt;Einbindung mit potenziell gefährlichem Fremd-Javascript&lt;/li&gt;
&lt;li&gt;Einbindung ohne Javascripts (durch Herausparsen der Informationen)&lt;/li&gt;
&lt;/ol&gt;

Gar kein Javascript durch zu lassen hat natürlich den Vorteil keine Angriffsfläche zu bieten, aber den großen Nachteil, dass schicke aktive Inhalte/Widgets nicht in der jeweiligen Seite platziert werden können.&lt;br /&gt;&lt;br /&gt;

Genau an dieser Stelle kommt &lt;a href=&quot;http://code.google.com/p/google-caja/&quot;&gt;Google Caja&lt;/a&gt; ins Spiel. Caja hat das Ziel Fremdseiten ein Subset der Javascript-Funktionalität auf der eigenen Seite anzubieten. Hierbei sollen nur selbst mitgelieferte Elemente des DOMs verändert werden dürfen.&lt;br /&gt;&lt;br /&gt;Ein sehr interessanter Ansatz, der einen Blick wert ist!&lt;br /&gt;&lt;br /&gt; 
    </description>

    <dc:publisher>Sascha Hameisters Javascript Input Output</dc:publisher>
    <dc:creator>nospam@example.com (Sascha Hameister)</dc:creator>
    <dc:subject>
    Tipp der Woche, Tricks 4 Geeks, </dc:subject>
    <dc:date>2008-04-29T12:00:00Z</dc:date>
    <wfw:comment>http://www.javascript.io/wfwcomment.php?cid=53</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.javascript.io/rss.php?version=1.0&amp;type=comments&amp;cid=53</wfw:commentRss>
    
    
</item>
<item rdf:about="http://www.javascript.io/index.php?/archives/44-guid.html">
    <title>Zuweisungen nach Fallunterscheidungen</title>
    <link>http://www.javascript.io/index.php?/archives/44-Zuweisungen-nach-Fallunterscheidungen.html</link>
    <description>
    Letzten Sonntag habe ich euch mein &lt;a href=&quot;http://javascript.io/index.php?/archives/55-Javascript-Methoden-profilen-Profile.js.html&quot;&gt;Profiler.js&lt;/a&gt; vorgestellt. Heute folgen erste Ergebnisse. Ich habe gespielt mit Zuweisungen nach Fallunterscheidungen. Als Beispiel dient uns nun der Fall, eine numerische Variable zu haben, dessen Wert wir einer anderen zuweisen möchten, ausser wenn sie kleiner als 0 ist, dann soll die neue Variable 0 enthalten. Hierfür habe ich 3 Lösungsansätze ausprobiert.
&lt;pre&gt;&lt;code&gt;
var givenValue = 100;

// Variante 1: Ternärer Operator
newValue = (givenValue &lt; 0 ? 0 : givenValue);

// Variante 2: Nutzung der Math.max-Methode
newValue = Math.max(givenValue, 0);

// Variante 3: if-else-Kontrollstruktur
if (givenValue &lt; 0) {
    newValue = 0;
} else {
    newValue = givenValue;
}&lt;/code&gt;&lt;/pre&gt;
&lt;em&gt;Ergebnis&lt;/em&gt;&lt;br /&gt;
Zu meiner ersten Überraschung war Variante 2 diejenige, die am längsten dauert (Ich hatte vom Aufruf Javascript-interner Methoden mehr Power erwartet). Der ternäre Operator verweilt ganz knapp hinter dem &lt;i&gt;normalen&lt;/i&gt; if-else auf Platz 2.&lt;br /&gt;&lt;br /&gt;
&lt;em&gt;Fazit&lt;/em&gt;&lt;br /&gt;
Von allen drei Fällen ist die if-else-Variante die schnellste. Diese spricht mich auch von der Codelesbartkeit am meisten an. Sofort ist verständlich, was das Programm an dieser Stelle tun soll.&lt;br /&gt;&lt;br /&gt;
&lt;em&gt;Frage&lt;/em&gt;&lt;br /&gt;
Habt ihr noch eine weitere Variante, die hier gebenchmarked werden soll? Wie steht ihr zu Cleverness im Code? Wo fühlt ihr euch mehr zu Hause - bei gut lesbarem normalem Code oder cleverem, trickreichen, aber gut dokumentiertem Code? 
    </description>

    <dc:publisher>Sascha Hameisters Javascript Input Output</dc:publisher>
    <dc:creator>nospam@example.com (Sascha Hameister)</dc:creator>
    <dc:subject>
    Performance, Syntax, Tricks 4 Geeks, </dc:subject>
    <dc:date>2008-04-27T14:00:00Z</dc:date>
    <wfw:comment>http://www.javascript.io/wfwcomment.php?cid=44</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.javascript.io/rss.php?version=1.0&amp;type=comments&amp;cid=44</wfw:commentRss>
    
    
</item>
<item rdf:about="http://www.javascript.io/index.php?/archives/45-guid.html">
    <title>Tipp der Woche: Einwegverschlüsselung</title>
    <link>http://www.javascript.io/index.php?/archives/45-Tipp-der-Woche-Einwegverschluesselung.html</link>
    <description>
    Verschlüsselung mit Javascript ist schon immer ein Thema gewesen. Besonders dann, wenn man nicht die Möglichkeit hat einen Server mit https zu betreiben, ist es sinnvoll Logindaten (Benutzername, Passwort,…) wenigstens mit einem &lt;a href=&quot;http://de.wikipedia.org/wiki/Pre-shared_key&quot;&gt;Pre-shared Key&lt;/a&gt; zu verschlüsseln. Hierzu bieten sich MD5 oder SHA1 an. Paul Johnston hat sich die Mühe gemacht und &lt;a href=&quot;http://pajhome.org.uk/crypt/md5/index.html&quot;&gt;MD4, MD5 und SHA1 mit Javascript&lt;/a&gt; zu realisieren. Nicht wirklich der schönste Code, aber es funktioniert (und vielleicht erbarmt sich ja einmal Jemand, Diesen umzuschreiben).  
    </description>

    <dc:publisher>Sascha Hameisters Javascript Input Output</dc:publisher>
    <dc:creator>nospam@example.com (Sascha Hameister)</dc:creator>
    <dc:subject>
    Tricks 4 Geeks, </dc:subject>
    <dc:date>2008-04-22T12:00:00Z</dc:date>
    <wfw:comment>http://www.javascript.io/wfwcomment.php?cid=45</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.javascript.io/rss.php?version=1.0&amp;type=comments&amp;cid=45</wfw:commentRss>
    
    
</item>
<item rdf:about="http://www.javascript.io/index.php?/archives/46-guid.html">
    <title>Performance: Pre-Inkrement/Post-Inkrement</title>
    <link>http://www.javascript.io/index.php?/archives/46-Performance-Pre-InkrementPost-Inkrement.html</link>
    <description>
    Ich muss mich hoch und heilig entschuldigen. Im Oktober habe ich &lt;a href=&quot;http://www.javascript.io/index.php?/archives/13-UEber-Flaschenhaelse-und-Schleifenkoepfe-2.html#extended&quot;&gt;über Flaschenhälse und Schleifenköpfe&lt;/a&gt; gebloggt. &lt;a href=&quot;http://www.antfarm.de&quot;&gt;Sean&lt;/a&gt; hatte die Idee, dass Pre-Inkremente schneller seien, als Post-Inkremente. Mit dem Profiler, den ich im Oktober genutzt habe, konnte ich keine Differenz feststellen und habe daher gebloggt, dass die Nutzung von Pre-/Post-Inkrement keinen Unterschied macht. Doch tatsächlich – es macht einen Unterschied. Pre-Inkremente sind &lt;b&gt;definitiv schneller&lt;/b&gt; als Post-Inkremente. Eine These dazu ist, dass sich die Umgebung nicht einen Moment länger die alte Variable merken muss. Testen könnt ihr das ganze mit dem &lt;a href=&quot;http://javascript.io/index.php?/archives/55-Javascript-Methoden-profilen-Profile.js.html&quot;&gt;Profile.js&lt;/a&gt; und folgendem Quelltext:
&lt;pre&gt;&lt;code&gt;profile([
    function() {
        var i = 0;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
    },
    function() {
        var i = 0;
        ++i;
        ++i;
        ++i;
        ++i;
        ++i;
        ++i;
        ++i;
        ++i;
        ++i;
        ++i;
    },
], 100000);&lt;/pre&gt;&lt;/code&gt; 
    </description>

    <dc:publisher>Sascha Hameisters Javascript Input Output</dc:publisher>
    <dc:creator>nospam@example.com (Sascha Hameister)</dc:creator>
    <dc:subject>
    Performance, </dc:subject>
    <dc:date>2008-04-21T09:00:00Z</dc:date>
    <wfw:comment>http://www.javascript.io/wfwcomment.php?cid=46</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.javascript.io/rss.php?version=1.0&amp;type=comments&amp;cid=46</wfw:commentRss>
    
    
</item>
<item rdf:about="http://www.javascript.io/index.php?/archives/55-guid.html">
    <title>Javascript-Methoden profilen: Profile.js</title>
    <link>http://www.javascript.io/index.php?/archives/55-Javascript-Methoden-profilen-Profile.js.html</link>
    <description>
    Um für zukünftige Blogartikel im Bereich Performance Javascripte plattform- und browserübergreifend auf ihre Geschwindigkeit hin testen zu können, habe ich mir hierzu ein Werkzeug gebaut. Es ist eine Javascript-Funktion, die sich um das Profiling übergebener Methoden kümmert. Übergeben wird ein Array mit Methoden, dessen Dauer getestet verglichen werden soll. Als zweiter Parameter wird die Anzahl der Durchläufe für jede Methode angegeben. Hier sollte man Werte ab 10.000 eintragen, da ein Unterschied sonst nahezu unmessbar ist. Als Resultat erhält man ein Array mit den Millisekunden, die die jeweilige Methode auf alle Cycles verbraucht hat. Die Sortierung des Arrays entspricht der Sortierung des Eingabearrays &lt;code&gt;methods&lt;/code&gt;. 

&lt;pre&gt;&lt;code&gt;function profile(methods, cycles) {
  var methodDurations = [];
  for(var i = 0, count = methods.length; i &lt; count; i++) {
	var methodStart = (new Date()).getTime();
	
	for(var j = 0; j &lt; cycles; j++) {
	  methods[i]();
	}
	
	var methodEnd = (new Date()).getTime();
	methodDurations.push(methodEnd - methodStart);
  }
  return methodDurations;
}&lt;/code&gt;&lt;/pre&gt;
&lt;em&gt;Ideen&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Validierung der Parameter&lt;/li&gt;
&lt;li&gt;Möglichkeit Parameter für die aufzurufenden Methoden zu übergeben&lt;/li&gt;
&lt;li&gt;Andere Ausgabeformate als Array&lt;/li&gt;
&lt;/ul&gt;
&lt;em&gt;Vorschläge&lt;/em&gt;&lt;br /&gt;
Habt ihr Ideen oder Vorschläge zum Profile.js? Was ist sinnvoll, was eher nicht? Welche Erweiterung würdet ihr euch wünschen? Fragen über Fragen, mich interessieren die Antworten. Ich freue mich auf Kommentare! &lt;img src=&quot;http://www.javascript.io/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;&lt;br /&gt; 
    </description>

    <dc:publisher>Sascha Hameisters Javascript Input Output</dc:publisher>
    <dc:creator>nospam@example.com (Sascha Hameister)</dc:creator>
    <dc:subject>
    Performance, </dc:subject>
    <dc:date>2008-04-20T08:00:00Z</dc:date>
    <wfw:comment>http://www.javascript.io/wfwcomment.php?cid=55</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.javascript.io/rss.php?version=1.0&amp;type=comments&amp;cid=55</wfw:commentRss>
    
    
</item>
<item rdf:about="http://www.javascript.io/index.php?/archives/39-guid.html">
    <title>Single Quotes oder Double Quotes</title>
    <link>http://www.javascript.io/index.php?/archives/39-Single-Quotes-oder-Double-Quotes.html</link>
    <description>
    Mit &lt;a href=&quot;http://blog.decaf.de/&quot;&gt;Dirk&lt;/a&gt; habe ich mir vor einigen Tagen darüber Gedanken gemacht, ob man wohl HTML-Attribute auch in Single Quots einschliessen dürfe. &lt;a href=&quot;http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.2&quot;&gt;Die Antwort liefert das W3C&lt;/a&gt; uns sie lautet eindeutig: Ja.  Die Frage, die sich mir aber aufdrängt ist aber, ob das überhaupt sinnvoll ist. Bisher schreibe ich HTML-Attribute stets in Double Quotes und alles rund um Javascript in Single Quotes.&lt;br /&gt;&lt;br /&gt;
&lt;em&gt;Beispiel&lt;/em&gt;
&lt;pre&gt;&lt;code&gt;HTML
&amp;lt;a href=&quot;http://www.javascript.io&quot; id=&quot;somelink&quot;&amp;gt;Javascript Blog&amp;lt;/a&amp;gt;

Javascript
document.getElementById(&#039;somelink&#039;);
&lt;/pre&gt;&lt;/code&gt;

&lt;em&gt;Frage&lt;/em&gt;&lt;br /&gt;
Wie macht ihr das? Habt ihr strikte Trennung verschiedener Quotes oder gar eine Coding Guideline für Javascript-/CSS-/HTML-Quelltext? Welche Quotes nutzt ihr für euren Preprozessor, wie &lt;a href=&quot;http://de2.php.net/manual/de/language.types.string.php&quot;&gt;PHP&lt;/a&gt;? 
    </description>

    <dc:publisher>Sascha Hameisters Javascript Input Output</dc:publisher>
    <dc:creator>nospam@example.com (Sascha Hameister)</dc:creator>
    <dc:subject>
    Syntax, </dc:subject>
    <dc:date>2008-04-18T11:00:00Z</dc:date>
    <wfw:comment>http://www.javascript.io/wfwcomment.php?cid=39</wfw:comment>
        <slash:comments>2</slash:comments>
        <wfw:commentRss>http://www.javascript.io/rss.php?version=1.0&amp;type=comments&amp;cid=39</wfw:commentRss>
    
    
</item>
<item rdf:about="http://www.javascript.io/index.php?/archives/40-guid.html">
    <title>Tipp der Woche: Reflexionen im Web</title>
    <link>http://www.javascript.io/index.php?/archives/40-Tipp-der-Woche-Reflexionen-im-Web.html</link>
    <description>
    Reflexionen von Bildern sind im Web 2.0 total in und trendy. Um Bilder mit Reflexionen zu versehen muss man Diese jedoch bearbeiten. Dies kann sehr aufwändig sein, wenn man viele Bilder hat oder sogar den Bildupload von Benutzern erlaubt. Vor einigen Tagen hat mich Paul – ein fleißiger JSIO-Leser – nun jedoch auf &lt;a href=&quot;http://cow.neondragon.net/stuff/reflection/&quot;&gt;Reflection.js&lt;/a&gt; hingewiesen, das dies On-the-fly und ohne Server macht. Ein Blick lohnt sich, schon rein um zu wissen, dass so etwas überhaupt geht.  
    </description>

    <dc:publisher>Sascha Hameisters Javascript Input Output</dc:publisher>
    <dc:creator>nospam@example.com (Sascha Hameister)</dc:creator>
    <dc:subject>
    Tipp der Woche, Tricks 4 Geeks, </dc:subject>
    <dc:date>2008-04-15T12:00:00Z</dc:date>
    <wfw:comment>http://www.javascript.io/wfwcomment.php?cid=40</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.javascript.io/rss.php?version=1.0&amp;type=comments&amp;cid=40</wfw:commentRss>
    
    
</item>
<item rdf:about="http://www.javascript.io/index.php?/archives/42-guid.html">
    <title>Kleiner Performance-Patch für firebugx.js</title>
    <link>http://www.javascript.io/index.php?/archives/42-Kleiner-Performance-Patch-fuer-firebugx.js.html</link>
    <description>
    Die Entwickler vom &lt;a href=&quot;http://www.getfirebug.com/&quot;&gt;Firebug&lt;/a&gt; bieten &lt;a href=&quot;http://www.getfirebug.com/firebug/firebugx.js&quot;&gt;ein kleines Javascript&lt;/a&gt; an, das den Nutzen hat, keine Fehler in Browsern, die Firebug nicht installiert haben zu erzeugen, wenn Firebug-Kommandos im Quelltext eingebunden wurden. Ich habe daran 2 marginale Änderungen vorgenommen, sodass der Sourcecode noch ein Quentchen schneller läuft: &lt;pre&gt;&lt;code&gt;if (!window.console || !console.firebug)
{
    var names = [&quot;log&quot;, &quot;debug&quot;, &quot;info&quot;, &quot;warn&quot;, &quot;error&quot;, &quot;assert&quot;, &quot;dir&quot;, &quot;dirxml&quot;,
    &quot;group&quot;, &quot;groupEnd&quot;, &quot;time&quot;, &quot;timeEnd&quot;, &quot;count&quot;, &quot;trace&quot;, &quot;profile&quot;, &quot;profileEnd&quot;];
    
    &lt;b&gt;var emptyFunction = function() {};&lt;/b&gt;
    &lt;del&gt;var count = names.length;&lt;/del&gt;

    window.console = {};
    for (var i = 0&lt;b&gt;&lt;ins&gt;, count = names.length&lt;/ins&gt;&lt;/b&gt;; i &lt; &lt;b&gt;count&lt;/b&gt;; ++i) {
        window.console[names[i]] = &lt;b&gt;emptyFunction&lt;/b&gt;;
    }
}&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Schwachstellen – aus meiner Sicht – im Fall firebugx.js&lt;/em&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Bei jedem Schleifendurchlauf wird eine anonyme Funktion erzeugt, die der jeweiligen Eigenschaft zugewiesen wird.&lt;/li&gt;
&lt;li&gt;Bei jedem Schleifendurchlauf wird &lt;code&gt;names.length&lt;/code&gt; abgefragt.&lt;/li&gt;
&lt;li&gt;Kein Schwachstelle, aber persönlicher Stil: Geschweifte Klammern lasse ich nicht weg.&lt;/li&gt;
&lt;/ol&gt;

&lt;em&gt;Fazit:&lt;/em&gt;&lt;br /&gt;
Natürlich ist auch dieser Fall wieder nur ein winziger Tropfen auf den heißen Stein, aber wer penibel auf seinen Quelltext aufpasst, kann hie&#039; und da schon seine Performance erhöhen.

&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Frage:&lt;/em&gt;&lt;br /&gt;
Was haltet ihr von so einer Art Codeoptimierung; Ist mein Gedanke oversized; Verliert man dadurch mehr Zeit, als man gewinnt? Oder… ist Coden für euch eine Kunst, in der es darum geht, das Beste aus seinem Code herauszuholen, wobei Performance, Codelesbarkeit und Wartbarkeit sich die Waage halten müssen?
&lt;br /&gt;&lt;br /&gt;
&lt;em&gt;Nachtrag: Dank an Jeena (13.04.2008 - 17:00)&lt;/em&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.jeenaparadies.net/&quot;&gt;Jeena&lt;/a&gt; hat mich auf einen aktuellen &lt;a href=&quot;http://www.robertnyman.com/2008/04/11/javascript-loop-performance/&quot;&gt;Beitrag von Robert Nymann&lt;/a&gt; hingewiesen. Im Gegensatz zu meiner ersten Version (siehe Änderungsmarkierung) hat dies noch den Vorteil, dass alle benötigten Informationen zur Schleife in der Schleifendefinition und nicht irgendwo stehen. Darum habe ich es nachträglich eingebaut. Danke Jeena!&lt;br /&gt;&lt;br /&gt;
 
    </description>

    <dc:publisher>Sascha Hameisters Javascript Input Output</dc:publisher>
    <dc:creator>nospam@example.com (Sascha Hameister)</dc:creator>
    <dc:subject>
    Performance, Tricks 4 Geeks, </dc:subject>
    <dc:date>2008-04-12T10:30:00Z</dc:date>
    <wfw:comment>http://www.javascript.io/wfwcomment.php?cid=42</wfw:comment>
        <slash:comments>3</slash:comments>
        <wfw:commentRss>http://www.javascript.io/rss.php?version=1.0&amp;type=comments&amp;cid=42</wfw:commentRss>
    
    
</item>
<item rdf:about="http://www.javascript.io/index.php?/archives/38-guid.html">
    <title>Cheat Sheets - Angenehme Spickzettel</title>
    <link>http://www.javascript.io/index.php?/archives/38-Cheat-Sheets-Angenehme-Spickzettel.html</link>
    <description>
    Schon in der Schule hat man gemerkt, dass es ab und zu ganz gut war, einen kleinen Spicker bei sich gehabt zu haben. So geht es mir auch ab und zu im Leben und darum stelle ich euch meine 5 täglichen Begleiter heute endlich vor. &lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ilovejackdaniels.com/javascript_cheat_sheet.png&quot;&gt;Javascript Cheat Sheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.gscottolson.com/jquery/jQuery1.2.cheatsheet.v1.0.pdf&quot;&gt;jQuery Cheat Sheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bueltge.de/jquery-cheat-sheet/543/&quot;&gt;jQuery Cheat Sheet Übersicht&lt;/a&gt; - Danke &lt;a href=&quot;http://bueltge.de/&quot;&gt;Frank&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://snook.ca/files/prototype_1.5.0_snookca.pdf&quot;&gt;Prototype Cheat Sheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ha.ckers.org/xss.html&quot;&gt;XSS Cheat Sheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://slash7.com/cheats/scriptaculous_fx1.pdf&quot;&gt;Scriptaculous Cheat Sheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

 
    </description>

    <dc:publisher>Sascha Hameisters Javascript Input Output</dc:publisher>
    <dc:creator>nospam@example.com (Sascha Hameister)</dc:creator>
    <dc:subject>
    Tricks 4 Geeks, </dc:subject>
    <dc:date>2008-04-10T07:00:00Z</dc:date>
    <wfw:comment>http://www.javascript.io/wfwcomment.php?cid=38</wfw:comment>
        <slash:comments>2</slash:comments>
        <wfw:commentRss>http://www.javascript.io/rss.php?version=1.0&amp;type=comments&amp;cid=38</wfw:commentRss>
    
    
</item>
<item rdf:about="http://www.javascript.io/index.php?/archives/34-guid.html">
    <title>Tipp der Woche: XING-Javascript Gruppe</title>
    <link>http://www.javascript.io/index.php?/archives/34-Tipp-der-Woche-XING-Javascript-Gruppe.html</link>
    <description>
    &lt;!-- s9ymdb:7 --&gt;&lt;img width=&quot;110&quot; height=&quot;40&quot; style=&quot;float: right; border: 0px; padding-left: 5px; padding-right: 5px;&quot; src=&quot;http://www.javascript.io/uploads/xingjavascript.serendipityThumb.png&quot; alt=&quot;XING Gruppe Javascript&quot; /&gt;Es gibt viele Orte an denen man sich über Javascript unterhalten kann. Eher ein Geheimtipp ist bisher die englischsprachige &lt;a href=&quot;https://www.xing.com/net/javascript/&quot;&gt;XING-Gruppe Javascript&lt;/a&gt;, die von &lt;a href=&quot;http://zumbrunn.com/&quot;&gt;Chris&lt;/a&gt; gegründet wurde. Wer bereits in XING verweilt ist selbstverständlich herzlich eingeladen im Sinne des Herren... – pardon Javascript – Furore im Forum zu machen. &lt;img src=&quot;http://www.javascript.io/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; Wer bisher XING noch gar nicht nutzt kann sich &lt;a href=&quot;http://www.xing.com/go/invite/3307093.44d64c&quot;&gt;hier kostenlos bei XING anmelden&lt;/a&gt;.  
    </description>

    <dc:publisher>Sascha Hameisters Javascript Input Output</dc:publisher>
    <dc:creator>nospam@example.com (Sascha Hameister)</dc:creator>
    <dc:subject>
    Tipp der Woche, </dc:subject>
    <dc:date>2008-04-08T12:00:00Z</dc:date>
    <wfw:comment>http://www.javascript.io/wfwcomment.php?cid=34</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.javascript.io/rss.php?version=1.0&amp;type=comments&amp;cid=34</wfw:commentRss>
    
    
</item>

</rdf:RDF>
