<?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:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>Larry Ullman&#039;s Blog &#187; performance</title>
	<atom:link href="http://blog.dmcinsights.com/tag/performance/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.dmcinsights.com</link>
	<description>flotsam and jetsam abounds</description>
	<lastBuildDate>Tue, 27 Jul 2010 16:27:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>How to Make Your Web Site Load Quickly</title>
		<link>http://blog.dmcinsights.com/2010/04/27/how-to-make-your-web-site-load-quickly/</link>
		<comments>http://blog.dmcinsights.com/2010/04/27/how-to-make-your-web-site-load-quickly/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 13:20:42 +0000</pubDate>
		<dc:creator>Larry</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[speed]]></category>

		<guid isPermaLink="false">http://blog.dmcinsights.com/?p=1025</guid>
		<description><![CDATA[I StumbledUpon this tutorial on improving the load speed of your Web site. One interesting thing about this discussion is it starts with the DNS and how that factors into the speed: something I hadn&#8217;t considered. The tutorial also points out that download speeds have increased so much that it may be better to download [...]]]></description>
			<content:encoded><![CDATA[<p>I <a href="http://www.stumbleupon.com">StumbledUpon</a> <a href="http://www.wight-hat.com/guides/website-speed.html">this tutorial</a> on improving the load speed of your Web site. One interesting thing about this discussion is it starts with the DNS and how that factors into the speed: something I hadn&#8217;t considered. The tutorial also points out that download speeds have increased so much that it may be better to download fewer, larger resources (like all the CSS or JavaScript in one file) than more, smaller resources. Again, this is something I hadn&#8217;t thought about—I was still going with the old thinking of taking extra steps so that the user doesn&#8217;t have to download one iota of code more than they have to. The tutorial then goes into caching and compression, something I discuss in <a href="http://blog.dmcinsights.com/2009/01/19/speeding-up-web-sites-using-yahoo-yslow-part-2/">my series about applying YSlow!</a> to a site.</p>
<p>The tutorial goes on to talk about organizing HTML files: CSS at the top and JavaScript at the bottom. I&#8217;ve heard this before (about putting JavaScript right before the closing tag) but haven&#8217;t gotten around to testing it myself. It makes sense, though, as the browser doesn&#8217;t need the JavaScript to render the output for the user to see, and because the JavaScript code itself probably can&#8217;t do its thing until the HTML has loaded. If you keep reading, you&#8217;ll learn how to use CSS image sprites to minimize the number of images that have to be downloaded by the browser. My Web site has practically no images, so I haven&#8217;t used this myself, but it&#8217;s something that can dramatically improve the performance of a site.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dmcinsights.com/2010/04/27/how-to-make-your-web-site-load-quickly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improving MySQL Performance</title>
		<link>http://blog.dmcinsights.com/2009/11/24/improving-mysql-performance/</link>
		<comments>http://blog.dmcinsights.com/2009/11/24/improving-mysql-performance/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 06:31:14 +0000</pubDate>
		<dc:creator>Larry</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://blog.dmcinsights.com/?p=521</guid>
		<description><![CDATA[The performance of any Web application is greatly impacted by how well the database application is being used (if being used, of course). The four biggest impacts on performance are: The storage engine(s) used How columns are defined The existence of proper indexes How queries are written and executed MySQL supports many different storage engines, [...]]]></description>
			<content:encoded><![CDATA[<p>The performance of any Web application is greatly impacted by how well the database application is being used (if being used, of course). The four biggest impacts on performance are:</p>
<ul>
<li>The <a href="http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html">storage engine(s)</a> used</li>
<li>How columns are defined</li>
<li>The existence of proper indexes</li>
<li>How queries are written and executed</li>
</ul>
<p>MySQL supports many different storage engines, each with its own strengths and weaknesses. Which you choose isn&#8217;t just a performance issue, it&#8217;s also one of features, like whether you need to support FULLTEXT searches (and therefore <a href="http://dev.mysql.com/doc/refman/5.1/en/myisam-storage-engine.html">MyISAM tables</a>) or transactions (which means <a href="http://dev.mysql.com/doc/refman/5.1/en/innodb.html">InnoDB</a>). Sometimes you can get away with using <a href="http://dev.mysql.com/doc/refman/5.1/en/memory-storage-engine.html">HEAP</a> tables, which exist only in memory. There&#8217;s no permanent storage with HEAP tables, but the performance can&#8217;t be beat.</p>
<p>For the column definitions, the first goal is to use the smallest possible size for each column. This will be a limitation in your application, so the column&#8217;s size still needs to meet or exceed the largest possible value to be stored, but, generally speaking, the more data you want to possibly store, the more space will be required for all the data stored. You should also avoid allowing NULL values in columns. This is a factor in both good database design and in performance optimization.</p>
<p>The indexes you establish, and how they are used by queries, is a serious subject that requires a book in itself. To start, make sure you read MySQL&#8217;s own guide to <a href="http://dev.mysql.com/doc/refman/5.1/en/mysql-indexes.html">how MySQL uses indexes</a>. Second, learn to run your queries using <a href="http://dev.mysql.com/doc/refman/5.0/en/explain.html">EXPLAIN</a> to see what, exactly, MySQL is doing when it executes that query. Also, of course, only select the data your application will actually need. No need to retrieve information that won&#8217;t be used. And always go back and double-check that your queries need all the clauses and references they&#8217;ve got. I&#8217;ve been known to leave legacy conditionals in queries that have no effect whatsoever.</p>
<p>For more on some of these topics, see the MySQL manual, of course (which has <a href="http://dev.mysql.com/doc/refman/5.1/en/optimization.html">a section on optimization</a>), the <a href="http://planet.mysql.com/">PlanetMySQL</a> blog, and <a href="http://www.databasejournal.com/features/mysql/article.php/3813821/Five-Query-Optimizations-in-MySQL.htm">this article at DatabaseJournal.com</a>. Also, if it applies to you, you can tweak MySQL&#8217;s behavior from a hardware/OS perspective. For an introduction to this subject, with respect to Linux, check out <a href="http://www.linux-mag.com/cache/7473/1.html">this article</a> by <a href="http://jeremy.zawodny.com/blog/">Jeremy Zawodny</a>, an expert on MySQL performance tuning.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dmcinsights.com/2009/11/24/improving-mysql-performance/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JetProfiler for MySQL</title>
		<link>http://blog.dmcinsights.com/2009/03/22/jetprofiler-for-mysql/</link>
		<comments>http://blog.dmcinsights.com/2009/03/22/jetprofiler-for-mysql/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 18:47:33 +0000</pubDate>
		<dc:creator>Larry</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[utilities]]></category>

		<guid isPermaLink="false">http://blog.dmcinsights.com/?p=354</guid>
		<description><![CDATA[I&#8217;ve just recently come across a piece of software called Jet Profiler for MySQL. This is a program that runs on Mac OS X, Linux, and Windows (it&#8217;s runs on Java), and comes in both a free and commercial version. Jet Profiler for MySQL is a diagnostic tool, used to analyze and report upon your [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just recently come across a piece of software called <a href="http://www.jetprofiler.com/">Jet Profiler for MySQL</a>. This is a program that runs on Mac OS X, Linux, and Windows (it&#8217;s runs on Java), and comes in both a free and commercial version. Jet Profiler for MySQL is a diagnostic tool, used to analyze and report upon your database&#8217;s performance, specifically in terms of the queries run, the tables used, and the MySQL users. It also has more advanced capabilities, like reporting upon master/slave relationships, locking, threads, and so forth. One particularly interesting feature is that it doesn&#8217;t require any special server configuration; in fact, it doesn&#8217;t even need to be installed on the server. You can install the application on your desktop computer, create a new MySQL user on the server, and the software will connect through it. Software like this is another good way to better understand your database and your Web application.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dmcinsights.com/2009/03/22/jetprofiler-for-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Yahoo!&#8217;s YSlow: ETags and Compression</title>
		<link>http://blog.dmcinsights.com/2009/01/22/speeding-up-web-sites-using-yahoo-yslow-part-3/</link>
		<comments>http://blog.dmcinsights.com/2009/01/22/speeding-up-web-sites-using-yahoo-yslow-part-3/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 06:25:10 +0000</pubDate>
		<dc:creator>Larry</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[utilities]]></category>

		<guid isPermaLink="false">http://blog.dmcinsights.com/?p=187</guid>
		<description><![CDATA[In two previous posts, I discussed analyzing my site using Yahoo!&#8217;s YSlow Firefox plug-in. I went through the initial test results and the steps I took to improve my score. At the end of part 2, I was left with a grade of 95 (whohoo!) but still two hurdles: ETags and sending compressed JavaScript and [...]]]></description>
			<content:encoded><![CDATA[<p>In two previous posts, I discussed analyzing my site using <a href="http://developer.yahoo.com/yslow/">Yahoo!&#8217;s YSlow Firefox</a> plug-in. I went through the initial test results and the steps I took to improve my score. At the end of part 2, I was left with a grade of 95 (whohoo!) but still two hurdles: ETags and sending compressed JavaScript and CSS.<span id="more-187"></span></p>
<p>New to me, and a slightly negative reflection on my site, was entity tags (<a href="http://en.wikipedia.org/wiki/HTTP_ETag">ETags</a>). An ETag is a unique identifier for a resource. A browser (and other software) can check a resource&#8217;s ETag to know whether or not to download the resource, somewhat similar to how expiration headers are used. An ETag can be any value that represents the resource and changes when the resource changes. Commonly the server might use the <a href="http://httpd.apache.org/docs/2.2/mod/core.html#fileetag">file&#8217;s modification time</a> for this value, or a hash representation of the file as a whole (e.g., run the file&#8217;s contents through an MD5 function). My server was providing ETags for all but the main PHP page. This makes sense, because PHP pages aren&#8217;t like static HTML pages: my main PHP page is updated whenever the database it uses for its content is updated.</p>
<p>One fix would be to have PHP send an ETag header:</p>
<pre>header("ETag: \"representative value\"");</pre>
<p>As already written, the representative value could be any of the following:</p>
<ul>
<li>The modification time of the last database record used by the page</li>
<li>An MD5 representation of the entire page, including the database-driven content</li>
<li>An MD5 representation of just the most recent database record that&#8217;s reflected on the page.</li>
</ul>
<p>And the answer I came up with was&#8230;just to ignore ETags on this PHP page. Coming up with any of those values would require a decent rewrite of the entire page, something I just don&#8217;t feel like doing right now. And, in my defense, my score turned out pretty well after I addressed the JavaScript and CSS compression issue&#8230;</p>
<p>Another reason I lost points was because two of the files being sent (the JavaScript and the CSS) weren&#8217;t being compressed. Most of my site uses PHP, which uses the zlib library to compress data sent to the browser. So PHP on the server compacts the HTML, it gets sent to the browser in compressed format, then the browser decompresses it and reads it. That&#8217;s great and generally recommended, but the JavaScript and CSS pages aren&#8217;t being handled by PHP. One solution is to use Apache&#8217;s mod_gzip or mod_deflate module to compress CSS and JavaScript files. To do that, add this code to an .htaccess or .conf file:</p>
<pre>&lt;IfModule mod_deflate.c&gt;
&lt;FilesMatch "\.(js|css)$"&gt;
SetOutputFilter DEFLATE
&lt;/FilesMatch&gt;
&lt;/IfModule&gt;</pre>
<p>That code basically says if mod_deflate is loaded, any file that ends with .js or .css should be ouptut using the deflate filter.</p>
<p>After I took all these steps, I got my YSlow grade up to a 98! I&#8217;m pretty pleased with that result. Also, in more concrete terms, if a user accesses my home page for the first time, they perform 4 HTTP requests and download just over 21KB of data. Subsequent requests of that same page require only 1 HTTP request and 3KB of data to be downloaded. That should make a big difference.</p>
<p>To wrap up this thread, I&#8217;ll mention two things. First, the YSlow plug-in and report is a very useful tool, but it&#8217;s not the only test or indicator of a site&#8217;s performance. I do think it&#8217;s a great place to start, though. Second, in researching some of these fixes, I came across several other sites where people did the same thing I did (tested their site using YSlow, then tried to address the problems). If you&#8217;re interested in this process, you may want to search online to read some of those other articles.</p>
<p>(As a post-script, I will add that one can improve the ETag score by disabling ETags in Apache, strange as this may seem. By doing so, it forces browsers to rely upon the caching headers. So if you can&#8217;t or don&#8217;t want to get ETags to work, turn them off and they won&#8217;t cause a problem.)</p>
<p>As always, thanks for reading and let me know if you have any questions.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dmcinsights.com/2009/01/22/speeding-up-web-sites-using-yahoo-yslow-part-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Speeding Up Web Sites using Yahoo!'s YSlow]]></series:name>
	</item>
		<item>
		<title>Using Yahoo!&#8217;s YSlow: CDNs, Compressed JavaScript, and Caching</title>
		<link>http://blog.dmcinsights.com/2009/01/19/speeding-up-web-sites-using-yahoo-yslow-part-2/</link>
		<comments>http://blog.dmcinsights.com/2009/01/19/speeding-up-web-sites-using-yahoo-yslow-part-2/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 14:42:15 +0000</pubDate>
		<dc:creator>Larry</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[utilities]]></category>

		<guid isPermaLink="false">http://blog.dmcinsights.com/?p=167</guid>
		<description><![CDATA[, I talked about using Yahoo!&#8217;s YSlow Firefox plug-in to analyze and improve your Web site&#8217;s speed. In that post I mentioned that my site—www.DMCInsights.com—fared pretty well (an 86 out of 100) but there were a couple of things that I hadn&#8217;t even heard of before. Well, I started making some tweaks, and here&#8217;s the [...]]]></description>
			<content:encoded><![CDATA[<p><!--intlink id="128" type="post" text="In a previous post"--><a href="http://blog.dmcinsights.com/2009/01/06/speeding-up-web-sites-using-yahoo-yslow/">In a previous post</a>, I talked about using Yahoo!&#8217;s YSlow Firefox plug-in to analyze and improve your Web site&#8217;s speed. In that post I mentioned that my site—<a href="http://www.dmcinsights.com">www.DMCInsights.com</a>—fared pretty well (an 86 out of 100) but there were a couple of things that I hadn&#8217;t even heard of before. Well, I started making some tweaks, and here&#8217;s the result so far, including discussion of <em>CDNs</em>, which were new to me.<span id="more-167"></span></p>
<p>First up, it turns out that CDNs are <a href="http://en.wikipedia.org/wiki/Content_Delivery_Network">Content Delivery Networks</a>. The premise is that instead of storing all your site&#8217;s content on one server, you should store it on multiple servers around the country or world. Then users will be able to download specific files from your site from a server close to them (this all happens behind the scenes; the end user isn&#8217;t aware of it). Now, my Web site is just on one server and doesn&#8217;t merit using a CDN, so this didn&#8217;t really apply to me. I was, however, able to fake a CDN by <a href="http://developer.yahoo.com/yslow/faq.html#faq_cdn">following these steps</a>.</p>
<p>The second thing I did, which meant an actual change on the site (as opposed to the CDN issue) is <a href="http://developer.yahoo.net/blog/archives/2007/07/high_performanc_8.html">minify my JavaScript</a>. I used Yahoo!&#8217;s <a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a> to take my site&#8217;s primary JavaScript file and reduce it from about 16KB to 12KB. That&#8217;s a 25% reduction, which is significant enough. I did not thoroughly test other minimizers, which may do better or worse at this task. From what I&#8217;ve read, though, the YUI Compressor does a good job.</p>
<p>Those two changes bumped my rating up to a 90. I&#8217;ll also point out here, that one strong factor in the &#8220;grade&#8221; is the number of HTTP requests that need to be made. In other words, how many times does the browser need to go to the server to get something. My home page makes only four requests—the HTML page, one JavaScript file, one CSS file, and one image file, so it ranks really well in this category. If your site has a lot of HTTP requests, like if it uses a lot of images, you may want to consider using combined files and <a href="http://alistapart.com/articles/sprites">CSS Sprites</a> to cut down on that.</p>
<p>Another downgrade came from a lack of Expires headers on the JavaScript resource, the CSS file, and the image used on the tested page. One fix for the two text files would be to make them PHP pages, then use PHP to send the right headers. Another option was to configure Apache by adding this code to an .htaccess file (or better yet, a .conf file):</p>
<pre>#Far Future Expires Header
&lt;FilesMatch "\.(gif|png|jpg|js|css|swf)$"&gt;
    ExpiresActive On
    ExpiresDefault "access plus 1 years"
&lt;/FilesMatch&gt;</pre>
<p>I came across this specific tip at <a href="http://particletree.com/notebook/automatically-version-your-css-and-javascript-files/">this article</a>, in which that author went through the same process I&#8217;m going through now. That writer, and the original Yahoo! article, both discuss using an ExpiresDefault value of &#8220;access plus 10 years&#8221;, but I think one year is sufficient (and, yes, you still need to use the plural of &#8220;years&#8221;). The problem with setting a high ExpiresDefault value like this is that the caching mechanisms, like the browsers, will not try to retrieve that resource again for that time period (unless the cache is cleared). So if you change the CSS or JavaScript file, you&#8217;ll need to rename it in order to have its changes reflected in the browser. No doubt this will trip me up the next time I make some minor edits to the CSS. The <a href="http://particletree.com/notebook/automatically-version-your-css-and-javascript-files/">previously cited article</a> has additional code for creating an automatic versioning system that&#8217;s a good work around, if you want to go through that effort.</p>
<p>UPDATE: I was just reading an <a href="http://www.sitepoint.com/article/save-cash-optimize-cache/">article at Sitepoint about caching</a> and it mentioned a tip for forcing a browser to re-download a resource. What they suggested was adding a pseudo-version as a GET variable in the CSS or JavaScript request:</p>
<pre>&lt;link rel="stylesheet" type="text/css" href="pagename.css?v=1.1" /&gt;</pre>
<p>At this point, my YSlow score is up to a 95 (whohoo!), which is excellent, but I can still take a look at my ETags and compressing my JavaScript and CSS files. I&#8217;ll do that in <a href="http://blog.dmcinsights.com/2009/01/22/speeding-up-web-sites-using-yahoo-yslow-part-3/">another post</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dmcinsights.com/2009/01/19/speeding-up-web-sites-using-yahoo-yslow-part-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<series:name><![CDATA[Speeding Up Web Sites using Yahoo!'s YSlow]]></series:name>
	</item>
		<item>
		<title>Benchmarking Web Sites using Siege</title>
		<link>http://blog.dmcinsights.com/2009/01/11/benchmarking-web-sites-using-siege/</link>
		<comments>http://blog.dmcinsights.com/2009/01/11/benchmarking-web-sites-using-siege/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 16:58:01 +0000</pubDate>
		<dc:creator>Larry</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://blog.dmcinsights.com/?p=130</guid>
		<description><![CDATA[Benchmarking a Web site is the simple act of measuring its performance. Measurements may look at how long it takes a page to load in the client (see my post on the YSlow Firefox plug-in). This can be a reflection of the page itself—the amount of images, HTML, JavaScript, CSS, and other media—and a reflection [...]]]></description>
			<content:encoded><![CDATA[<p>Benchmarking a Web site is the simple act of measuring its performance. Measurements may look at how long it takes a page to load in the client (<a href="http://blog.dmcinsights.com/2009/01/06/speeding-up-web-sites-using-yahoo-yslow/">see my post on the YSlow Firefox plug-in</a>). This can be a reflection of the page itself—the amount of images, HTML, JavaScript, CSS, and other media—and a reflection of the client: their download speed, their computer speed, the browser they&#8217;re using, etc. Because of the client-side factors, this kind of benchmarking is best, I feel, to just analyze the amount of information being downloaded and how efficiently that&#8217;s taking place (again, <a href="http://blog.dmcinsights.com/2009/01/06/speeding-up-web-sites-using-yahoo-yslow/">see YSlow for more on this</a>).</p>
<p>On the other side of the equation, you can perform benchmarks on the server. Finding, and later improving upon, these measurements will improve the experience for all clients, regardless of download speed, computer, or browser type. This is particular important when using server-side technologies like <a href="http://www.php.net">PHP</a>.</p>
<p>Among the many utilities available to benchmark a Web site is <a href="http://www.joedog.org/index/siege-home">Siege</a>, from <a href="http://www.joedog.org/">Joe Dog Software</a>. One of the nice things about Siege, besides it being free, is that it tests a Web server under duress, something that&#8217;s impossible for a single individual to replicate. So you can tell Siege to access your site using X number of simulataneous connections and then see the result. On the downside, you have to compile it on Unix-like systems, including Mac OS X, in order to use it. For more, see the Siege Web site and it&#8217;s simple-to-follow manual.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dmcinsights.com/2009/01/11/benchmarking-web-sites-using-siege/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing Your Site using Yahoo!&#8217;s YSlow</title>
		<link>http://blog.dmcinsights.com/2009/01/06/speeding-up-web-sites-using-yahoo-yslow/</link>
		<comments>http://blog.dmcinsights.com/2009/01/06/speeding-up-web-sites-using-yahoo-yslow/#comments</comments>
		<pubDate>Tue, 06 Jan 2009 22:30:54 +0000</pubDate>
		<dc:creator>Larry</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://blog.dmcinsights.com/?p=128</guid>
		<description><![CDATA[On Yahoo!&#8217;s Developer pages you can find the YSlow plug-in for the Firefox Web browser (the plug-in works in conjunction with Firebug, which you should probably already be using anyway). After installing YSlow (and Firebug, if you haven&#8217;t already), restart Firefox, then load your Web page in Firebox. Click on the YSlow icon in the [...]]]></description>
			<content:encoded><![CDATA[<p>On <a href="http://developer.yahoo.com/">Yahoo!&#8217;s Developer pages</a> you can find the <a href="http://developer.yahoo.com/yslow/">YSlow plug-in for the Firefox Web browser</a> (the plug-in works in conjunction with <a href="http://www.getfirebug.com/">Firebug</a>, which you should probably already be using anyway). After installing YSlow (and Firebug, if you haven&#8217;t already), restart Firefox, then load your Web page in Firebox. Click on the YSlow icon in the lower-right corner of the browser window, and you&#8217;ll see:</p>
<ul>
<li>A &#8220;report card&#8221; for the page&#8217;s performance</li>
<li>The files and images loaded on that page, including JavaScript and CSS</li>
<li>Listings of specific strengths and weaknesses of the page</li>
</ul>
<p>Using the built-in YSlow tools, you can also view: page statistics (total size of all files, number of HTTP requests made, etc.), all of the CSS compiled together, and all of the JavaScript involved. You can even test the JavaScript using <a href="http://jslint.com/">JSLint</a>. For more on using YSlow, check out its <a href="http://developer.yahoo.com/yslow/help/">documentation</a> or <a href="http://developer.yahoo.net/blog/archives/2007/08/yslow-podcast-screencast.html">this screencast</a>.</p>
<p>In case you&#8217;re curious, when I tested my site&#8217;s home page, I got a &#8216;B&#8217; (85), which is a decent start. To improve the performance, I need to add expiration headers, use a CDN, and add ETags. And, to be honest, I didn&#8217;t even know what these last two were!</p>
<p>Update: I&#8217;ve started fixing some of the issues addressed by YSlow. You can read about that process in <a href="http://blog.dmcinsights.com/2009/01/19/speeding-up-web-sites-using-yahoo-yslow-part-2/">this other post</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dmcinsights.com/2009/01/06/speeding-up-web-sites-using-yahoo-yslow/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<series:name><![CDATA[Speeding Up Web Sites using Yahoo!'s YSlow]]></series:name>
	</item>
	</channel>
</rss>
