<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="/templates/default/atom.css" type="text/css" ?>

<feed 
   xmlns="http://www.w3.org/2005/Atom"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    <link href="http://www.javascript.io/index.php?/feeds/atom10.xml" rel="self" title="Sascha Hameisters Javascript Input Output" type="application/atom+xml" />
    <link href="http://www.javascript.io/"                        rel="alternate"    title="Sascha Hameisters Javascript Input Output" type="text/html" />
    <link href="http://www.javascript.io/rss.php?version=2.0"     rel="alternate"    title="Sascha Hameisters Javascript Input Output" type="application/rss+xml" />
    <title type="html">Sascha Hameisters Javascript Input Output</title>
    <subtitle type="html">Javascript-Blog im Web...</subtitle>
    <icon>http://www.javascript.io/templates/default/img/s9y_banner_small.png</icon>
    <id>http://www.javascript.io/</id>
    <updated>2008-04-19T07:30:48Z</updated>
    <generator uri="http://www.s9y.org/" version="1.2">Serendipity 1.2 - http://www.s9y.org/</generator>
    <dc:language>de</dc:language>

    <entry>
        <link href="http://www.javascript.io/index.php?/archives/47-Piping-bei-der-Variablenzuweisung.html" rel="alternate" title="Piping bei der Variablenzuweisung" />
        <author>
            <name>Sascha Hameister</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-05-17T12:00:00Z</published>
        <updated>2008-04-19T07:30:48Z</updated>
        <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=atom1.0&amp;type=comments&amp;cid=47</wfw:commentRss>
    
            <category scheme="http://www.javascript.io/index.php?/categories/4-Syntax" label="Syntax" term="Syntax" />
    
        <id>http://www.javascript.io/index.php?/archives/47-guid.html</id>
        <title type="html">Piping bei der Variablenzuweisung</title>
        <content type="xhtml" xml:base="http://www.javascript.io/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                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 <code>param1</code>, dessen Standartwert <code>0</code> sein soll, wenn kein Parameter angegeben wurde. Hierfür könnte man mit Fallunterscheidungen arbeiten, aber ist folgender Code nicht viel eleganter?
<pre><code>function dummy (param1) {
    var param1 = param1 || 0;
}</code></pre>
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.javascript.io/index.php?/archives/51-Dokumentierst-du-noch-oder-codest-du-schon.html" rel="alternate" title="Dokumentierst du noch oder codest du schon?" />
        <author>
            <name>Sascha Hameister</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-05-14T10:00:00Z</published>
        <updated>2008-04-09T14:44:15Z</updated>
        <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=atom1.0&amp;type=comments&amp;cid=51</wfw:commentRss>
    
            <category scheme="http://www.javascript.io/index.php?/categories/4-Syntax" label="Syntax" term="Syntax" />
    
        <id>http://www.javascript.io/index.php?/archives/51-guid.html</id>
        <title type="html">Dokumentierst du noch oder codest du schon?</title>
        <content type="xhtml" xml:base="http://www.javascript.io/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                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 <i>Dokumentation</i> helfen?
<pre><code>/**
 * Does some magic. Expects 2 integer params and returns the correct resultvalue for us
**/</code></pre>
Aah, nun bin ich schlauer… nein, nicht wirklich - wirklich nicht!<br /><br />
<em>Javascript-Entwickler dieser Welt, bitte dokumentiert!</em><br /><br />
Das ist auch ganz einfach! Haltet euch an die <a href="http://www.scriptdoc.org/specification.htm">Spezifikationen</a> und erzeugt eine schicke Dokumentation mit dem <a href="http://jsdoctoolkit.org/">JSDoc Toolkit</a>. Einen besseren Weg, mich als Freund zu bekommen, gibt es nicht. <img src="http://www.javascript.io/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br /><br /> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.javascript.io/index.php?/archives/52-Tipp-der-Woche-Ich-packe-meinen-Koffer.html" rel="alternate" title="Tipp der Woche: Ich packe meinen Koffer…" />
        <author>
            <name>Sascha Hameister</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-05-12T12:00:00Z</published>
        <updated>2008-04-27T23:24:00Z</updated>
        <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=atom1.0&amp;type=comments&amp;cid=52</wfw:commentRss>
    
            <category scheme="http://www.javascript.io/index.php?/categories/10-Tipp-der-Woche" label="Tipp der Woche" term="Tipp der Woche" />
    
        <id>http://www.javascript.io/index.php?/archives/52-guid.html</id>
        <title type="html">Tipp der Woche: Ich packe meinen Koffer…</title>
        <content type="xhtml" xml:base="http://www.javascript.io/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                …und natürlich auch meine Javascript-Quelltexte und zwar mit dem <a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a>, einem Java-Programm, dass die Vorteile von Douglas Crockfords <a href="http://crockford.com/javascript/jsmin">JS Minifier</a>, Dojos <a href="http://dojotoolkit.org/docs/shrinksafe">Shrinksafe</a> und Dean Edwards <a href="http://dean.edwards.name/packer/">Packer</a> vereint. Toll an der Java-Variante ist, dass sie ganz einfach in den Deployment-Prozess mit <code>ant</code> eingebunden werden kann.<br /><br />
<a href="http://blog.datanomisch.de/">Timo</a> hat mich noch auf den <a href="http://www.jasob.com/">Javascript and CSS Obfuscator</a> aufmerksam gemacht. Schau ich mir auf jeden Fall mal an! Ihr auch? <img src="http://www.javascript.io/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" />  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.javascript.io/index.php?/archives/56-Tipps-der-Woche-Silverlight.html" rel="alternate" title="Tipps der Woche: Silverlight" />
        <author>
            <name>Sascha Hameister</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-05-06T12:00:00Z</published>
        <updated>2008-04-14T10:10:49Z</updated>
        <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=atom1.0&amp;type=comments&amp;cid=56</wfw:commentRss>
    
            <category scheme="http://www.javascript.io/index.php?/categories/9-Silverlight" label="Silverlight" term="Silverlight" />
            <category scheme="http://www.javascript.io/index.php?/categories/10-Tipp-der-Woche" label="Tipp der Woche" term="Tipp der Woche" />
    
        <id>http://www.javascript.io/index.php?/archives/56-guid.html</id>
        <title type="html">Tipps der Woche: Silverlight</title>
        <content type="xhtml" xml:base="http://www.javascript.io/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                In dieser Woche steht der thematische Stern bei mir auf <a href="http://www.silverlight.net">Silverlight</a>, denn ich bin für Microsoft auf der <a href="http://www.fmx.de">fmx</a> 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 <a href="http://slxlbc.datenverdrahten.de/">Silverlight - Learning bei Coding</a> von Datenverdrahten. Weil es aber noch mehr gute Links zum Thema gibt, heisst dieses Special heute ausnahmsweise <b>Tipps der Woche</b>.
<ul>
<li><a href="http://slxlbc.datenverdrahten.de/">Silverlight - Learning bei Coding</a></li>
<li><a href="http://www.silverlight.net/quickstarts/">Silverlight Quickstarts</a></li>
<li><a href="http://designwithsilverlight.com/">Design with Silverlight</a></li>
<li><a href="http://silverlight.net/Learn/">Video Tutorials</a></li>
</ul>
<em>Frage</em><br />
Wie habt ihr Silverlight gelernt? Habt ihr bereits schicke Schmuckstücke online (Wo?)? Warum habt ihr euch für Silverlight entschieden? 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.javascript.io/index.php?/archives/48-Konstanten-berechnen-oder-kommentieren.html" rel="alternate" title="Konstanten berechnen oder kommentieren" />
        <author>
            <name>Sascha Hameister</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-05-02T11:00:00Z</published>
        <updated>2008-05-05T22:56:57Z</updated>
        <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=atom1.0&amp;type=comments&amp;cid=48</wfw:commentRss>
    
            <category scheme="http://www.javascript.io/index.php?/categories/7-Performance" label="Performance" term="Performance" />
    
        <id>http://www.javascript.io/index.php?/archives/48-guid.html</id>
        <title type="html">Konstanten berechnen oder kommentieren</title>
        <content type="xhtml" xml:base="http://www.javascript.io/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                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:
<pre><code>// 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
}</pre></code>
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:
<pre><code>// 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
}</pre></code>
<a href="http://www.antfarm.de/">Sean</a> 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.<br /><br />
Als gangbarer Mittelweg ist uns folgender eingefallen:
<pre><code>// 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
}</code></pre>
Hier werden zwar Rechnungen vorgenommen, aber wesentlich weniger als in Variante 1 und der Code ist lesbarer als  Variante 2, dadurch aber langsamer.<br /><br />
<em>Fazit</em><br />
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.<br /><br />
<em>Frage</em><br />
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!<br /><br /> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.javascript.io/index.php?/archives/53-Tipp-der-Woche-Google-Caja.html" rel="alternate" title="Tipp der Woche: Google Caja" />
        <author>
            <name>Sascha Hameister</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-04-29T12:00:00Z</published>
        <updated>2008-04-09T16:14:08Z</updated>
        <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=atom1.0&amp;type=comments&amp;cid=53</wfw:commentRss>
    
            <category scheme="http://www.javascript.io/index.php?/categories/10-Tipp-der-Woche" label="Tipp der Woche" term="Tipp der Woche" />
            <category scheme="http://www.javascript.io/index.php?/categories/5-Tricks-4-Geeks" label="Tricks 4 Geeks" term="Tricks 4 Geeks" />
    
        <id>http://www.javascript.io/index.php?/archives/53-guid.html</id>
        <title type="html">Tipp der Woche: Google Caja</title>
        <content type="xhtml" xml:base="http://www.javascript.io/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <a href="http://www.antfarm.de/">Sean</a> 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.
<ol>
<li>Einbindung mit potenziell gefährlichem Fremd-Javascript</li>
<li>Einbindung ohne Javascripts (durch Herausparsen der Informationen)</li>
</ol>

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.<br /><br />

Genau an dieser Stelle kommt <a href="http://code.google.com/p/google-caja/">Google Caja</a> 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.<br /><br />Ein sehr interessanter Ansatz, der einen Blick wert ist!<br /><br /> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.javascript.io/index.php?/archives/44-Zuweisungen-nach-Fallunterscheidungen.html" rel="alternate" title="Zuweisungen nach Fallunterscheidungen" />
        <author>
            <name>Sascha Hameister</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-04-27T14:00:00Z</published>
        <updated>2008-04-09T14:37:12Z</updated>
        <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=atom1.0&amp;type=comments&amp;cid=44</wfw:commentRss>
    
            <category scheme="http://www.javascript.io/index.php?/categories/7-Performance" label="Performance" term="Performance" />
            <category scheme="http://www.javascript.io/index.php?/categories/4-Syntax" label="Syntax" term="Syntax" />
            <category scheme="http://www.javascript.io/index.php?/categories/5-Tricks-4-Geeks" label="Tricks 4 Geeks" term="Tricks 4 Geeks" />
    
        <id>http://www.javascript.io/index.php?/archives/44-guid.html</id>
        <title type="html">Zuweisungen nach Fallunterscheidungen</title>
        <content type="xhtml" xml:base="http://www.javascript.io/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Letzten Sonntag habe ich euch mein <a href="http://javascript.io/index.php?/archives/55-Javascript-Methoden-profilen-Profile.js.html">Profiler.js</a> 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.
<pre><code>
var givenValue = 100;

// Variante 1: Ternärer Operator
newValue = (givenValue < 0 ? 0 : givenValue);

// Variante 2: Nutzung der Math.max-Methode
newValue = Math.max(givenValue, 0);

// Variante 3: if-else-Kontrollstruktur
if (givenValue < 0) {
    newValue = 0;
} else {
    newValue = givenValue;
}</code></pre>
<em>Ergebnis</em><br />
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 <i>normalen</i> if-else auf Platz 2.<br /><br />
<em>Fazit</em><br />
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.<br /><br />
<em>Frage</em><br />
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? 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.javascript.io/index.php?/archives/45-Tipp-der-Woche-Einwegverschluesselung.html" rel="alternate" title="Tipp der Woche: Einwegverschlüsselung" />
        <author>
            <name>Sascha Hameister</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-04-22T12:00:00Z</published>
        <updated>2008-04-13T19:23:20Z</updated>
        <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=atom1.0&amp;type=comments&amp;cid=45</wfw:commentRss>
    
            <category scheme="http://www.javascript.io/index.php?/categories/5-Tricks-4-Geeks" label="Tricks 4 Geeks" term="Tricks 4 Geeks" />
    
        <id>http://www.javascript.io/index.php?/archives/45-guid.html</id>
        <title type="html">Tipp der Woche: Einwegverschlüsselung</title>
        <content type="xhtml" xml:base="http://www.javascript.io/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                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 <a href="http://de.wikipedia.org/wiki/Pre-shared_key">Pre-shared Key</a> zu verschlüsseln. Hierzu bieten sich MD5 oder SHA1 an. Paul Johnston hat sich die Mühe gemacht und <a href="http://pajhome.org.uk/crypt/md5/index.html">MD4, MD5 und SHA1 mit Javascript</a> zu realisieren. Nicht wirklich der schönste Code, aber es funktioniert (und vielleicht erbarmt sich ja einmal Jemand, Diesen umzuschreiben).  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.javascript.io/index.php?/archives/46-Performance-Pre-InkrementPost-Inkrement.html" rel="alternate" title="Performance: Pre-Inkrement/Post-Inkrement" />
        <author>
            <name>Sascha Hameister</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-04-21T09:00:00Z</published>
        <updated>2008-04-19T16:35:08Z</updated>
        <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=atom1.0&amp;type=comments&amp;cid=46</wfw:commentRss>
    
            <category scheme="http://www.javascript.io/index.php?/categories/7-Performance" label="Performance" term="Performance" />
    
        <id>http://www.javascript.io/index.php?/archives/46-guid.html</id>
        <title type="html">Performance: Pre-Inkrement/Post-Inkrement</title>
        <content type="xhtml" xml:base="http://www.javascript.io/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Ich muss mich hoch und heilig entschuldigen. Im Oktober habe ich <a href="http://www.javascript.io/index.php?/archives/13-UEber-Flaschenhaelse-und-Schleifenkoepfe-2.html#extended">über Flaschenhälse und Schleifenköpfe</a> gebloggt. <a href="http://www.antfarm.de">Sean</a> 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 <b>definitiv schneller</b> 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 <a href="http://javascript.io/index.php?/archives/55-Javascript-Methoden-profilen-Profile.js.html">Profile.js</a> und folgendem Quelltext:
<pre><code>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);</pre></code> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.javascript.io/index.php?/archives/55-Javascript-Methoden-profilen-Profile.js.html" rel="alternate" title="Javascript-Methoden profilen: Profile.js" />
        <author>
            <name>Sascha Hameister</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-04-20T08:00:00Z</published>
        <updated>2008-04-21T15:53:17Z</updated>
        <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=atom1.0&amp;type=comments&amp;cid=55</wfw:commentRss>
    
            <category scheme="http://www.javascript.io/index.php?/categories/7-Performance" label="Performance" term="Performance" />
    
        <id>http://www.javascript.io/index.php?/archives/55-guid.html</id>
        <title type="html">Javascript-Methoden profilen: Profile.js</title>
        <content type="xhtml" xml:base="http://www.javascript.io/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                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 <code>methods</code>. 

<pre><code>function profile(methods, cycles) {
  var methodDurations = [];
  for(var i = 0, count = methods.length; i < count; i++) {
	var methodStart = (new Date()).getTime();
	
	for(var j = 0; j < cycles; j++) {
	  methods[i]();
	}
	
	var methodEnd = (new Date()).getTime();
	methodDurations.push(methodEnd - methodStart);
  }
  return methodDurations;
}</code></pre>
<em>Ideen</em>
<ul>
<li>Validierung der Parameter</li>
<li>Möglichkeit Parameter für die aufzurufenden Methoden zu übergeben</li>
<li>Andere Ausgabeformate als Array</li>
</ul>
<em>Vorschläge</em><br />
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! <img src="http://www.javascript.io/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br /><br /> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.javascript.io/index.php?/archives/39-Single-Quotes-oder-Double-Quotes.html" rel="alternate" title="Single Quotes oder Double Quotes" />
        <author>
            <name>Sascha Hameister</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-04-18T11:00:00Z</published>
        <updated>2008-04-19T14:57:22Z</updated>
        <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=atom1.0&amp;type=comments&amp;cid=39</wfw:commentRss>
    
            <category scheme="http://www.javascript.io/index.php?/categories/4-Syntax" label="Syntax" term="Syntax" />
    
        <id>http://www.javascript.io/index.php?/archives/39-guid.html</id>
        <title type="html">Single Quotes oder Double Quotes</title>
        <content type="xhtml" xml:base="http://www.javascript.io/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Mit <a href="http://blog.decaf.de/">Dirk</a> habe ich mir vor einigen Tagen darüber Gedanken gemacht, ob man wohl HTML-Attribute auch in Single Quots einschliessen dürfe. <a href="http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.2">Die Antwort liefert das W3C</a> 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.<br /><br />
<em>Beispiel</em>
<pre><code>HTML
&lt;a href="http://www.javascript.io" id="somelink"&gt;Javascript Blog&lt;/a&gt;

Javascript
document.getElementById('somelink');
</pre></code>

<em>Frage</em><br />
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 <a href="http://de2.php.net/manual/de/language.types.string.php">PHP</a>? 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.javascript.io/index.php?/archives/40-Tipp-der-Woche-Reflexionen-im-Web.html" rel="alternate" title="Tipp der Woche: Reflexionen im Web" />
        <author>
            <name>Sascha Hameister</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-04-15T12:00:00Z</published>
        <updated>2008-04-06T12:21:10Z</updated>
        <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=atom1.0&amp;type=comments&amp;cid=40</wfw:commentRss>
    
            <category scheme="http://www.javascript.io/index.php?/categories/10-Tipp-der-Woche" label="Tipp der Woche" term="Tipp der Woche" />
            <category scheme="http://www.javascript.io/index.php?/categories/5-Tricks-4-Geeks" label="Tricks 4 Geeks" term="Tricks 4 Geeks" />
    
        <id>http://www.javascript.io/index.php?/archives/40-guid.html</id>
        <title type="html">Tipp der Woche: Reflexionen im Web</title>
        <content type="xhtml" xml:base="http://www.javascript.io/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                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 <a href="http://cow.neondragon.net/stuff/reflection/">Reflection.js</a> hingewiesen, das dies On-the-fly und ohne Server macht. Ein Blick lohnt sich, schon rein um zu wissen, dass so etwas überhaupt geht.  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.javascript.io/index.php?/archives/42-Kleiner-Performance-Patch-fuer-firebugx.js.html" rel="alternate" title="Kleiner Performance-Patch für firebugx.js" />
        <author>
            <name>Sascha Hameister</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-04-12T10:30:00Z</published>
        <updated>2008-04-14T20:58:19Z</updated>
        <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=atom1.0&amp;type=comments&amp;cid=42</wfw:commentRss>
    
            <category scheme="http://www.javascript.io/index.php?/categories/7-Performance" label="Performance" term="Performance" />
            <category scheme="http://www.javascript.io/index.php?/categories/5-Tricks-4-Geeks" label="Tricks 4 Geeks" term="Tricks 4 Geeks" />
    
        <id>http://www.javascript.io/index.php?/archives/42-guid.html</id>
        <title type="html">Kleiner Performance-Patch für firebugx.js</title>
        <content type="xhtml" xml:base="http://www.javascript.io/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Die Entwickler vom <a href="http://www.getfirebug.com/">Firebug</a> bieten <a href="http://www.getfirebug.com/firebug/firebugx.js">ein kleines Javascript</a> 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: <pre><code>if (!window.console || !console.firebug)
{
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
    "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
    
    <b>var emptyFunction = function() {};</b>
    <del>var count = names.length;</del>

    window.console = {};
    for (var i = 0<b><ins>, count = names.length</ins></b>; i < <b>count</b>; ++i) {
        window.console[names[i]] = <b>emptyFunction</b>;
    }
}</pre></code><br />
<em>Schwachstellen – aus meiner Sicht – im Fall firebugx.js</em><br />
<ol>
<li>Bei jedem Schleifendurchlauf wird eine anonyme Funktion erzeugt, die der jeweiligen Eigenschaft zugewiesen wird.</li>
<li>Bei jedem Schleifendurchlauf wird <code>names.length</code> abgefragt.</li>
<li>Kein Schwachstelle, aber persönlicher Stil: Geschweifte Klammern lasse ich nicht weg.</li>
</ol>

<em>Fazit:</em><br />
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' und da schon seine Performance erhöhen.

<br /><br /><em>Frage:</em><br />
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?
<br /><br />
<em>Nachtrag: Dank an Jeena (13.04.2008 - 17:00)</em><br />
<a href="http://www.jeenaparadies.net/">Jeena</a> hat mich auf einen aktuellen <a href="http://www.robertnyman.com/2008/04/11/javascript-loop-performance/">Beitrag von Robert Nymann</a> 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!<br /><br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.javascript.io/index.php?/archives/38-Cheat-Sheets-Angenehme-Spickzettel.html" rel="alternate" title="Cheat Sheets - Angenehme Spickzettel" />
        <author>
            <name>Sascha Hameister</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-04-10T07:00:00Z</published>
        <updated>2008-04-10T18:53:56Z</updated>
        <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=atom1.0&amp;type=comments&amp;cid=38</wfw:commentRss>
    
            <category scheme="http://www.javascript.io/index.php?/categories/5-Tricks-4-Geeks" label="Tricks 4 Geeks" term="Tricks 4 Geeks" />
    
        <id>http://www.javascript.io/index.php?/archives/38-guid.html</id>
        <title type="html">Cheat Sheets - Angenehme Spickzettel</title>
        <content type="xhtml" xml:base="http://www.javascript.io/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                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. <ul>
<li><a href="http://www.ilovejackdaniels.com/javascript_cheat_sheet.png">Javascript Cheat Sheet</a></li>
<li><a href="http://www.gscottolson.com/jquery/jQuery1.2.cheatsheet.v1.0.pdf">jQuery Cheat Sheet</a></li>
<li><a href="http://bueltge.de/jquery-cheat-sheet/543/">jQuery Cheat Sheet Übersicht</a> - Danke <a href="http://bueltge.de/">Frank</a></li>
<li><a href="http://snook.ca/files/prototype_1.5.0_snookca.pdf">Prototype Cheat Sheet</a></li>
<li><a href="http://ha.ckers.org/xss.html">XSS Cheat Sheet</a></li>
<li><a href="http://slash7.com/cheats/scriptaculous_fx1.pdf">Scriptaculous Cheat Sheet</a></li>
</ul>

 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.javascript.io/index.php?/archives/34-Tipp-der-Woche-XING-Javascript-Gruppe.html" rel="alternate" title="Tipp der Woche: XING-Javascript Gruppe" />
        <author>
            <name>Sascha Hameister</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-04-08T12:00:00Z</published>
        <updated>2008-03-31T00:59:40Z</updated>
        <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=atom1.0&amp;type=comments&amp;cid=34</wfw:commentRss>
    
            <category scheme="http://www.javascript.io/index.php?/categories/10-Tipp-der-Woche" label="Tipp der Woche" term="Tipp der Woche" />
    
        <id>http://www.javascript.io/index.php?/archives/34-guid.html</id>
        <title type="html">Tipp der Woche: XING-Javascript Gruppe</title>
        <content type="xhtml" xml:base="http://www.javascript.io/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <!-- s9ymdb:7 --><img width="110" height="40" style="float: right; border: 0px; padding-left: 5px; padding-right: 5px;" src="http://www.javascript.io/uploads/xingjavascript.serendipityThumb.png" alt="XING Gruppe Javascript" />Es gibt viele Orte an denen man sich über Javascript unterhalten kann. Eher ein Geheimtipp ist bisher die englischsprachige <a href="https://www.xing.com/net/javascript/">XING-Gruppe Javascript</a>, die von <a href="http://zumbrunn.com/">Chris</a> gegründet wurde. Wer bereits in XING verweilt ist selbstverständlich herzlich eingeladen im Sinne des Herren... – pardon Javascript – Furore im Forum zu machen. <img src="http://www.javascript.io/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /> Wer bisher XING noch gar nicht nutzt kann sich <a href="http://www.xing.com/go/invite/3307093.44d64c">hier kostenlos bei XING anmelden</a>.  
            </div>
        </content>
        
    </entry>

</feed>