<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Pjh0211's Weblog</title>
	<atom:link href="http://pjh0211.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://pjh0211.wordpress.com</link>
	<description>Misc. Development Blog for Phil Hontalas</description>
	<lastBuildDate>Sat, 11 Apr 2009 16:14:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='pjh0211.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Pjh0211's Weblog</title>
		<link>http://pjh0211.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://pjh0211.wordpress.com/osd.xml" title="Pjh0211&#039;s Weblog" />
	<atom:link rel='hub' href='http://pjh0211.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Performance Notes on a social site</title>
		<link>http://pjh0211.wordpress.com/2009/04/09/performance-notes-on-a-social-site/</link>
		<comments>http://pjh0211.wordpress.com/2009/04/09/performance-notes-on-a-social-site/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 06:45:31 +0000</pubDate>
		<dc:creator>Phil Hontalas</dc:creator>
				<category><![CDATA[Web Performance]]></category>

		<guid isPermaLink="false">http://pjh0211.wordpress.com/?p=36</guid>
		<description><![CDATA[Introduction A little while back, an old friend, who is an engineering exec at a very big internet company (no names will be given here), was complaining about the performance &#38; stability of a social networking site that is within his company.  So just out of curiosity , I decided to take a look at [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pjh0211.wordpress.com&amp;blog=3103523&amp;post=36&amp;subd=pjh0211&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>A little while back, an old friend, who is an engineering exec at a very big internet company (<em><strong>no names will be given here</strong></em>), was complaining about the performance &amp; stability of a social networking site that is within his company.  So just out of curiosity , I decided to take a look at what he was talking about &amp; created and account on the site. This post presents some of my initial observations &amp; impressions. It is an interesting challenge because, as an outsider to the company, I know virtually nothing about the site&#8217;s backend architecture. Since very smart performance folks such as <a title="Steve Souders site" href="http://stevesouders.com/" target="_blank">Steve Souders</a> are often saying  performance from the <a title="Ajax Exp Souders Talk" href="http://ajaxexperience.techtarget.com/east/html/quality.html#SSoudersFast" target="_blank">front end perspective is what really matters</a> , I thought this would be a good exercise. To see what I can find out without any knowledge of what is behind the site. I want to stress these are very informal notes &amp; observations which may change over time. I am mostly using very simple principles which are outlined in my more general <a title="Notes on Web Performance" href="http://pjh0211.wordpress.com/category/web-performance/" target="_blank">post on Web Performnce</a>.  For the moment here are my initial impressions &amp; depending upon feedback, I may add a more detailed analysis later:</p>
<h2>First a short Non-Performance Observation</h2>
<p>Before I go into the performance of this site, there is something which struck me odd / undesirable whilst gathering data. It doesn&#8217;t pertain to performance, but I think noteworthy none the less:<br />
<strong>The following JSON  is passed on many of page requests I make to this site:</strong><br />
{&#8220;Member&#8221;:{&#8220;id&#8221;:&#8221;89XXXX4&#8243;,<br />
&#8220;chatUsername&#8221;:&#8221;philhXXX@XXX.com&#8221;,<br />
&#8220;appearOnline&#8221;:true,<br />
&#8220;age&#8221;:&#8221;XX&#8221;,<br />
&#8220;avatarUrl&#8221;:&#8221;http://i2.XXXo.com/048/ .. /89&#8230;45s.jpg&#8221;,<br />
&#8220;displayName&#8221;:&#8221;XXX XXX &#8220;},&#8221;CDN&#8221;:{&#8220;prefix&#8221;:&#8221;http://s.XXX.com&#8221;},<br />
{ &#8220;FederatedLogin&#8221;:{&#8220;token&#8221;:&#8221;/wQA &#8230; sRgxA=&#8221;,<br />
. . . },<br />
{&#8220;SessionId&#8221;:&#8221;0XXX028:philhXXX@XXX.com&#8221;,<br />
&#8220;API_URL&#8221;:&#8221;http://api.XXX.XXX.com&#8221;,&#8221;FetchUrl&#8221;:<br />
&#8220;http://205&#8230;.51/../fetchEvents?XXid=003.09028:<br />
philhXXX@XXX.com&amp;rnd=123&#8230;21&#8243;,<br />
&#8220;LANG&#8221;:&#8221;en-us&#8221;,&#8221;API_KEY&#8221;:&#8221;mi1V&#8230;c4v&#8221;}<br />
};</p>
<p>Looking at the request with a simple sniffer, the following Cookie Data is frequently passed <strong>&#8220;in the clear&#8221;:</strong></p>
<p>Cookie:Email=XXXX@XXX.com; Username=PhilHXXX;<br />
Age=XX;Gen=M;Password=(at least this is obfuscated!)</p>
<p>Just hanging out there with my Email , User Login, Age, IM Ids , state, etc&#8230; in <strong>Clear Un-obfuscated Text!</strong> This just seems wrong to me &amp; in number of ways, which I won&#8217;t go into detail now. But you could imagine  a number of scenarios where there could be security &amp; privacy issues here. I&#8217;ve checked a few other social networking sites &amp; they all seem to do much more to obfuscate user identity &amp; info.</p>
<h2>Some basic performance stats</h2>
<p>Let&#8217;s just get a few basic stats listed here &amp; out of the way. For this first pass we a looking at 3 pages of the social site:</p>
<ol>
<li>An opening <strong>Splash Page</strong> at the site&#8217;s entry point.</li>
<li>A <strong>User Home</strong> page (similar to Facebook&#8217;s Wall).</li>
<li>A <strong>User Profile</strong> page.</li>
</ol>
<h3>Essential Metrics</h3>
<table border="1">
<tbody>
<tr>
<th>Page</th>
<th>HTML</th>
<th>JS</th>
<th>CSS</th>
<th>Images</th>
<th>Other</th>
<th>TotalSize</th>
<th> #Reqs</th>
</tr>
<tr>
<td>Splash</td>
<td>5.6K(1)</td>
<td>280K(24)</td>
<td>33K(3)</td>
<td>389K(22)</td>
<td>10K(7)</td>
<td>734K</td>
<td>62</td>
</tr>
<tr>
<td>Home</td>
<td>10K(1)</td>
<td>167K(31)</td>
<td>35K(3)</td>
<td>282K(46)</td>
<td>3K(6)</td>
<td>496K</td>
<td>90</td>
</tr>
<tr>
<td>Profile</td>
<td>17K(2)</td>
<td>160K(37)</td>
<td>36K(4)</td>
<td>270K(63)</td>
<td>463K(10)</td>
<td>940K</td>
<td>128</td>
</tr>
</tbody>
</table>
<p><strong>Table 1 :  YSlow Statistics</strong> &#8211;  Post Decompression , &amp; Empty Cache.</p>
<p><strong></strong></p>
<div id="attachment_58" class="wp-caption aligncenter" style="width: 490px"><strong><strong><img class="size-full wp-image-58" title="fiddlerbreakdown-1" src="http://pjh0211.files.wordpress.com/2009/04/fiddlerbreakdown-1.jpg?w=480&#038;h=212" alt="Fiddler Page Breakdown" width="480" height="212" /></strong></strong><p class="wp-caption-text">Fiddler Page Breakdown</p></div>
<p><strong></strong></p>
<p><strong>Figure 1 : Fiddler Page Component Breakdown.</strong></p>
<div id="attachment_62" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-62" title="socialloadtime1" src="http://pjh0211.files.wordpress.com/2009/04/socialloadtime1.jpg?w=480&#038;h=326" alt="Basic Load Time for 3 Test Page (No JS Execution)" width="480" height="326" /><p class="wp-caption-text">Basic Load Time for 3 Test Page (No JS Execution)</p></div>
<p><strong>Figure 2 : Basic Load Time for 3 test pages.<br />
</strong></p>
<h3>A Few Notes &amp; Observations:</h3>
<ul>
<li>CDN Use on all 3 measured pages is good.</li>
<li>Use of GZIP compression on this site is pretty good, but there are a few places where this can be improved.</li>
<li>Image optimization is good. I see good use of CSS Sprites to keep the request count &amp; page size down.</li>
<li>CSS Stylesheet usage is structured well &amp; lean.</li>
<li>The Profile page has a few compression &amp; js minify holes &amp; suffers from a bit of request bloat.</li>
<li>Browser Perception (both Firefox &amp; IE 7 ) for Profile Page is somewhat &#8220;jerky&#8221;.</li>
<li>In Figure 1, Notice how the Splash Page (static content) load is  fairly stable. However, the two dynamic pages have lots of spikes in performance. This suggests some underlying  backend infrastructure issue which is causing a wider variance in performance. In fact, a point (which is not shown in this chart is the two dynamic pages are also registering load errors (component time out ) about 2% of the time!</li>
</ul>
<p>On the surface, the site is doing many things right &amp; applying a fair number of the principles of <a title="YDN Performance" href="http://developer.yahoo.com/performance/" target="_blank">Exceptional Performance</a> . However, this is just the surface. Let&#8217;s dig a little deeper &amp; specifically to the Profile page:</p>
<h2>Next Observations</h2>
<p>In timing this site, I have noticed on the Home &amp; Profile pages, frequent stalls in rendering. I have seen this for both Firefox &amp; IE 7 browsers. The next sequence graphs of page component load may give us a clue to some of this perceived behavior.</p>
<div id="attachment_71" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-71" title="profile-first20requests-scrubbed2" src="http://pjh0211.files.wordpress.com/2009/04/profile-first20requests-scrubbed2.jpg?w=480&#038;h=226" alt="Initial JS Load for the site" width="480" height="226" /><p class="wp-caption-text">Initial JS Load for the site</p></div>
<p><strong>Figure 3: Examination of JavaScript load; Profile Page, Load Start.</strong></p>
<p>The important thing to note in Figure 3 ( initial JS load) is how sequential the load is. This is not un-expected since the bulk of the JS here is being loaded in through conventional script tags:</p>
<p>&lt;script language=&#8221;javascript&#8221;<br />
src=&#8221;http://s.XXX.com/img/yui/yui_2.5.2/cookie/cookie-beta-min.js?fp=79&#8230;b8f&#8221;&gt;&lt;/script&gt;<br />
&lt;script language=&#8221;javascript&#8221; src=&#8221;http://s.XXX.com/js/help.js?fp=5c1&#8230;337&#8243;&gt;&lt;/script&gt;<br />
&lt;script language=&#8221;javascript&#8221; src=&#8221;http://s.XXX.com/js/tooltip.js?fp=a29&#8230;938&#8243;&gt;&lt;/script&gt;<br />
&lt;script language=&#8221;javascript&#8221;<br />
src=&#8221;http://s.XXX.com/js/platform_moo12.js?fp=163&#8230;9a0&#8243;&gt;&lt;/script&gt;<br />
&lt;script language=&#8221;javascript&#8221;<br />
src=&#8221;http://s.XXX.com/c/home/index_script.js?fp=f6b&#8230;84&#8243;&gt;&lt;/script&gt;<br />
etc, etc, etc,  . . .</p>
<div id="attachment_64" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-64" title="profile_midjsrequests1" src="http://pjh0211.files.wordpress.com/2009/04/profile_midjsrequests1.jpg?w=480&#038;h=254" alt="Later JS Loads on Profile Page" width="480" height="254" /><p class="wp-caption-text">Later JS Loads on Profile Page</p></div>
<p><strong>Figure 4: Examination of JavaScript load; Profile Page, Mid &#8211; Page.</strong><br />
However, if we look at the load profile later down the page, we see the same sort of sequential load behavior. This is somewhat unexpected &amp; is probably one of the causes of the &#8220;jerkiness&#8221; in rendering.<br />
I would recommend loading these scripts with XHR Eval or XHR Injection or one of the other techniques described in <a title="Steve Souders Cuzillion" href="http://stevesouders.com/cuzillion/" target="_blank">Steve Souders&#8217; cuzillion site</a>.  In order to illustrate this point, lets take a look at the initial js load for another very popular social networking site:</p>
<div id="attachment_70" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-70" title="fb-initialjs-load-2" src="http://pjh0211.files.wordpress.com/2009/04/fb-initialjs-load-2.jpg?w=480&#038;h=286" alt="Parallel JS Load on a different site" width="480" height="286" /><p class="wp-caption-text">Parallel JS Load on a different site</p></div>
<p><strong>Figure 5 : Javascript Load for a different social site.</strong> Notice how the loads are being performed in parallel.</p>
<h2>Conclusions</h2>
<p>I want to stress here, that this is a very &#8220;first pass&#8221; simple look at the performance of this social site. In general the traditional tools (that I have been using here) for site performance measurement are really inadequate to fully evaluate very dynamic social networking sites.  The timing information I&#8217;ve gathered does suggest some backend issues may be going on. On the JavaScript side, in general I see many things being done right. However, I think more effort place into making JS load parallel would help user experience considerably.  I am also encouraged by what seems to be the adoption of the  <a title="Mootools" href="http://mootools.net/" target="_blank">mootools</a> framework. I&#8217;ve recently worked on a mootools project &amp; I am very impressed with the framework. However in terms of performance  you may want to look at these benchmarks :</p>
<p>-  <a href="http://tinyurl.com/3tuv7s" target="_blank">http://tinyurl.com/3tuv7s</a> # Good Comparison Benchmark of JS Frameworks.<br />
-  <a href="http://mootools.net/slickspeed/" target="_blank">http://mootools.net/slickspeed/</a> # The Slickspeed Benchmark<br />
-  <a href="http://tinyurl.com/2lrxnz" target="_blank">http://tinyurl.com/2lrxnz</a> # a retort to the Slickspeed Benchmark</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pjh0211.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pjh0211.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pjh0211.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pjh0211.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pjh0211.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pjh0211.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pjh0211.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pjh0211.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pjh0211.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pjh0211.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pjh0211.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pjh0211.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pjh0211.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pjh0211.wordpress.com/36/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pjh0211.wordpress.com&amp;blog=3103523&amp;post=36&amp;subd=pjh0211&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pjh0211.wordpress.com/2009/04/09/performance-notes-on-a-social-site/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7f7be3d4712bb5ea9a2b2fe353f1bff7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pjh0211</media:title>
		</media:content>

		<media:content url="http://pjh0211.files.wordpress.com/2009/04/fiddlerbreakdown-1.jpg" medium="image">
			<media:title type="html">fiddlerbreakdown-1</media:title>
		</media:content>

		<media:content url="http://pjh0211.files.wordpress.com/2009/04/socialloadtime1.jpg" medium="image">
			<media:title type="html">socialloadtime1</media:title>
		</media:content>

		<media:content url="http://pjh0211.files.wordpress.com/2009/04/profile-first20requests-scrubbed2.jpg" medium="image">
			<media:title type="html">profile-first20requests-scrubbed2</media:title>
		</media:content>

		<media:content url="http://pjh0211.files.wordpress.com/2009/04/profile_midjsrequests1.jpg" medium="image">
			<media:title type="html">profile_midjsrequests1</media:title>
		</media:content>

		<media:content url="http://pjh0211.files.wordpress.com/2009/04/fb-initialjs-load-2.jpg" medium="image">
			<media:title type="html">fb-initialjs-load-2</media:title>
		</media:content>
	</item>
		<item>
		<title>Notes on Web Performance (Part 1)</title>
		<link>http://pjh0211.wordpress.com/2009/04/07/web-performance-part-1/</link>
		<comments>http://pjh0211.wordpress.com/2009/04/07/web-performance-part-1/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 03:29:20 +0000</pubDate>
		<dc:creator>Phil Hontalas</dc:creator>
				<category><![CDATA[Web Performance]]></category>

		<guid isPermaLink="false">http://pjh0211.wordpress.com/?p=7</guid>
		<description><![CDATA[Introduction : I&#8217;ve spent a good deal of my professional career writing software tools which measure  (&#38; hopefully  improve) the performance of high traffic websites. I&#8217;ve worked as both a consultant &#38; permanent engineering staff for a number of sites,  which face the technical &#38; engineering challenges of &#8220;getting what they wish for&#8221; (i.e. sudden [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pjh0211.wordpress.com&amp;blog=3103523&amp;post=7&amp;subd=pjh0211&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Introduction :</h2>
<p>I&#8217;ve spent a good deal of my professional career writing software tools which measure  (&amp; hopefully  improve) the performance of high traffic websites. I&#8217;ve worked as both a consultant &amp; permanent engineering staff for a number of sites,  which face the technical &amp; engineering challenges of <em>&#8220;getting what they wish for&#8221;</em> (i.e. sudden growth &amp; tons of traffic).  This blog category presents an aggregation of  technical notes, data,  &amp; optimization techniques which I have worked on over the years. Some of the data &amp; techniques presented  here may be a little &#8220;vintage&#8221;. I am including them in this blog  with the intent of keeping notes to myself on certain topics regarding web performance. Other topics, are more current and deal with some of the challenges pertaining to  recent developments (such as AJAX ) . It is clear (to me at least) that the traditional methods &amp; tools for  evaluating &amp; tracking performance just don&#8217;t give &#8220;us&#8221;  (we overworked  &amp; sleep deprived technical folk who are charged with keeping websites performing well ) the full picture.  Some of what is presented in this category strives to look at some of these issues.</p>
<h2>Basic Resources</h2>
<p>A good place to start in the area of web performance is with a list of resources which I find useful  (updated 04/02/2009):</p>
<ul>
<li><a title="Stevesouders site" href="http://www.stevesouders.com/" target="_blank">Steve Souders&#8217; Performance Site</a>. This is the place to go to get a good picture of some of the latest developements. Some interesting projects here. Lately it has been focused on issues of Javascript performance. His <a title="SXSW Slides -- Souders" href="http://www.stevesouders.com/blog/2009/03/16/sxsw-slides/" target="_blank">recent talk @ SXSW</a> gives some glimpses into his new book ( <a title="Amazon - Even Faster Web Sites" href="http://www.amazon.com/Even-Faster-Websites-Essential-Knowledge/dp/0596522304" target="_blank">Even Faster Web Sites</a> )  which looks very promising. I wasn&#8217;t crazy about his last book since for me it seemed like a compliation of knowledge already well know from the web.</li>
<li><a title="YSlow @ YDN" href="http://developer.yahoo.com/yslow/" target="_blank">YSlow</a> : A Firefox Plugin which grades webpage performance based on the principles of <a title="Exceptional Performance @ YDN" href="http://developer.yahoo.com/performance/" target="_blank">Exceptional Performance</a> . Note : A recent project I&#8217;ve been working on puts many of the principles of YSlow into a scriptable tool which can regularly perform modified YSlow type evaluations.</li>
<li><a title="jiffy-web @ google code" href="http://code.google.com/p/jiffy-web/" target="_blank">Jiffy</a> : An excellent tool for measuring javascript rich sites (supports multiple browsers) .  However, it requires  insertion of <a title="Jiffy.js code" href="http://code.google.com/p/jiffy-web/source/browse/trunk/javascript/jiffy.js" target="_blank">Jiffy.js </a>code onto your site (which is not always practical.  I just wish they had  <a title="Jiffy @ Cult of Gary Blog" href="http://www.cultofgary.com/2008/06/23/jiffy-open-source-performance-monitoring/" target="_blank">MySQL support</a> ( I couldn&#8217;t get the <a href="http://code.google.com/p/jiffy-web/source/browse/trunk/database/gen_jiffy_base_schema_mysql.rb">gen_jiffy_base_schema_mysql.rb</a> working!! ).  If I get time, I&#8217;m going to look at the MySQL &amp; Ingestor perhaps modifying the ingestor  (Python re-write). A non-performance related  side note: the principle author of Jiffy (Bill Scott of Netflix) has an excellent <a title="Bill Scott Blog" href="http://looksgoodworkswell.blogspot.com/" target="_blank">blog on UI design</a> which I highly recommend.</li>
<li>Proxy based tools, such as <a title="Charles Web Proxy" href="http://www.charlesproxy.com/" target="_blank">Charles</a> &amp; <a title="Fiddler" href="http://www.fiddler2.com/fiddler/Perf/" target="_blank">Fiddler</a> are often very useful tools for getting started with website performance analysis. However, I find  most of these just scratch the surface.</li>
<li>Some sites which track current developments in website performance I would recommend include ;  <a title="website performance . org" href="http://website-performance.org/">website-performance.org</a> , Velocity Conference Proceedings ( <a title="Velocity 2008" href="http://en.oreilly.com/velocity2008" target="_blank">2008</a> , <a title="Velocity 2009" href="http://en.oreilly.com/velocity2009" target="_blank">2009</a> ) , &amp; numerous articles on  withing <a title="IBM Dev Works performance" href="http://www.ibm.com/developerworks/web/library/wa-speedweb/" target="_blank">developerWorks</a> &amp; of course , Steve Souders&#8217;  Blog .</li>
<li>If you lean towards the  theoretical , sites such as <a title="performance dynamics" href="http://www.perfdynamics.com/" target="_blank">performance dynamic</a>s  &amp; resources from the ACM portal &amp; Springer (  e.g.  <a title="sigmetrics" href="http://www.sigmetrics.org/index.shtml" target="_blank">sigmetric</a> , <a title="IJWET" href="http://www.inderscience.com/browse/index.php?journalCODE=ijwet" target="_blank">IJWET</a> , <a title="Change 2002" href="http://www.springerlink.com/content/lycbd4gy68f7tlbn/" target="_blank">Chang 2002</a> ,</li>
</ul>
<h2>Is that all there is ?</h2>
<p>Although the basic resources listed above  provide a good starting point , I find a lack of  practical real world data, observations from the trenches out there on the web.  I find this to be especially true when considering issues such as monitoring &amp; analyzing the performance of AJAX based sites.  It is in this area, I hope to develop  a body of techniques , data, &amp; tools for future blog posts to this category.</p>
<p>My biggest pet peave with the current state of the art in performance tools, is their dependancy on manual interaction with the browser.  Modern production websites are constantly changing, often with diverse contributors. Some may be performance aware, &amp; others not so much&#8230; This situation begs for the need to have automated systems which check for some of the simple yet effective performance practices continually. Sure, there are services such as <a title="Keynote" href="http://keynote.com/" target="_blank">Keynote</a> &amp; <a title="Gomez Web Site" href="http://www.gomez.com/" target="_blank">Gomez</a> out there. But these options are often very  expensive &amp; impractical if you want to  get broad coverage of a site. One of my desired intentions with this blog category is to discuss how we might better automate many of the current state of the art performance measurement &amp; debugging techniques. But that is for later posts. For now, the basics:</p>
<h2>Some Frightfully Simple Examples of website performance optimization.</h2>
<p>In the course of working on many projects to optimize website performance, I&#8217;ve found that it&#8217;s often  the little things ( which we sometimes take for granted ) that will get very significant results. For the rest of this post , I am going to put &#8220;out there&#8221;  a  summary of some past performance work, observations, &amp; experiences which may be useful to by fellow performance engineering bretheren.  In all the examples I present here, I do my best to anonymize the identity of the sites ( I don&#8217;t want to get current or past employers / clients upset at me ). Sometimes, I may miss a detail or two which lets the identity slip. Apologies in advance if I do so. This is just a starting point. Future posts will get into some of the thornier issues.</p>
<h3><strong>Example 1 : Backend Stability is still important </strong></h3>
<p>I know, I know, Lately it is all the rage in various blogs about performance to take the stance that many of the interesting issues are often  in the domain of the front end and I completely agree with this idea which is very eloquently discussed by <a title="Souders Video" href="http://www.youtube.com/watch?v=BTHvs3V8DBA" target="_blank">Steve Souders in this video</a> . However, we shouldn&#8217;t loose sight  of backend stability. The graph below shows a project I worked on which illustrates this. This Gomez chart  shows the load time for  a very high trafficked website which I worked on before &amp; after, I did a frightfully simple , common sense review of the site&#8217;s backend infrastructure. We are talking really simple stuff here such as adjusting timeout values,  buffer pools, load balancer settings &amp;  heap size !!!</p>
<div id="attachment_23" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-23" title="gomezloadtime-1" src="http://pjh0211.files.wordpress.com/2009/04/gomezloadtime-1.jpg?w=480" alt="Page Response Time Before &amp; After Simple Backend Stability Review"   /><p class="wp-caption-text">Page Response Time Before &amp; After Simple Backend Stability Review</p></div>
<p><strong> Figure 1 Site Load Time Before &amp; After some simple backend optimizations.</strong> The picture speaks for itself. In about 1 day, I was able to turn  poorly performing high trafficked website into one that was fairly stable. The first thing I do when I get a call about a website with poor performance is to review the backend architecture &amp; its configuration. Often I find that fixing poor performance is simply a matter of looking at the architecture&#8221;s resource allocation  (connection pools, threads per process, heap usage patterns, etc&#8230;) and apply a little <a title="Gunther : Practical Performance Analyst" href="http://www.amazon.com/Practical-Performance-Analyst-Neil-Gunther/dp/059512674X" target="_blank">queuing theory</a> and Viola&#8217;  stablity returns &amp; the complaints stop!  This isn&#8217;t rocket science &amp; I find that , most of the time, the problem is simply a lack of communication between development, operations, &amp; sysadmin staff. Talk to your admins ! Don&#8217;t be afraid to ask them why the TCP window size, or max threads per process on a service  is set to a certain number. Nine times out of ten, the response will be &#8220;I don&#8217;t know, do you want me to change it ?&#8221;. Here is a list of some useful links which often help in such tuning.</p>
<ul>
<li>Neil Gunther <a title="Gunther : Practical Performance Analyst" href="http://www.amazon.com/Practical-Performance-Analyst-Neil-Gunther/dp/059512674X" target="_blank">The Practical Performance Analyst </a>. Although book is somewhat dated, the principles &amp; practices here are timeless. Full of simple examples on the practical application of queuing theory.</li>
<li>Get to know your servers. Be it <a title="Apache 2.2 Performance Tuning" href="http://httpd.apache.org/docs/2.2/misc/perf-tuning.html" target="_blank">Apache</a> , <a title="Orielly Tomcat Perf Tuning Chapter" href="oreilly.com/catalog/9780596101060/chapter/ch04.pdf " target="_blank">Tomcat</a>, or <a title="MySQL Optimization" href="http://dev.mysql.com/doc/refman/5.1/en/optimization.html" target="_blank">MySQL</a> tuning, there are a lot of resources out there which give good advice on tuning.</li>
<li>Look at your connectors ! Often, I find it isn&#8217;t the service or service that is the problem. It is often the connectors between. Review your connector implementations be they <a title="JBoss Matrix" href="http://tinyurl.com/2xr3rg" target="_blank">mod_jk</a> , <a title="php-memcached" href="http://gravitonic.com/2009/01/new-memcached-extension" target="_blank">php-memcached</a> , or your <a title="DBCP" href="http://tinyurl.com/detujw" target="_blank">DBCP</a> ,  reviewing &amp; adjusting these settings often yield huge results.</li>
</ul>
<h3><strong>Example 2: Size does Matter.</strong></h3>
<div id="attachment_30" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-30" title="example-LoadTime-Size" src="http://pjh0211.files.wordpress.com/2009/04/example-lt-sz-11.jpg?w=480&#038;h=327" alt="Yes, it's true. Size does matter" width="480" height="327" /><p class="wp-caption-text">Yes, it&#39;s true. Size does matter</p></div>
<p><strong><br />
</strong></p>
<p><strong>Figure 2, Real World Example of Load Time to Page Size Correlation. </strong></p>
<h3><strong> Example 3, Number of Requests (Objects) per Page also matters.</strong></h3>
<p style="text-align:center;">
<div id="attachment_34" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-34" title="example-LoadTime-ObjPerPg" src="http://pjh0211.files.wordpress.com/2009/04/example-lt-oppg2.jpg?w=480&#038;h=327" alt="Example of Load Time &amp; Request Bloat" width="480" height="327" /><p class="wp-caption-text">Example of Load Time &amp; Request Bloat</p></div>
<p><strong>Figure 3 : </strong>In the previous example we saw how size matters. Another common malady of poor performance sites (which often can easily be fixed) is what I call &#8220;Request Bloat&#8221; .</p>
<h3><strong>Example 4 : Look at long term trends.</strong></h3>
<div id="attachment_32" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-32" title="longtermtrends" src="http://pjh0211.files.wordpress.com/2009/04/longtermtrends.jpg?w=480&#038;h=319" alt="Long Term Performance trends are very important &amp; often missed..." width="480" height="319" /><p class="wp-caption-text">Long Term Performance trends are very important &amp; often missed...</p></div>
<p><strong>Figure 4: </strong>Often we are so busy with the day to day health of a site that we loose our perspective of the long term. If an operator is just looking at the data shown here month by month of week by week, they will miss important trends which signal an underlying performance issue.</p>
<p><strong><br />
</strong></p>
<p>In big production environments, the responibility for various system architecture parameters may be spread out  across a number of engineers.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pjh0211.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pjh0211.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pjh0211.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pjh0211.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pjh0211.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pjh0211.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pjh0211.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pjh0211.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pjh0211.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pjh0211.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pjh0211.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pjh0211.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pjh0211.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pjh0211.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pjh0211.wordpress.com&amp;blog=3103523&amp;post=7&amp;subd=pjh0211&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pjh0211.wordpress.com/2009/04/07/web-performance-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7f7be3d4712bb5ea9a2b2fe353f1bff7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pjh0211</media:title>
		</media:content>

		<media:content url="http://pjh0211.files.wordpress.com/2009/04/gomezloadtime-1.jpg" medium="image">
			<media:title type="html">gomezloadtime-1</media:title>
		</media:content>

		<media:content url="http://pjh0211.files.wordpress.com/2009/04/example-lt-sz-11.jpg" medium="image">
			<media:title type="html">example-LoadTime-Size</media:title>
		</media:content>

		<media:content url="http://pjh0211.files.wordpress.com/2009/04/example-lt-oppg2.jpg" medium="image">
			<media:title type="html">example-LoadTime-ObjPerPg</media:title>
		</media:content>

		<media:content url="http://pjh0211.files.wordpress.com/2009/04/longtermtrends.jpg" medium="image">
			<media:title type="html">longtermtrends</media:title>
		</media:content>
	</item>
		<item>
		<title>Welcome to PJH0211</title>
		<link>http://pjh0211.wordpress.com/2008/03/09/hello-world/</link>
		<comments>http://pjh0211.wordpress.com/2008/03/09/hello-world/#comments</comments>
		<pubDate>Sun, 09 Mar 2008 04:14:42 +0000</pubDate>
		<dc:creator>Phil Hontalas</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[This is a simple &#8220;semi &#8211; private&#8221; blog area for some specific software development efforts. Currently this will a place for ; data, reference, code fragments on some of my current projects. Current projects include: Site Performance Monitoring using a modified (&#38; scriptable) YSlow . Plugin Development work for Hyperic V 3.2 Development. Python, JSON, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pjh0211.wordpress.com&amp;blog=3103523&amp;post=1&amp;subd=pjh0211&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This is a simple &#8220;semi &#8211; private&#8221; blog area for some specific software development efforts. Currently this will a place for ; data, reference, code fragments on some of my current projects. Current projects include:</p>
<ul>
<li>Site Performance Monitoring using a modified (&amp; scriptable) <a title="YSlow @ YDN" href="http://developer.yahoo.com/yslow/" target="_blank">YSlow</a> .</li>
<li>Plugin Development work for <a title="Hyperic Monitoring System" href="http://www.hyperic.com" target="_blank">Hyperic</a> V 3.2 Development.</li>
<li><a title="Python.org site" href="http://www.python.org/" target="_blank">Python</a>, <a title="JSON . org site" href="http://www.json.org/" target="_blank">JSON</a>, <a title="O'Reilly XML Site" href="http://www.xml.com/">XML</a> projects.</li>
<li>AWS <a title="Amazon Web Services EC2 Site" href="http://www.amazon.com/gp/browse.html?node=201590011">Elastic Compute Cloud</a> implementations.</li>
<li>Web Site Performance analysis.</li>
<li>Various Graphics &amp; Visualization tools &amp; projects.</li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pjh0211.wordpress.com/1/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pjh0211.wordpress.com/1/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pjh0211.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pjh0211.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pjh0211.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pjh0211.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pjh0211.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pjh0211.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pjh0211.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pjh0211.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pjh0211.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pjh0211.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pjh0211.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pjh0211.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pjh0211.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pjh0211.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pjh0211.wordpress.com&amp;blog=3103523&amp;post=1&amp;subd=pjh0211&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pjh0211.wordpress.com/2008/03/09/hello-world/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7f7be3d4712bb5ea9a2b2fe353f1bff7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pjh0211</media:title>
		</media:content>
	</item>
	</channel>
</rss>
