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

<channel>
	<title>justaddwater.dk &#187; Performance</title>
	<atom:link href="http://justaddwater.dk/category/performance/feed/" rel="self" type="application/rss+xml" />
	<link>http://justaddwater.dk</link>
	<description>Instant Usability &#38; Web Standards</description>
	<lastBuildDate>Thu, 02 Feb 2012 08:51:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Dilemma &#8212; Updated Numbers or Long Response Times</title>
		<link>http://justaddwater.dk/2008/01/11/dilemma-updated-numbers-or-long-response-times/</link>
		<comments>http://justaddwater.dk/2008/01/11/dilemma-updated-numbers-or-long-response-times/#comments</comments>
		<pubDate>Fri, 11 Jan 2008 12:05:12 +0000</pubDate>
		<dc:creator>Jesper Rønn-Jensen</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[User experience]]></category>

		<guid isPermaLink="false">http://justaddwater.dk/2008/01/11/dilemma-updated-numbers-or-long-response-times/</guid>
		<description><![CDATA[Paypal showed me this splash screen when logging in: I think this is a useful design pattern that can be valuable to most of our clients dealing with time-sensitive data. It is time-consuming for an application to check if there are new payments on every request. This check is better off being uncoupled from the [...]]]></description>
			<content:encoded><![CDATA[<p>Paypal showed me this splash screen when logging in:</p>
<p><a href="http://justaddwater.dk/wp-content/uploads/2008/01/paypal-account-unsync-notice.png" title="paypal-account-unsync-notice.png"><img src="http://justaddwater.dk/wp-content/uploads/2008/01/paypal-account-unsync-notice-thumb.png" alt="paypal-account-unsync-notice-thumb.png" /></a></p>
<p>I think this is a useful design pattern that can be valuable to most of our clients dealing with time-sensitive data.</p>
<p>It is time-consuming for an application to check if there are new payments on every request. This check is better off being uncoupled from the actual user request. Then, the check should be handled backend by a cron job or similar every second, minute, hour or whatever suits the data in the system.</p>
<p>The Paypal example has these advantages:</p>
<ul>
<li>Faster response times &#8212; does not wait for a backend account check</li>
<li>Server less sensitive for extreme load because each request uses less cpu power</li>
<li>Server can handle more users because each request ends faster</li>
</ul>
<p>Any other pros or cons you like to add?<br /><p><small>Technorati Tags: <a href="http://technorati.com/tag/usability" rel="tag">usability</a>, <a href="http://technorati.com/tag/performance" rel="tag"> performance</a>, <a href="http://technorati.com/tag/user+experience" rel="tag"> user experience</a>, <a href="http://technorati.com/tag/paypal" rel="tag"> paypal</a>, <a href="http://technorati.com/tag/response+time" rel="tag"> response time</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://justaddwater.dk/2008/01/11/dilemma-updated-numbers-or-long-response-times/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Why Web Standards Matter (Case Study)</title>
		<link>http://justaddwater.dk/2006/06/29/webstandards-case-study/</link>
		<comments>http://justaddwater.dk/2006/06/29/webstandards-case-study/#comments</comments>
		<pubDate>Thu, 29 Jun 2006 14:03:01 +0000</pubDate>
		<dc:creator>Jesper Rønn-Jensen</dc:creator>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Errors]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://justaddwater.dk/2006/06/29/webstandards-case-study/</guid>
		<description><![CDATA[Project managers often have a hard time understanding web standards and why they matter. In this case, my arguments made a perfect business case for the managers of a particular project.]]></description>
			<content:encoded><![CDATA[<p>Project managers often have a hard time understanding web standards and why they matter. In this case, my arguments made a perfect business case for the managers of a particular project.</p>
<p>Recently I was called out to debug some javascript code that did not perform. There was really not a big problem in Firefox, but Internet Explorer hung using 20 seconds or more each time the script was activated by the user.</p>
<p>It was one of those applications where you click on a little plus to expand a list of units in a subgroup. The list that caused the trouble contained 1,416 rows.</p>
<p>The subgroup was invisible and already rendered. On click a display style property changed from
<div class="codesnip-container" >display:none</div>
<p> to
<div class="codesnip-container" >display:block</div>
<p>. <strong>Unfolding the list took 19 seconds in IE</strong>. WHAT?</p>
<h3>A first look</h3>
<p>A brief investigation hinted something was wrong:</p>
<ul>
<li>Content/markup ratio: 23%/77%</li>
<li>Page contained 27,000 elements in the DOM</li>
<li>W3C HTML Validator unable to validate</li>
<li>Firefox HTML validator gave 6 HTML errors and 15,700 warnings</li>
<li>No JavaScript errors, though</li>
</ul>
<p>There were plenty of transparent spacer gifs, and <strong>the spacer gifs were used in empty table cells</strong>. A brief count in the DOM revealed that 5,400 of the 7,200 images were transparent gifs. Uh oh.</p>
<h3>Most important pitfall: TOO many elements in DOM</h3>
<p>JavaScript really was not the problem here, because there was nothing but an innocent
<div class="codesnip-container" >display:block</div>
<p> statement. The problem had to be rendering related and I got suspicious as the hidden list contained:</p>
<ul>
<li>One giant table element with
<div class="codesnip-container" >display:none</div>
</li>
<li>Inside that 1,416 rows</li>
<li>Each of the rows had a table cell with one new table inside it.</li>
<li>Each nested table had 15 cells (four of which contained only transparent spacer.gifs)</li>
<li>Tables nested six levels deep on the page</li>
</ul>
<p>All this equals <strong>bloated HTML </strong>and 27,000 total HTML elements on the page. Here&#8217;s how we got down to 11,000 elements without removing any content:</p>
<h3>Strategy for reducing element count</h3>
<p>These were my recommendations for reducing element count and thereby improving performance:</p>
<p><strong>Avoid JavaScript</strong>. We found that in this situation, the javascript performance had big variations on different browsers (and on the same browser, with different people logged in). In this case, we were able to avoid JavaScript, which is not always the case.</p>
<p><strong>Remove validation errors and warnings</strong>. Browsers are coded after the HTML specifications, HTML specifications tell browser vendors how their code should interpret valid HTML. If the code is not valid, sometimes browsers guess what they think the source code means. The only thing specified in the HTML standard is how valid code behaves. Invalid code is left for the browser to do whatever it pleases. If, for instance, a
<div class="codesnip-container" >form</div>
<p> element is nested directly in a
<div class="codesnip-container" >table</div>
<p> element, it&#8217;s not allowed. But what will the browser do about it? Render the element? Or silently ignore it? Can you submit forms at all from the page? If your form cannot submit, it can be a big risk to use HTML that does not validate.</p>
<p>In this particular case, there were 6 errors and 15,700 warnings (all of which could be easily fixed).</p>
<p><strong>Remove elements without content</strong>. Originally each of the 1416 rows had its own table element. Additionally, a lot of transparent images were placed in empty table cells. All of this clutter was removed. We ended up using six table columns in the parent table, compared to originally 15 columns in each of the 1416 child tables. This really adds up when you consider that in our baseline example we had 1416 rows. All in all we reduced HTML footprint with 40%.</p>
<h3>Result</h3>
<table width="100%" cellspacing="1" style="background: #eeeeee">
<tr>
<th></th>
<th>Before</th>
<th>After</th>
</tr>
<tr>
<td>display:none on subgroup:</td>
<td>19 sec</td>
<td>&lt;0.5 sec</td>
</tr>
<tr>
<td>
<div class="codesnip-container" >document.getElementsByTagName(&#8216;*&#8217;).length</div>
<p>:</td>
<td>27,000</td>
<td>11,471</td>
</tr>
<tr>
<td>Number of image tags:</td>
<td>7,200</td>
<td>1,426</td>
</tr>
<tr>
<td>Number of tables:</td>
<td>1,416</td>
<td>11</td>
</tr>
<tr>
<td>HTML validation errors:</td>
<td>6</td>
<td>0</td>
</tr>
<tr>
<td>HTML validation warnings:</td>
<td>15,700</td>
<td>0</td>
</tr>
<tr>
<td>IE memory consumption (avg):</td>
<td>46MB</td>
<td>35MB</td>
</tr>
<tr>
<td>IE memory consumption (peak).</td>
<td>58MB</td>
<td>36MB</td>
</tr>
</table>
<h3>Long-term findings</h3>
<ul>
<li>Don&#8217;t use JavaScript for general page layout rendering. Think really really hard if it can be done without JavaScript. One example: Print should be done with CSS</li>
<li>If there is no way around it, use standard JavaScript libraries were browser bugs, etc are hidden for the programmer</li>
<li>Tables used for layout are evil. Use tables for table-based content ONLY</li>
<li>HTML code is really messy and hard to maintain. Should be cleaned up to avoid similar situations in the future. Clean up nested tables, table cells with transparent gifs. Use CSS where appropriate could shave up to 50-70% of HTML footprint</li>
<li>Many HTML validation errors. Code improperly nested, forgotten end-tags: Ideally, the pages should have no validation errors. It&#8217;s an achievable work worth the effort and very educational way of working with the code</li>
</ul>
<h3>Long-term benefits</h3>
<p>In general, several benefits could be gained by raising the knowledge of HTML, CSS, Javascript, web standards, and browser issues.</p>
<ul>
<li>Include easier maintenance</li>
<li>Lower risk of change</li>
<li>Lower risk of browser incompatibilities</li>
<li>Lower risk of browser crashes</li>
</ul>
<h3>Browser tools</h3>
<p>These tools I used for quick investigation of the HTML page:</p>
<ul>
<li><a title="Firefox Add-ons: HTML validator" href="https://addons.mozilla.org/firefox/249/">HTML validator Firefox extension</a> by <a title="Marc Gueury Mozilla homepage" href="http://users.skynet.be/mgueury/mozilla/">Marc Gueury</a></li>
<li><a title="Firefox Add-ons: Firebug" href="https://addons.mozilla.org/firefox/1843/">Firebug Firefox extension</a> by <a title="Joe Hewitt website" href="http://www.joehewitt.com/">Joe Hewitt</a></li>
<li>Content/markup ratio with <a title="Slayeroffice: Page Info Favelet" href="http://slayeroffice.com/?c=/content/tools/pagenfo.html">pageinfo bookmarklet</a> by Slayeroffice (Steve Chipman) <small>who has a <a title="Slayeroffice: Javascript the cat" href="http://slayeroffice.com/archives/?p=140">cat named Javascript</a>!</small></li>
<li>Counting of HTML elements with <a title="Squarefree: Javascript Shell" href="http://www.squarefree.com/shell/">JavaScript shell bookmarklet</a> by Jesse Ruderman:
<div class="codesnip-container" >document.getElementsByTagName(&#8216;*&#8217;).length</div>
<p><small>could be done dicectly from the browser address bar by typing:</small></p>
<div class="codesnip-container" >javascript:alert(document.getElementsByTagName(&#8216;*&#8217;).length);</div>
</li>
</ul>
<p>More info on my firefox extensions in the article: <a rel="bookmark" title="Permanent Link to Web developer’s collection of browser tools" href="http://justaddwater.dk/2005/11/30/web-developers-collection-of-browser-tools/">Web developer’s collection of browser tools</a> (Nov 30th, 2005).</p>
<p><small>Technorati Tags: <a href="http://technorati.com/tag/webstandards" rel="tag">webstandards</a>, <a href="http://technorati.com/tag/w3c" rel="tag"> w3c</a>, <a href="http://technorati.com/tag/browser+errors" rel="tag"> browser errors</a>, <a href="http://technorati.com/tag/code" rel="tag"> code</a>, <a href="http://technorati.com/tag/performance" rel="tag"> performance</a>, <a href="http://technorati.com/tag/javascript" rel="tag"> javascript</a>, <a href="http://technorati.com/tag/html" rel="tag"> html</a>, <a href="http://technorati.com/tag/dom" rel="tag"> dom</a>, <a href="http://technorati.com/tag/spacer.gif" rel="tag"> spacer.gif</a>, <a href="http://technorati.com/tag/" rel="tag"> </a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://justaddwater.dk/2006/06/29/webstandards-case-study/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Ticket systems: Worst user experience ever!</title>
		<link>http://justaddwater.dk/2006/05/13/ticket-systems/</link>
		<comments>http://justaddwater.dk/2006/05/13/ticket-systems/#comments</comments>
		<pubDate>Fri, 12 May 2006 22:15:13 +0000</pubDate>
		<dc:creator>Jesper Rønn-Jensen</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://justaddwater.dk/2006/05/13/ticket-systems/</guid>
		<description><![CDATA[Michael Heilemann wrote a rant on Billetlugen, a Danish company that sells tickets to concerts, etc. Two weeks ago they sold 85,000 tickets to Madonna&#8217;s only concert in scandinavia, August 24 in Horsens, Denmark. I had the worst user experience ever, and Billetlugen&#8217;s systems failed to sell me the tickets. We were on holiday in [...]]]></description>
			<content:encoded><![CDATA[<p>Michael Heilemann wrote a rant on Billetlugen, a Danish company that sells tickets to concerts, etc. Two weeks ago they sold 85,000 tickets to Madonna&#8217;s only concert in scandinavia, August 24 in Horsens, Denmark. I had the worst user experience ever, and Billetlugen&#8217;s systems failed to sell me the tickets.</p>
<p>We were on holiday in Italy but as my wife is a big Madonna fan, I called in vain to buy tickets. Here&#8217;s my experience:</p>
<ol>
<li>Called the number, from my cell phone, phone responded &#8220;network busy&#8221; (the busy network must have been at Billetlugen).</li>
<li>Tried again as soon as possible (usually every 10 seconds for the next 3 hours).</li>
<li>Eventually I got through and was presented with this menu:
<ul>
<li>Press 1 for purchase of Madonna tickets</li>
<li>Press 2 for purchase of other tickets</li>
<li>Press 3 for other</li>
</ul>
</li>
<li>I pressed 1 and got the message <strong>&#8220;there are currently no available salespersons. Try again later&#8221;. Then, the line was disconnected!</strong> DISCONNECTED????</li>
<li>I simply couldn&#8217;t believe that this was intentionally implemented in their system, so I stubbornly called up again until I got through. It happened all three times I got through to Billetlugen.</li>
</ol>
<p>I have never heard of broken queue system this way. It&#8217;s the worst user experience I ever had. They bloody disconected just when I thought i got through the bottleneck.</p>
<p>I wasted over three hours this way. I join Michael Heilemann in his point that here is definately room for improvement (For a start, when people call in, try NOT to disconnect them before they have purchased tickets :) .</p>
<p>A few of my friends and colleagues had the exact same experience, and they also experienced website dead as a zombie. I was also told that 500,000 people had tried simultaneously to buy tickets which made the systems break down.</p>
<p>On Billetlugen&#8217;s homepage I found this image &#8220;Powered by iTicket and .Net&#8221;. Not the best advertisement for Microsoft .Net, that Billetlugen breaks down.</p>
<p><img alt="Billetlugen powered by iTicket and .Net" src="http://billetlugen.dk/images/gfx_std/bl_iticket_net.gif" /></p>
<p>One last thing: I called in vain every 10 seconds for the first two hours. thats about 700 calls. Ironic that they could have served me in one call…</p>
<p>More info on Michael Heilemann&#8217;s blog: <a href="http://binarybonsai.com/archives/2006/05/08/boycot-billetlugen/">Boycot Billetlugen</a></p>
<p>PS. If anybody have two tickets to spare, please let me know!</p>
<p><small>Technorati Tags: <a href="http://technorati.com/tag/usability" rel="tag">usability</a>, <a href="http://technorati.com/tag/user+experience" rel="tag"> user experience</a>, <a href="http://technorati.com/tag/concert+tickets" rel="tag"> concert tickets</a>, <a href="http://technorati.com/tag/ticket+systems" rel="tag"> ticket systems</a>, <a href="http://technorati.com/tag/billetlugen" rel="tag"> billetlugen</a>, <a href="http://technorati.com/tag/michael+heilemann" rel="tag"> michael heilemann</a>, <a href="http://technorati.com/tag/madonna" rel="tag"> madonna</a>, <a href="http://technorati.com/tag/horsens" rel="tag"> horsens</a></small></p>
<ol />
]]></content:encoded>
			<wfw:commentRss>http://justaddwater.dk/2006/05/13/ticket-systems/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>AJAX performance stats, ROI, and business value</title>
		<link>http://justaddwater.dk/2006/01/14/ajax-performance-stats-roi-and-business-value/</link>
		<comments>http://justaddwater.dk/2006/01/14/ajax-performance-stats-roi-and-business-value/#comments</comments>
		<pubDate>Fri, 13 Jan 2006 23:10:30 +0000</pubDate>
		<dc:creator>Jesper Rønn-Jensen</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Best of Justaddwater]]></category>
		<category><![CDATA[Businesscase]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Web Standards]]></category>
		<category><![CDATA[Web Statistics]]></category>

		<guid isPermaLink="false">http://justaddwater.dk/2006/01/14/ajax-performance-stats-roi-and-business-value/</guid>
		<description><![CDATA[How do you build a system that can deliver and update content to 100,000 people simultaneously? Via Ajaxian.com I saw this article from MacRumors on what traffic they got when Steve Jobs delivered his keynote on MacWorld a few days ago.

Also in this post: Ajaxinfo (the guys behind <a href="http://blogs.ebusiness-apps.com/andre/?p=52">AJAX usability metrics</a>), <a href="http://www.ajaxinfo.com/default~viewart~18.htm">AJAX ROI faceoff</a>, where a traditional webapp is compared to an AJAX webapp. For the visually oriented, there is a video comparing the two applications.]]></description>
			<content:encoded><![CDATA[<p>How do you build a system that can deliver and update content to 100,000 people simultaneously? Via <a title="Ajax Reduces Load on MacRumors.com Servers" href="http://ajaxian.com/?p=735">Ajaxian.com</a> I saw this article from MacRumors on what traffic they got when Steve Jobs delivered his keynote on MacWorld a few days ago.</p>
<blockquote><p>On January 10th, 2006, <a href="http://www.macrumors.com/">MacRumors.com</a> successfully delivered live updates of the Macworld San Francisco  Keynote speech to over 100,000 people  simultaneously using the  latest web technologies.</p>
<p style="margin-left: 2em; margin-right: 2em; font-size: smaller"><em>&#8220;By far the best mac keynote coverage I have ever seen. No constant page refreshing. No &#8216;page will update every three minutes&#8217; even though they never do. I just let the page update every minute like it was supposed to. It was actually weird to get coverage without some sort of connection failure.&#8221; &#8211; MacRumors member, war</em></p>
</blockquote>
<p>The live coverage web solution is basically a transscript updated frequently during the keynote. One article is about the <a title="MacRumors.com's Webcast Stats during the Macworld San Francisco 2006 Keynote" href="http://www.macrumors.com/events/mwsf2006-stats.php">traffic they experienced</a>:</p>
<blockquote><p>Our site was linked to widely across the web, including prominent links from <a href="http://www.digg.com/">Digg</a> and <a href="http://www.slashdot.org/">Slashdot</a> &#8212; two popular technology sites.   These links caused no noticable &#8220;spike&#8221; in our number of visitors, illustrating the magnitude of traffic that <em>MacRumorsLive</em> was already receiving.</p>
<p>We peaked at approximately <strong>103,000</strong> simultaneous web visitors and <strong>6,000</strong> IRC viewers during the  Keynote speech and transmited over <strong>32 GB</strong> of data in a three hour period.  If not for  the  efficiency of the <em>MacRumorsLive</em> AJAX update system, the same webcast would have required approximately twice as many servers and would have had to transfer almost 6 times as much data (196 GB).</p></blockquote>
<p>With peak loads that reaches insane levels of almost 4,000 hits per second:</p>
<blockquote>
<table>
<tr>
<td>Hits/second <sup>(2)</sup></td>
<td>3,812</td>
</tr>
<tr>
<td>IRC users</td>
<td>6,079</td>
</tr>
<tr>
<td>Simultaneous visitors</td>
<td>109,000</td>
</tr>
<tr>
<td>Bandwidth <sup>(3)</sup></td>
<td>approx. 77Mbit/sec</td>
</tr>
</table>
</blockquote>
<div align="center">
<pre id="line1"><a class="imagelink" title="MacWorld keynote hits graph (from macrumors.com)" onclick="doPopup(72);return false;" href="http://www.macrumors.com/events/mwsf2006-stats.php"><img width="480" height="235" id="image72" alt="MacWorld keynote hits graph (from macrumors.com)" src="http://justaddwater.dk/wp-content/uploads/2006/01/hits-20060110.gif" /></a></pre>
</div>
<div align="center"><span class="start-tag" /><span class="start-tag">Hits per second from ~8am to ~12:30pm. Average over each minute.</span></div>
<p>They also posted an article about <a title="MacRumorsLive.com: EQX Webcast System" href="http://www.macrumorslive.com/about/">how they built the system</a> which is insanely interesting</p>
<blockquote><p>Traditionally, websites have coped with visitors during the keynotes by swapping to text-only pages, using HTML Meta Refresh to reload the page at set intervals, usually every three minutes, for example, <a target="_blank" href="http://www.macrumors.com/events/mwsf2005.html">MacRumors&#8217; coverage from MacWorld in January 2005</a>. As a result, the sites lose their identity and branding, and cannot make best use of the additional traffic for site promotion.</p>
<p>Even with all this simplification the sheer number of visitors can still take the server down. To provide the best coverage during live events an improved system is required.</p></blockquote>
<blockquote><p>As this system is retaining the normal layout of the site, all the necessary objects (CSS, images &#038; Javascript) also need to be loaded. This increases the load placed on the web servers considerably in comparison to the old system, which only had a single text file to display. Even with the ability to use multiple servers, the web server software needs to be improved.</p>
<p>By using <a target="_blank" href="http://www.php.net/">PHP</a> to generate the necessary HTML &#038; XML files every ten seconds, rather than each time the file is requested, it is possible to use small &#038; simple web servers to deliver the public site, without the overhead of database usage. Two web server software packages are employed &#8211; <a target="_blank" href="http://www.lighttpd.net/">lighttpd</a> and <a target="_blank" href="http://www.acme.com/software/thttpd/">thttpd</a> &#8211; with <a target="_blank" href="http://httpd.apache.org/">Apache</a> still being used for the administration interface.</p>
<p>The efficiency of these packages over Apache is considerable and allows quite modest hardware to be used to serve a large number of visitors. Benchmarks of lighttpd compared to various other packages can be found on <a target="_blank" href="http://www.lighttpd.net/benchmark/">their website</a>. In our tests, thttpd was able to sustain in excess of 3,300 hits per second, whereas Apache managed only 600 hits per second for 20 seconds, before overloading the server due to memory usage. [1]</p>
<p>The use of these more specialised web servers allows a vast number of simultaneous visitors to be supported &#8211; as the system stands at the moment, in excess of 200,000.</p></blockquote>
<p>This reminds me of Ajaxinfo (the guys behind <a href="http://blogs.ebusiness-apps.com/andre/?p=52">AJAX usability metrics</a>), <strong><a href="http://www.ajaxinfo.com/default~viewart~18.htm">AJAX ROI faceoff</a>,</strong> where a traditional webapp is compared to an AJAX webapp. For the visually oriented, there is a video comparing the two applications at the end of the article.</p>
<blockquote><p>Recently on Developer.com, I looked at ways for developers to <a href="http://www.developer.com/xml/article.php/3554271">communicate the value of Ajax</a> in dollars and cents. Arguing for or against a technology usually creates some stress for developers, who tend to speak a different language from business decision makers.</p>
<table width="100%" cellpadding="5" border="0">
<tr bgcolor="#f0f0f0" align="center">
<td><strong>Developers talk about</strong></p>
<div align="left">
<ul>
<li>Usability</li>
<li>Bandwidth</li>
<li>Ramp-up</li>
<li>Cost of Ownership</li>
</ul>
</div>
</td>
<td><strong>Managers talk about</strong></p>
<div align="left">
<ul>
<li>Efficiency</li>
<li>Transaction costs</li>
<li>Training costs</li>
<li>Return on Investment (ROI)</li>
</ul>
</div>
</td>
</tr>
</table>
</blockquote>
<p>Right at the point. Performance website or not, the metrics he mentions above are almost like something Jakob Nielsen could have done. Conclusions:</p>
<blockquote><p>Although every new technology should be greeted with a healthy amount of skepticism, there are clearly demonstrable, quantifiable advantages to using an Ajax architecture in a Web application. These cost savings originate primarily from time savings, but also from reductions in bandwidth requirements.</p>
<p>A representative test case showed that a business can save between 500 and 2,800 man hours per year on a 10-step hypothetical process, saving roughly 4 seconds per step (a between 30% and 70% reduction in labor costs).</p>
<p>Although the benefits of improved application architecture extend beyond mere time savings, when included in the decision making process, an ROI approach such as this can help make a solid business case for Ajax.</p></blockquote>
<p align="center"><img width="300" height="241" id="image73" alt="Total time taken (AJAX vs traditional webapp)" src="http://justaddwater.dk/wp-content/uploads/2006/01/totaltimetaken.gif" /><img width="300" height="241" id="image74" alt="Total bytes transferred (AJAX vs traditional webapp)" src="http://justaddwater.dk/wp-content/uploads/2006/01/bytestransferred.gif" /></p>
<p>The benefits listed here are very similar to benefits when we&#8217;re arguing for web-standards: Reduced bandwith, training costs, cost of ownership, and increased return on investment. But for the time being I still believe that AJAX has increased learning costs for developers. (Although most developers are really keen on using AJAX and webstandards it still requires expert knowledge regarding libraries, backend integration and browser compatibility — to name a few).<br />
I&#8217;d be happy to hear your comments on this. Please share more info here. Also check out Ajaxinfo&#8217;s <a href="http://www.ajaxinfo.com/default~viewart~22.htm">Call for AJAX Studies</a>.</p>
<p><strong>UPDATE:  </strong>Just saw Jonathan Boutelle&#8217;s <a title="Jonathan Boutelle: Bandwith Savings with AJAX" href="http://www.jonathanboutelle.com/mt/archives/2006/01/bandwidth_savin.html">Bandwidth Savings with AJAX</a> blog post, that covers the same story and has a good point on AJAX fit frequently used applications:</p>
<blockquote><p>The old-school RIA technology vendors always made the claim that using the RIA paradigm saves you bandwidth. Numbers on this were always hard to get, and hard to trust.</p>
<p>Theoretically it always made sense that an RIA would consume less bandwidth (in exchange for a larger initial download). The longer a user continues to use the application, the greater this benefit (so an RIA word processor might make more sense than an RIA news site).</p>
<p>Now, watching a keynote presentation takes at least an hour, so it&#8217;s definitely long enough to provide benefit. What we see in this case is really different though: AJAX is basically being used as a <em>broadcast technique</em>, grabbing new data every minute so that the user doesn&#8217;t have to refresh the entire page. For covering live events that have a large audience, this makes a ton of sense. Expect to see more content sites &#8220;pushing&#8221; content out to their users this way.</p></blockquote>
<p><small>Technorati Tags: <a href="http://technorati.com/tag/macrumor" rel="tag">macrumor</a>, <a href="http://technorati.com/tag/ajax" rel="tag"> ajax</a>, <a href="http://technorati.com/tag/performance" rel="tag"> performance</a>, <a href="http://technorati.com/tag/ajaxian" rel="tag"> ajaxian</a>, <a href="http://technorati.com/tag/macworld" rel="tag"> macworld</a>, <a href="http://technorati.com/tag/architecture" rel="tag"> architecture</a>, <a href="http://technorati.com/tag/webdevelopment" rel="tag"> webdevelopment</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://justaddwater.dk/2006/01/14/ajax-performance-stats-roi-and-business-value/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
	</channel>
</rss>

