<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Performance</title>
        <link>http://geekswithblogs.net/Saqib/category/7519.aspx</link>
        <description>Performance</description>
        <language>en</language>
        <copyright>Tanzim Saqib</copyright>
        <managingEditor>me@tanzimsaqib.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>ASP.NET AJAX Best Practices: Careful with DOM element concatenation</title>
            <link>http://geekswithblogs.net/Saqib/archive/2008/02/05/asp.net-ajax-best-practices-careful-with-dom-element-concatenation.aspx</link>
            <description>&lt;p&gt;It's a very common bad practice. We often iterate through array, build HTML contents and keep on concatenating into certain DOM element. Every time you execute the block of code under the loop, you create the HTML markups, discover a div, access the innerHTML of a div, and for += operator you again discover the same div, access its innerHTML and concatenate it before assigning. &lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;function &lt;/span&gt;pageLoad()
{
    &lt;span style="color: blue"&gt;var &lt;/span&gt;links = [&lt;span style="color: #a31515"&gt;"microsoft.com"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"tanzimsaqib.com"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"asp.net"&lt;/span&gt;];
    
    $get(&lt;span style="color: #a31515"&gt;'divContent'&lt;/span&gt;).innerHTML = &lt;span style="color: #a31515"&gt;'The following are my favorite sites:'
    
    &lt;/span&gt;&lt;span style="color: blue"&gt;for&lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;i=0; i&amp;lt;links.length; ++i)
        $get(&lt;span style="color: #a31515"&gt;'divContent'&lt;/span&gt;).innerHTML += &lt;span style="color: #a31515"&gt;'&amp;lt;a href="http://www.' &lt;/span&gt;+ links[i] + &lt;span style="color: #a31515"&gt;'"&amp;gt;http://www.' &lt;/span&gt;+ links[i] + &lt;span style="color: #a31515"&gt;'&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;'&lt;/span&gt;;
}  &lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;However, as you know accessing DOM element is one the costliest operation in JavaScript. So, it's wise to concatenate all HTML contents in a string and finally assign to the DOM element. That saves a lot of hard work for the browser.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;function &lt;/span&gt;pageLoad()
{
    &lt;span style="color: blue"&gt;var &lt;/span&gt;links = [&lt;span style="color: #a31515"&gt;"microsoft.com"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"tanzimsaqib.com"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"asp.net"&lt;/span&gt;];
    &lt;span style="color: blue"&gt;var &lt;/span&gt;content = &lt;span style="color: #a31515"&gt;'The following are my favorite sites:'
    
    &lt;/span&gt;&lt;span style="color: blue"&gt;for&lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;i=0; i&amp;lt;links.length; ++i)
        content += &lt;span style="color: #a31515"&gt;'&amp;lt;a href="http://www.' &lt;/span&gt;+ links[i] + &lt;span style="color: #a31515"&gt;'"&amp;gt;http://www.' &lt;/span&gt;+ links[i] + &lt;span style="color: #a31515"&gt;'&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;'&lt;/span&gt;;
        
    $get(&lt;span style="color: #a31515"&gt;'divContent'&lt;/span&gt;).innerHTML = content;
}  &lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119177"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119177" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/119177.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2008/02/05/asp.net-ajax-best-practices-careful-with-dom-element-concatenation.aspx</guid>
            <pubDate>Tue, 05 Feb 2008 12:51:41 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/119177.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2008/02/05/asp.net-ajax-best-practices-careful-with-dom-element-concatenation.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/119177.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/119177.aspx</trackback:ping>
        </item>
        <item>
            <title>[New Article] ASP.NET AJAX Best Practices</title>
            <link>http://geekswithblogs.net/Saqib/archive/2008/01/27/new-article-asp.net-ajax-best-practices.aspx</link>
            <description>&lt;p&gt;While we develop AJAX applications, we often carelessly ignore giving up bad practices, which cause effects which are not so significantly visible when the site is not so large in volume. But, it’s often severe performance issue when it is the case for sites that make heavy use of AJAX technologies such as Pageflakes, NetVibes etc.  &lt;/p&gt;&lt;p&gt;There are so many AJAX widgets in one page that little memory leak issues combined may even result the site crash into very nasty “Operation aborted”. There are a lot of WebService calls, lot of iterations among collection so that inefficient coding in a whole lead to make site very heavy, browser eats up a lot of memory, requires very costly CPU cycles, and ultimately causes unsatisfactory user experience. In this article many of such issues are demonstrated in the context of ASP.NET AJAX.  &lt;/p&gt;&lt;p&gt;&lt;a title="http://www.codeproject.com/KB/ajax/AspNetAjaxBestPractices.aspx" href="http://www.codeproject.com/KB/ajax/AspNetAjaxBestPractices.aspx" target="_blank"&gt;http://www.codeproject.com/KB/ajax/AspNetAjaxBestPractices.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118943"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118943" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/118943.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2008/01/27/new-article-asp.net-ajax-best-practices.aspx</guid>
            <pubDate>Sun, 27 Jan 2008 07:21:33 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/118943.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2008/01/27/new-article-asp.net-ajax-best-practices.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/118943.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/118943.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET AJAX Best Practices: Avoid String concatenation, use Array instead</title>
            <link>http://geekswithblogs.net/Saqib/archive/2008/01/15/asp.net-ajax-best-practices-avoid-string-concatenation-use-array-instead.aspx</link>
            <description>&lt;p&gt;Don't you think the following block of code has written keeping every possible good practice in mind? Any option for performance improvement?&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;function &lt;/span&gt;pageLoad()
{
    &lt;span style="color: blue"&gt;var &lt;/span&gt;stringArray = &lt;span style="color: blue"&gt;new &lt;/span&gt;Array();
    
    &lt;span style="color: green"&gt;// Suppose there're a lot of strings in the array like:
    &lt;/span&gt;stringArray.push(&lt;span style="color: #a31515"&gt;'&amp;lt;div&amp;gt;'&lt;/span&gt;);
    stringArray.push(&lt;span style="color: #a31515"&gt;'some content'&lt;/span&gt;);
    stringArray.push(&lt;span style="color: #a31515"&gt;'&amp;lt;/div&amp;gt;'&lt;/span&gt;);
    
    &lt;span style="color: green"&gt;// ... code edited to save space
    
    &lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;veryLongHtml = $get(&lt;span style="color: #a31515"&gt;'divContent'&lt;/span&gt;).innerHTML;
    &lt;span style="color: blue"&gt;var &lt;/span&gt;count = stringArray.length;
    
    &lt;span style="color: blue"&gt;for&lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;i=0; i&amp;lt;count; ++i)
        veryLongHtml += stringArray[i];    
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Well, as you see the &lt;code&gt;innerHTML &lt;/code&gt;of the div has been cached so that browser will not have to access the DOM every time while iterating through &lt;code&gt;stringArray&lt;/code&gt;, thus costlier DOM methods are being avoided. But, inside the body of the loop the JavaScript interpreter has to perform the following operation:&lt;/p&gt;&lt;pre class="code"&gt;veryLongHtml = veryLongHtml + stringArray[i];&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;And the veryLongHtml contains quite a large string which means in this operation the interpreter will have to retrieve the large string and then concatenate with the stringArray elements in every iteration. One very short yet efficient solution to this problem is using join method of the array like the following, instead of looping through the array:&lt;/p&gt;&lt;pre class="code"&gt;veryLongHtml = stringArray.join(&lt;span style="color: #a31515"&gt;''&lt;/span&gt;); &lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;However, this is very efficient than the one we were doing, since it joins the array with smaller strings which requires less memory.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119173"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119173" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/119173.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2008/01/15/asp.net-ajax-best-practices-avoid-string-concatenation-use-array-instead.aspx</guid>
            <pubDate>Tue, 15 Jan 2008 12:44:43 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/119173.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2008/01/15/asp.net-ajax-best-practices-avoid-string-concatenation-use-array-instead.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/119173.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/119173.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET AJAX Best Practices: Introduce function delegates</title>
            <link>http://geekswithblogs.net/Saqib/archive/2008/01/12/asp.net-ajax-best-practices-introduce-function-delegates.aspx</link>
            <description>&lt;p&gt;Take a look at the following loop. This loop calls a function in each iteration and the function does some stuffs. Can you think of any performance improvement idea?&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;for&lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;i=0; i&amp;lt;count; ++i)
    processElement(elements[i]);&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Well, for sufficiently large array, function delegates may result in significant performance improvement to the loop.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;delegate = processElement;
    
&lt;span style="color: blue"&gt;for&lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;i=0; i&amp;lt;count; ++i)
    delegate(elements[i]);&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;The reason behind performance improvement is, JavaScript interpreter will use the function as local variable and will not lookup in its scope chain for the function body in each iteration.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119174"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119174" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/119174.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2008/01/12/asp.net-ajax-best-practices-introduce-function-delegates.aspx</guid>
            <pubDate>Sat, 12 Jan 2008 12:46:26 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/119174.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2008/01/12/asp.net-ajax-best-practices-introduce-function-delegates.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/119174.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/119174.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET AJAX Best Practices: Introduce DOM elements and function caching</title>
            <link>http://geekswithblogs.net/Saqib/archive/2008/01/11/asp.net-ajax-best-practices-introduce-dom-elements-and-function-caching.aspx</link>
            <description>&lt;p&gt;&lt;/p&gt;We have seen DOM caching before and function delegation is also a kind of function caching. Take a look at the following snippet: &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;for&lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;i=0; i&amp;lt;count; ++i)
    $get(&lt;span style="color: #a31515"&gt;'divContent'&lt;/span&gt;).appendChild(elements[i]); &lt;/pre&gt;As you can figure out the code is going to be something like: &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;divContent = $get(&lt;span style="color: #a31515"&gt;'divContent'&lt;/span&gt;);
    
&lt;span style="color: blue"&gt;for&lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;i=0; i&amp;lt;count; ++i)
    divContent.appendChild(elements[i]); &lt;/pre&gt;That is fine, but you can also cache browser function like &lt;code&gt;appendChild&lt;/code&gt;. So, the ultimate optimization will be like the following: &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;divContentAppendChild = $get(&lt;span style="color: #a31515"&gt;'divContent'&lt;/span&gt;).appendChild;
    
&lt;span style="color: blue"&gt;for&lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;i=0; i&amp;lt;count; ++i)
    divContentAppendChild(elements[i]);   &lt;/pre&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119175"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119175" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/119175.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2008/01/11/asp.net-ajax-best-practices-introduce-dom-elements-and-function-caching.aspx</guid>
            <pubDate>Fri, 11 Jan 2008 12:48:01 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/119175.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2008/01/11/asp.net-ajax-best-practices-introduce-dom-elements-and-function-caching.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/119175.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/119175.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET AJAX Best Practices: Problem with switch</title>
            <link>http://geekswithblogs.net/Saqib/archive/2008/01/10/asp.net-ajax-best-practices-problem-with-switch.aspx</link>
            <description>&lt;p&gt;Unlike .NET languages or any other compiler languages, JavaScript interpreter can not optimize switch block. Especially when switch statement is used with different types of data, it's a heavy operation for the browser due to conversion operations occur in consequences, it's an elegant way of decision branching though.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118944"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118944" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/118944.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2008/01/10/asp.net-ajax-best-practices-problem-with-switch.aspx</guid>
            <pubDate>Fri, 11 Jan 2008 01:26:03 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/118944.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2008/01/10/asp.net-ajax-best-practices-problem-with-switch.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/118944.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/118944.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET AJAX Best Practices: Avoid using Array.length in a loop</title>
            <link>http://geekswithblogs.net/Saqib/archive/2008/01/10/asp.net-ajax-best-practices-avoid-using-array.length-in-a-loop.aspx</link>
            <description>&lt;p&gt;In one of my earlier posts, I talked about DOM element accessing in a loop but forgot to talk about a very common, yet performance issue in AJAX. We often use code like the following:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;items = []; &lt;span style="color: green"&gt;// Suppose a very long array 
&lt;/span&gt;&lt;span style="color: blue"&gt;for&lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;i=0; i&amp;lt;items.length; ++i)
    ; &lt;span style="color: green"&gt;// Some actions&lt;/span&gt;&lt;/pre&gt;It can be a severe performance issue if the array is so large. JavaScript is an interpreted language, so when interpreter executes code line by line, every time it checks the condition inside the loop, you end up accessing the length property every time. Where it is applicable, if the contents of the array does not need to be changed during the loop's execution, there is no necessity to access the length property every time. Take out the length in a variable and use in every iteration: &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;items = []; &lt;span style="color: green"&gt;// Suppose a very long array 
&lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;count = items.length;
&lt;span style="color: blue"&gt;for&lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;i=0; i&amp;lt;count; ++i)
    ; &lt;span style="color: green"&gt;// Some actions&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119178"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119178" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/119178.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2008/01/10/asp.net-ajax-best-practices-avoid-using-array.length-in-a-loop.aspx</guid>
            <pubDate>Thu, 10 Jan 2008 12:52:38 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/119178.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2008/01/10/asp.net-ajax-best-practices-avoid-using-array.length-in-a-loop.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/119178.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/119178.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET AJAX Best Practices: Reduce scopes</title>
            <link>http://geekswithblogs.net/Saqib/archive/2008/01/06/asp.net-ajax-best-practices-reduce-scopes.aspx</link>
            <description>&lt;p&gt;It's not pretty common. But, if you ever encounter such code, be sure it's a very bad practice. Introducing more scopes is a performance issue for JavaScript interpreter. It adds a new scope in the ladder. See the following sample scope:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;function &lt;/span&gt;pageLoad()
{
    scope1();
    &lt;span style="color: blue"&gt;function &lt;/span&gt;scope1()
    {
        alert(&lt;span style="color: #a31515"&gt;'scope1'&lt;/span&gt;);
        scope2();
        
        &lt;span style="color: blue"&gt;function &lt;/span&gt;scope2()
        {
            alert(&lt;span style="color: #a31515"&gt;'scope2'&lt;/span&gt;);
        }
    }
}    &lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Introducing more scopes enforces the interpreter to go through new more sections in the scope chain that it maintains for code execution. So, unnecessary scopes reduce performance and it's a bad design too.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118945"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118945" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/118945.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2008/01/06/asp.net-ajax-best-practices-reduce-scopes.aspx</guid>
            <pubDate>Mon, 07 Jan 2008 01:44:10 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/118945.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2008/01/06/asp.net-ajax-best-practices-reduce-scopes.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/118945.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/118945.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET AJAX Best Practices: Avoid using your own method while there is one</title>
            <link>http://geekswithblogs.net/Saqib/archive/2008/01/06/asp.net-ajax-best-practices-avoid-using-your-own-method-while.aspx</link>
            <description>&lt;p&gt;Avoid implementing your own getElementById method that will cause script to DOM marshalling overhead. Each time you traverse the DOM and look for certain HTML element requires the JavaScript interpreter to marshalling script to DOM. It's always better to use getElementById of document object. So, before you write a function, make sure similar functionality can be achieved from some other built-in functions.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118936"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118936" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/118936.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2008/01/06/asp.net-ajax-best-practices-avoid-using-your-own-method-while.aspx</guid>
            <pubDate>Sun, 06 Jan 2008 14:11:47 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/118936.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2008/01/06/asp.net-ajax-best-practices-avoid-using-your-own-method-while.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/118936.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/118936.aspx</trackback:ping>
        </item>
        <item>
            <title>JavaScript execution before the page has finished loading</title>
            <link>http://geekswithblogs.net/Saqib/archive/2007/02/06/javascript-execution-before-the-page-has-finished-loading.aspx</link>
            <description>&lt;p&gt;When a webpage loads, it fetches the stylesheets, javascript, images, other objects etc. So, when it is done, it's already late and user may complain about the site's poor speed of execution. One way you can make it faster, you can start JavaScript execution immediately right after the HTML DOM has finished loading and ready to traverse, before the images. &lt;br /&gt;
&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: green"&gt;// Introduce our custom event onDOMReady 
&lt;/span&gt;window.onDOMReady = DOMReady  

&lt;span style="COLOR: blue"&gt;function &lt;/span&gt;DOMReady(fn) 
{ 
    &lt;span style="COLOR: green"&gt;// According to standard implementation 
     &lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt;(document.addEventListener) 
        document.addEventListener(&lt;span style="COLOR: #a31515"&gt;"DOMContentLoaded"&lt;/span&gt;, fn, &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;);  

    &lt;span style="COLOR: green"&gt;// IE 
    &lt;/span&gt;&lt;span style="COLOR: blue"&gt;else 
        &lt;/span&gt;document.onreadystatechange = &lt;span style="COLOR: blue"&gt;function&lt;/span&gt;() 
            { 
                checkReadyState(fn); 
            } 
}  

&lt;span style="COLOR: blue"&gt;function &lt;/span&gt;checkReadyState(fn) 
{ 
    &lt;span style="COLOR: blue"&gt;if&lt;/span&gt;(document.readyState == &lt;span style="COLOR: #a31515"&gt;"interactive"&lt;/span&gt;) 
        fn(); 
}  

window.onDOMReady( 
    &lt;span style="COLOR: blue"&gt;function&lt;/span&gt;() 
    { 
        &lt;span style="COLOR: green"&gt;// DOM is loaded 
        // So start JavaScript execution 
    &lt;/span&gt;} 
);&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118410"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118410" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Saqib/aggbug/118410.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Tanzim Saqib</dc:creator>
            <guid>http://geekswithblogs.net/Saqib/archive/2007/02/06/javascript-execution-before-the-page-has-finished-loading.aspx</guid>
            <pubDate>Wed, 07 Feb 2007 02:58:40 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Saqib/comments/118410.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Saqib/archive/2007/02/06/javascript-execution-before-the-page-has-finished-loading.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/Saqib/comments/commentRss/118410.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Saqib/services/trackbacks/118410.aspx</trackback:ping>
        </item>
    </channel>
</rss>