<?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>Big Red Tin &#187; JavaScript</title>
	<atom:link href="http://bigredtin.com/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://bigredtin.com</link>
	<description>Thoughts about the web and business from the large pantry</description>
	<lastBuildDate>Wed, 08 Feb 2012 06:55:38 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Putting the &#8220;distributed&#8221; in CDN</title>
		<link>http://bigredtin.com/2011/google-cdn-is-distributed/</link>
		<comments>http://bigredtin.com/2011/google-cdn-is-distributed/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 01:21:47 +0000</pubDate>
		<dc:creator>Peter Wilson</dc:creator>
				<category><![CDATA[Quick Notes]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[CDN]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://bigredtin.com/?p=1133</guid>
		<description><![CDATA[I wrote yesterday that Google appeared to have taken the distributed out of their public CDN hosting a variety of JavaScript libraries. I even provided some trace routes comparing their CDN to Microsoft's. I was wrong.]]></description>
				<content:encoded><![CDATA[<p><a href="http://bigredtin.com/2011/google-cdn-not-distributed/">I wrote yesterday</a> that Google appeared to have taken the &#8220;distributed&#8221; out of their public CDN hosting of a variety of JavaScript libraries. I even provided some trace routes comparing their CDN to Microsoft&#8217;s. I was wrong.</p>
<p>Unlike <a href="https://twitter.com/om4james/">James Collins</a>, we don&#8217;t have terminal access to any servers in Australia. As <a href="http://bigredtin.com/2010/why-we-host-on-american-servers/">I&#8217;ve detailed before</a>, our sites are hosted in the US. James was kind and diligent enough to do some further testing comparing Microsoft&#8217;s CDN to Google&#8217;s. He found they resolved as follows:</p>
<table>
<thead>
<tr>
<th>Location</th>
<th>Google</th>
<th>Microsoft</th>
</tr>
</thead>
<tbody>
<tr>
<th>Melbourne, AU</th>
<td>US</td>
<td>Sydney</td>
</tr>
<tr>
<th>Sydney, AU</th>
<td>Sydney</td>
<td>US</td>
</tr>
<tr>
<th>Perth, AU</th>
<td>Sydney</td>
<td>US</td>
</tr>
</tbody>
</table>
<p>If you have the chance, I&#8217;d love you to test where <a href="http://ajax.aspnetcdn.com/">ajax.aspnetcdn.com</a> and <a href="http://ajax.googleapis.com/">ajax.googleapis.com</a> resolve to for you. You can do a<br />
<samp>traceroute</samp>
<p> and you should be able to work out the destination from host names and response times. Letting me know via twitter is probably easiest, my username is <a href="http://twitter.com/pwcc/">@pwcc</a>.</p>
<p>Obviously, I should have done all this checking before writing the post. By failing to do so, I look a bit of a tit.</p>
]]></content:encoded>
			<wfw:commentRss>http://bigredtin.com/2011/google-cdn-is-distributed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Taking the &#8220;distributed&#8221; out of CDN</title>
		<link>http://bigredtin.com/2011/google-cdn-not-distributed/</link>
		<comments>http://bigredtin.com/2011/google-cdn-not-distributed/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 04:06:52 +0000</pubDate>
		<dc:creator>Peter Wilson</dc:creator>
				<category><![CDATA[Quick Notes]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[CDN]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://bigredtin.com/?p=1125</guid>
		<description><![CDATA[Over on Twitter @bobearth prompted me to do run some trace routes against the Google CDN and compare it to the Microsoft CDN. It appears Google have taken the distributed network out of their CDN.]]></description>
				<content:encoded><![CDATA[<p><strong>Note: After publishing this article, I was given the results of traceroutes from other Australian cities. <a title="Putting the “distributed” in CDN" href="http://bigredtin.com/2011/google-cdn-is-distributed/">The results showed I was wrong</a>.</strong></p>
<p>Over on Twitter <a href="https://twitter.com/bobearth/statuses/77929850245095426">@bobearth</a>, prompted me to run some trace routes against the Google <abbr>CDN</abbr> and compare it to the Microsoft <abbr>CDN</abbr>. It appears Google have taken the distributed network out of their <abbr>CDN</abbr>.</p>
<p>As you&#8217;re probably aware, <abbr>CDN</abbr> is an abbreviation for content distributed network. The idea behind them is that American users will be served content from a server located in the <abbr>US</abbr> or Canada, Australian users will be served content from a server located in Australia or the Pacific, and so on.</p>
<p><span id="more-1125"></span></p>
<p>Doing a trace to the Google <abbr>CDN</abbr> from the <a href="http://soupgiant.com">Soupgiant</a> <abbr>HQ</abbr> in <a href="http://maps.google.com.au/maps?q=soupgiant&amp;um=1&amp;ie=UTF-8&amp;sa=N&amp;hl=en&amp;tab=wl">Melbourne</a>, I was expecting to receive a response a server in Sydney. Instead, the response came from California, <abbr>USA</abbr> as the final steps of this <code>traceroute</code> show:</p>
<pre><samp>127.0.0.1:~ peterwilson$ traceroute ajax.googleapis.com
[snip]
 5  syd-nxg-men-crt1-ge-3-1-0 (202.7.173.241)  27.479 ms  87.472 ms  78.234 ms
 6  202.7.171.46 (202.7.171.46)  91.118 ms  31.786 ms  27.314 ms
 7  66.249.95.232 (66.249.95.232)  80.358 ms
    66.249.95.234 (66.249.95.234)  27.842 ms
    66.249.95.232 (66.249.95.232)  44.059 ms
 8  209.85.249.52 (209.85.249.52)  177.570 ms
    66.249.95.166 (66.249.95.166)  172.656 ms  157.311 ms
 9  72.14.236.126 (72.14.236.126)  172.117 ms  153.304 ms  180.227 ms
10  googleapis.l.google.com (66.249.89.95)  178.725 ms  193.939 ms  181.227 ms</samp></pre>
<p>The response from Microsoft&#8217;s CDN were more to my liking:</p>
<pre><samp>127-0-0-1:~ peterwilson$ traceroute ajax.aspnetcdn.com
traceroute: Warning: ajax.aspnetcdn.com has multiple addresses; using 70.37.159.166
traceroute to ajax.aspnetcdn.com (70.37.159.166), 64 hops max, 52 byte packets
[snip]
 7  10gigabitethernet5-1.syd-xmx-edgcom-1b.ntwk.msn.net (70.37.149.62)  90.691 ms  86.004 ms  37.900 ms
 8  ajax.microsoft.com (70.37.159.166)  71.541 ms  83.053 ms  80.586 ms</samp></pre>
<p>This prompts the question: should I switch to serving jQuery and other hosted libraries to the Microsoft <abbr>CDN</abbr>? Both Google and Microsoft use a cookie-free domain for their <abbr>CDN</abbr>s, both are set to browser cache for 12 months. More sites use Google&#8217;s <abbr>CDN</abbr> to serve, but only Microsoft serve geographically near the majority of visitors to Soupgiant and Big Red Tin.</p>
<p>&nbsp;</p>
<p>I don&#8217;t know the answer to this question. I do know that if Google&#8217;s <abbr>CDN</abbr> was distributed, there would be no question.</p>
]]></content:encoded>
			<wfw:commentRss>http://bigredtin.com/2011/google-cdn-not-distributed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Caching Google&#8217;s WebFont Loader</title>
		<link>http://bigredtin.com/2010/caching-google-webfont-loader/</link>
		<comments>http://bigredtin.com/2010/caching-google-webfont-loader/#comments</comments>
		<pubDate>Wed, 15 Dec 2010 00:39:07 +0000</pubDate>
		<dc:creator>Peter Wilson</dc:creator>
				<category><![CDATA[Quick Notes]]></category>
		<category><![CDATA[@font-face]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebFont loader]]></category>

		<guid isPermaLink="false">http://bigredtin.com/?p=988</guid>
		<description><![CDATA[As with Google's other hosted libraries, providing a more specific version number of webfont.js will effect browser caching.]]></description>
				<content:encoded><![CDATA[<p>The <a title="Google WebFont Loader" href="http://code.google.com/apis/webfonts/docs/webfont_loader.html">Google WebFont Loader</a> provides the following sample code:</p>
<pre><code>WebFontConfig = {
  google: { families: [ 'Tangerine', 'Cantarell' ] }
};
(function() {
  var wf = document.createElement('script');
  wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
<strong>      '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
</strong>  wf.type = 'text/javascript';
  wf.async = 'true';
  var s = document.getElementsByTagName('script')[0];
  s.parentNode.insertBefore(wf, s);
})();</code></pre>
<p>The line in bold indicates version one of webfont.js is being loaded. As with Google&#8217;s other hosted libraries providing a more, or less, specific version number will effect both browser <a href="http://bigredtin.com/behind-the-websites/caching-on-the-google-ajax-libraries-api/">caching and whether the webfont.js is upgraded automatically</a>.</p>
<table>
<thead>
<tr>
<th scope="col">Version in code</th>
<th scope="col">Version provided</th>
<th scope="col">Caching period</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Latest in Version 1 tree (currently 1.0.17)</td>
<td>1 hour</td>
</tr>
<tr>
<td>1.0</td>
<td>Latest in Version 1.0 tree (currently 1.0.17)</td>
<td>1 hour</td>
</tr>
<tr>
<td>1.0.17</td>
<td>Version 1.0.17</td>
<td>1 year</td>
</tr>
</tbody>
</table>
<p>By using the exact version number in your code, the load time of your site will improve on return visits as webfont.js will already be cached in your visitors browser. It will be cached on your visitors first visit if they&#8217;ve visited another site using the exact version in the last twelve months.</p>
<p>You can see the latest version available by visiting the <a href="http://code.google.com/apis/libraries/devguide.html#webfont">Google Libraries Developer Guide</a>. You can specify the exact version number in your code by replacing the bold line in the code sample above with:</p>
<pre><code><strong>'://ajax.googleapis.com/ajax/libs/webfont/1.0.17/webfont.js';</strong></code></pre>
]]></content:encoded>
			<wfw:commentRss>http://bigredtin.com/2010/caching-google-webfont-loader/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5: I couldn&#8217;t (quite) do it</title>
		<link>http://bigredtin.com/2010/html5-couldnt-do-it/</link>
		<comments>http://bigredtin.com/2010/html5-couldnt-do-it/#comments</comments>
		<pubDate>Mon, 13 Dec 2010 04:40:36 +0000</pubDate>
		<dc:creator>Peter Wilson</dc:creator>
				<category><![CDATA[Behind the Websites]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://bigredtin.com/?p=967</guid>
		<description><![CDATA[I found it difficult to use pure and semantic <abbr>HTML5</abbr> when dealing with current versions of Internet Explorer. I really tried to adopt the commonly advocated view that it's okay to require website visitors have JavaScript enabled but settled on a different option I could actually live with.]]></description>
				<content:encoded><![CDATA[<p>For most of my career as a web developer I&#8217;ve produced websites that work without JavaScript. For the JavaScript impaired the sites may be missing a minor visual feature or be a little clunky in places, but they work and the meaning remains clear. It doesn&#8217;t bother me that, sometimes, the cost of allowing for sites to load without JavaScript can mean missing out on the latest web fashion. I&#8217;m <a title="Why I will not be dropping support for IE6" href="http://bigredtin.com/behind-the-websites/not-dropping-ie6/">not a big fan of fashion</a>.</p>
<p>Currently, web development is undergoing some major transitions: the <abbr>HTML5</abbr> spec is being developed and <abbr>CSS3</abbr> is being implemented. The browser wars have returned, although this time around, it&#8217;s a battle to win developers&#8217; hearts by implementing the newest standards.</p>
<p>Now is the time for developers to re-evaluate their past practices; moving on from the old and embracing the new. I kept that ethos in mind when upgrading the Soupgiant WordPress base theme recently. Among other things we were porting it to <abbr>HTML5</abbr>.</p>
<p><span id="more-967"></span></p>
<p>I really tried to adopt the commonly advocated view that it&#8217;s okay to require website visitors have JavaScript enabled. It was going very well, right up to the final hurdle when I couldn&#8217;t resist checking the site I was working on without JavaScript.</p>
<p>Everything looked fine in Chrome, Firefox, and Opera. It was, predictably, Internet Explorer that threw a spanner in the works. For an artist&#8217;s impression, <a href="http://code.bigredtin.com/html5/">visit the demo in <abbr>IE8</abbr></a> (<a href="http://www.webpagetest.org/result/101213_2W1A/1/screen_shot/">screenshot</a> via WebPageTest):</p>
<div id="attachment_970" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.webpagetest.org/result/101213_2W1A/1/screen_shot/"><img class="size-medium wp-image-970 " title="HTML5 as seen in IE8" src="http://bigredtin.com/files/2010/12/ie8html5-300x166.jpg" alt="" width="300" height="166" /></a><p class="wp-caption-text">HTML5 as seen in IE8</p></div>
<p>Without <a href="http://remysharp.com/2009/01/07/html5-enabling-script/">Remy Sharp&#8217;s <abbr>HTML5</abbr> enabling script</a> the site I was working on was unusable, if anything, it looked worse than the demo provided.</p>
<p>I couldn&#8217;t, in good faith, sell a website to a client that some visitors would find unstyled, half styled or difficult to follow in places. I didn&#8217;t want to throw out the baby with the bathwater, the additional meaning provided by <abbr>HTML5</abbr> elements is just too great. <code>&lt;header&gt;</code>, <code>&lt;section&gt;</code>, <code>&lt;nav&gt;</code>, <code>&lt;article&gt;</code>, etc all provide meaning to a document that it&#8217;s difficult to justify going without.</p>
<p>It&#8217;s with the additional meaning in mind that I decided to go with &#8211; what I&#8217;ve dubbed &#8211; <abbr>HTML4.5</abbr>. <abbr>HTML5</abbr> provides the meaning while using traditional <abbr>HTML</abbr> 4 tags as hooks for styling. It introduces a bit of tag soup, as instead of <code>&lt;article id="content"&gt; ... &lt;/article&gt;</code> the code becomes <code>&lt;div id="content"&gt;&lt;article&gt; ... &lt;/article&gt;&lt;/div&gt;</code>.</p>
<p>The improvement to site I was working on was immediate, as you can see by <a href="http://code.bigredtin.com/html5/html45.html">visiting the <abbr>html4.5</abbr> demo in IE8</a> (<a href="http://www.webpagetest.org/result/101213_2W1B/1/screen_shot/">screenshot</a> via WebPageTest):</p>
<div id="attachment_973" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.webpagetest.org/result/101213_2W1B/1/screen_shot/"><img class="size-medium wp-image-973" title="HTML4.5 as seen in IE8" src="http://bigredtin.com/files/2010/12/html45-300x174.jpg" alt="" width="300" height="174" /></a><p class="wp-caption-text">HTML4.5 as seen in IE8</p></div>
<h4>I don&#8217;t care about tag soup</h4>
<p>If given the choice between an unusable website for some visitors or a little tag bloat, I&#8217;ll take the bloat any day of the week. In the demo the bloat adds an extra 14 bytes. On the home page for the site I was working on, it&#8217;s 40 bytes. I save plenty more than 40 bytes by minimising my JavaScript and <abbr>CSS</abbr> (a single key combo with the <a href="http://www.experienceinternet.co.uk/software/yui-compressor-textmate-bundle/">YUI Compressor TextMate bundle</a>), so I&#8217;m not too concerned about the side effects.</p>
<p>A technically beautiful site is the ideal but if a portion of your visitors can&#8217;t use it, then the beauty isn&#8217;t even skin deep. As <a href="http://allinthehead.com/">Drew McLellan</a> said recently on <a href="http://24ways.org/2010/finding-your-way-with-static-maps">24 ways</a>, progressive enhancement is &#8220;also known as doing our jobs properly.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://bigredtin.com/2010/html5-couldnt-do-it/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>How @font-face loads in different browsers</title>
		<link>http://bigredtin.com/2010/how-font-face-loads-in-different-browsers/</link>
		<comments>http://bigredtin.com/2010/how-font-face-loads-in-different-browsers/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 23:36:03 +0000</pubDate>
		<dc:creator>Josh Kinal</dc:creator>
				<category><![CDATA[Quick Notes]]></category>
		<category><![CDATA[@font-face]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[safari]]></category>

		<guid isPermaLink="false">http://bigredtin.com/?p=955</guid>
		<description><![CDATA[Why do you sometimes see the fonts change on a website after it loads? This is just one of the many ways browsers behave differently, as explained in this quote from Richard Rutter.]]></description>
				<content:encoded><![CDATA[<p>From <a href="http://24ways.org/2010/using-the-webfont-loader-to-make-browsers-behave-the-same"><em>24 ways</em>: Using the WebFont Loader to Make Browsers Behave the Same</a>:</p>
<blockquote><p>&#8220;Safari, Chrome and Internet Explorer leave a blank space in place of the styled text while the web font is loading. Opera and Firefox show text with the default font which switches over when the web font has loaded, resulting in the so-called Flash of Unstyled Text (aka FOUT).&#8221;</p></blockquote>
<p> <a href="http://clagnut.com/" title="Clagnut is Richard Rutter">Richard Rutter</a> wrote <a href="http://24ways.org/2010/using-the-webfont-loader-to-make-browsers-behave-the-same" title="24 ways: Using the WebFont Loader to Make Browsers Behave the Same">an excellent piece</a> about how to avoid these different behaviours. I thought it was worth quoting and linking to twice.</p>
]]></content:encoded>
			<wfw:commentRss>http://bigredtin.com/2010/how-font-face-loads-in-different-browsers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A half-baked (CSS) idea</title>
		<link>http://bigredtin.com/2010/a-half-baked-css-idea/</link>
		<comments>http://bigredtin.com/2010/a-half-baked-css-idea/#comments</comments>
		<pubDate>Mon, 20 Sep 2010 19:22:46 +0000</pubDate>
		<dc:creator>Peter Wilson</dc:creator>
				<category><![CDATA[Behind the Websites]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[data-URIs]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://bigredtin.com/?p=836</guid>
		<description><![CDATA[<a title="Spritebaker" href="http://www.spritebaker.com/">Spritebaker</a> has done the rounds a fair bit in web development circles over the past few weeks. It’s a great idea, done well. The only problem is it has the strange effect of making it seem like the page is actually taking longer to load. I take a look at a possible solution.]]></description>
				<content:encoded><![CDATA[<p><a title="Spritebaker" href="http://www.spritebaker.com/">Spritebaker</a> has been doing the rounds a fair bit in web development circles over the past few weeks, for the simple reason that it&#8217;s a great idea, done well. The best desciption comes from the site itself:</p>
<blockquote><p>It parses your css and returns a copy with all external media “baked” right into it as Base64 encoded datasets. The number of time consuming http-requests on your website is decreased significantly, resulting in a massive speed-boost.</p></blockquote>
<p>While baking images into your CSS to lower HTTP requests reduces the rendering time of your site overall, the downside is that CSS files <a title="block the initial rendering" href="http://code.google.com/speed/page-speed/docs/rendering.html#PutCSSInHead">block the initial rendering</a> of your site. While an unbaked site may render and be built up as external images load, a baked site will not render until both the CSS and baked images have loaded. This has the strange effect of making it seem like the page is actually taking <em>longer</em> to load.</p>
<p>I&#8217;ve thrown together a quick example of an <a title="unbaked page" href="http://code.bigredtin.com/spritebaker/unbaked.html">unbaked page</a> and its <a title="baked equivalent" href="http://code.bigredtin.com/spritebaker/baked.html">baked equivalent</a>. In this example, the unbaked page begins rendering earlier than its baked counterpart but finishes later.</p>
<p>In an attempt to kick off rendering earlier, I tried what I&#8217;ve named a half-baked idea: splitting the <em>standard</em> CSS into one file and the baked images into another. My hope was that browsers would render the standard CSS while the other was still loading. As you can see on the <a title="example page" href="http://code.bigredtin.com/spritebaker/halfbaked.html">example page</a>,  this failed.</p>
<p>With CSS only solutions delaying rendering of the page, it&#8217;s time to pull JavaScript out of our toolbox. Anyone whose read my article on <a title="delaying loading of print CSS" href="http://bigredtin.com/behind-the-websites/delay-loading-of-print-css/">delaying loading of print CSS</a> will find the solution eerily familiar. The CSS files are still split into the standard files and the file containing the baked-in images, the one with the baked in images is wrapped in &lt;noscript&gt; tags in the HTML head.</p>
<pre><code>&lt;link rel="stylesheet" href="halfbaked-1.css" type="text/css" /&gt;
&lt;noscript&gt;&lt;link rel="stylesheet" href="jshalfbaked-2.css" type="text/css" /&gt;&lt;/noscript&gt;</code></pre>
<p>This prevents the second/baked stylesheet from loading during the initial rendering of the page. Without this file blocking rendering, <a title="this version of the example" href="http://code.bigredtin.com/spritebaker/jsbaked.html">this version of the example</a> begins rendering as quickly as the first, unbaked, example.</p>
<p>The second/baked stylesheet needs to be added using the JavaScript below:</p>
<pre><code>&lt;script type="text/javascript"&gt;
window.onload = function(){
  var cssNode = document.createElement('link');
  cssNode.type = 'text/css';
  cssNode.rel = 'stylesheet';
  cssNode.href = 'jshalfbaked-2.css';
  cssNode.media = 'all';
  document.getElementsByTagName("head")[0].appendChild(cssNode);
}
&lt;/script&gt;</code></pre>
<p>Using the method above for baking images into your CSS will give you the best of both worlds, your page will render quickly with a basic structure before a single HTTP request is used to load all of your images.</p>
<p>I used <a title="Web Page Test" href="http://www.webpagetest.org">Web Page Test</a> to measure the first-run load times using IE9 Beta, averaged over 10 tests. On the test pages, with only a few images, the advantage of a baked stylesheet isn&#8217;t apparent, on a site with more images it would quickly become so.</p>
<table>
<thead>
<tr>
<th>Version</th>
<th>Starts Render</th>
<th>Fully Loaded</th>
</tr>
</thead>
<tbody>
<tr>
<td><a title="Unbaked" href="http://www.webpagetest.org/result/100919_5CCK/">Unbaked</a></td>
<td>0.490s</td>
<td>1.652s</td>
</tr>
<tr>
<td><a title="Baked" href="http://www.webpagetest.org/result/100919_5CCM/">Baked</a></td>
<td>1.862s</td>
<td>1.836s</td>
</tr>
<tr>
<td><a title="Half baked" href="http://www.webpagetest.org/result/100919_5CCN/">Half baked</a></td>
<td>2.138s</td>
<td>2.114s</td>
</tr>
<tr>
<td><a title="JS baked" href="http://www.webpagetest.org/result/100919_5CCP/">JS baked</a></td>
<td>0.499s</td>
<td>1.993s</td>
</tr>
</tbody>
<tbody></tbody>
</table>
<p>As the <a title="Spritebaker Info page" href="http://www.spritebaker.com/info">Spritebaker info page</a> says, IE versions prior to IE8 don&#8217;t understand data-URIs, so you&#8217;ll need to use a generous sprinkling of conditional comments to load images the old fashioned way in these browsers.</p>
<p>The examples above were tested on IE9 Beta, Chrome 6.0, Safari 5.0, Opera 10.10 and Firefox 3.6.9. Individual results may vary.</p>
<p>We&#8217;d love to hear of your experiences with baking stylesheets, or other techniques you use to speed up apparent rendering of your page, especially if it slows the total load/rendering time.</p>
]]></content:encoded>
			<wfw:commentRss>http://bigredtin.com/2010/a-half-baked-css-idea/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery 1.5 as jQuery 1.5.0</title>
		<link>http://bigredtin.com/2010/jquery-15-as-jquery-150/</link>
		<comments>http://bigredtin.com/2010/jquery-15-as-jquery-150/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 02:53:48 +0000</pubDate>
		<dc:creator>Peter Wilson</dc:creator>
				<category><![CDATA[Behind the Websites]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://bigredtin.pressgiant.net/?p=802</guid>
		<description><![CDATA[<a title="When jQuery 1.4 was released" href="http://jquery14.com/day-01/jquery-14">When jQuery 1.4 was released</a>, the Google URL being publicised by the jQuery team was <a href="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js">http://.../jquery/1.4/jquery.min.js</a> - while Google had set it up as <a href="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js">http://.../jquery/1.4.0/jquery.min.js</a>. I had problems with this seemingly minor difference.]]></description>
				<content:encoded><![CDATA[<p>In early 2009, I wrote a post on <a title="browser caching times" href="http://bigredtin.com/behind-the-websites/caching-on-the-google-ajax-libraries-api/">browser caching times</a> for the Google AJAX Libraries API.</p>
<p>The cheat notes are that three different URLs point to the current edition of jQuery and each URL is cached in the browser for a different length of time:</p>
<ul>
<li><a title="Latest in the version 1 tree" href="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js">Latest in the version 1 tree</a>: 1 hour</li>
<li><a title="Latest in the version 1.4 tree" href="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js">Latest in the version 1.4 tree</a>: 1 hour</li>
<li><a title="Version 1.4.2 exactly" href="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">Version 1.4.2 exactly</a>: <strong>1 year</strong></li>
</ul>
<p>The point of my post was that, when using Google&#8217;s AJAX Library to host jQuery, or any of the other libraries, it is best to specify the exact version to receive the full benefit of hosting on the same server as gazillions of other web sites, that being, your <a title="visitors don't need to download the library for every site they visit" href="http://encosia.com/2008/12/10/3-reasons-why-you-should-let-google-host-jquery-for-you/">visitors don&#8217;t need to download the library for every site they visit</a>. I was reminded of this when Dave Ward appeared on <a title="episode 32 of the official jQuery podcast" href="http://podcast.jquery.com/2010/08/27/episode-32-dave-ward/">episode 32 of the official jQuery podcast</a>.</p>
<p><a title="When jQuery 1.4 was released" href="http://jquery14.com/day-01/jquery-14">When jQuery 1.4 was released</a>, the Google URL being publicised by the jQuery team was <a href="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js">http://&#8230;/jquery/1.4/jquery.min.js</a> &#8211; while Google had set it up as <a href="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js">http://&#8230;/jquery/1.4.0/jquery.min.js</a>. I had two problems with this:</p>
<ul>
<li>The publicised URL, coming from the official jQuery team, was only cached for 1 hour;</li>
<li>Anyone using the publicised URL would automatically be upgraded to jQuery 1.4.1 upon its release, regardless of their expectations.</li>
</ul>
<p><strong>My request to John Resig and the jQuery team is to avoid confusion by officially numbering the next version as jQuery 1.5.0 and publicising the URL that contains the full version number.</strong></p>
<p>That means that for most people the default version of jQuery they download will be updated least often. It means that the people building the websites have more control over which version of jQuery their end users download and when.</p>
<p>It may seem trivial now but if your visitors leave your site while they&#8217;re waiting for jQuery to download, you&#8217;ll think it less so.</p>
<p>I&#8217;d love to hear your thoughts in the comments below or via <a title="@bigredtin" href="http://twitter.com/?status=@bigredtin">@bigredtin</a> on Twitter. If you agree, why not let the jQuery team know <a title="via Twitter" href="http://twitter.com/?status=@jquery">via Twitter</a>.</p>
<p><strong>Update:</strong> In the blog post announcing version 1.5, the jQuery team did publicise the 1.5.0 URL on the Google CDN.</p>
]]></content:encoded>
			<wfw:commentRss>http://bigredtin.com/2010/jquery-15-as-jquery-150/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript Localisation in WordPress</title>
		<link>http://bigredtin.com/2010/javascript-localisation-in-wordpress/</link>
		<comments>http://bigredtin.com/2010/javascript-localisation-in-wordpress/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 20:00:45 +0000</pubDate>
		<dc:creator>Peter Wilson</dc:creator>
				<category><![CDATA[Behind the Websites]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[themes]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wp_enqueue_script]]></category>
		<category><![CDATA[wp_localize_script]]></category>

		<guid isPermaLink="false">http://bigredtin.pressgiant.net/?p=759</guid>
		<description><![CDATA[I was asked on Twitter recently if it's possible to pass WordPress data to JavaScript, <code>wp_localize_script()</code> is the tool to do it with.]]></description>
				<content:encoded><![CDATA[<p>Recently on Twitter <a title="@iamcracks" href="http://twitter.com/iamcracks/">@iamcracks</a> asked</p>
<blockquote><p>Attention WordPress Wizards &amp; Gurus. Is it possible to &#8220;get WordPress to write a custom field into a javascript variable&#8221;?</p>
<p>&#8211; <a title="source" href="http://twitter.com/iamcracks/status/22658211370">source</a></p></blockquote>
<p>While I wouldn&#8217;t be so bold as to claim I&#8217;m either a wizard or a guru, I happen to know the answer to @iamcracks question.</p>
<p>A while back I wrote a two part tutorial on using <a title="JavaScript the WordPress way" href="http://bigredtin.com/behind-the-websites/javascript-the-wordpress-way-part-1/">JavaScript the WordPress way</a>, the code below builds on that. The first step is to load the JavaScript in functions.php using <code>wp_enqueue_script()</code> as detailed in the earlier tutorial:</p>
<pre><code>&lt;?php
function brt_load_scripts() {
  if (!is_admin()) {
    wp_enqueue_script(
      'brt-sample-script', //handle
      '/path/2/script.js', //source
      null, //no dependancies
      '1.0.1', //version
      true //load in html footer
    );
  }
}

add_action('wp_print_scripts', 'brt_load_scripts');
?&gt;</code></pre>
<p>This outputs the html required for the JavaScript when <code>wp_footer()</code> is called in footer.php</p>
<p>Localising the script is done using the function <code>wp_localize_script()</code> it takes three variables:</p>
<ul>
<li><strong>$handle</strong> &#8211; (string) the handle defined when registering the script with wp_enqueue_script</li>
<li><strong>$javascriptObject</strong> &#8211; (string) name of the JavaScript object that contains the passed variables.</li>
<li><strong>$variables</strong> &#8211; (array) the variables to be passed</li>
</ul>
<p>To pass the site&#8217;s home page and the theme directory, we&#8217;d add this function call below the <code>wp_enqueue_script</code> call above:</p>
<pre><code>&lt;?php
...
wp_localize_script('brt-sample-script', 'brtSampleVars', array(
  'url' =&gt; get_bloginfo('url'),
  'theme_dir' =&gt; get_bloginfo('stylesheet_directory')
  )
);
...
?&gt;</code></pre>
<p>The output html would be:</p>
<pre><code>&lt;script type='text/javascript'&gt;
/* &lt;![CDATA[ */
var brtSampleVars = {
  url: "http://bigredtin.com",
  theme_dir: "http://bigredtin.com/wp-content/themes/bigredtin"
};
/* ]]&gt; */
&lt;/script&gt;
&lt;script type='text/javascript' src='/path/2/script.js?ver=1.0.1'&gt;&lt;/script&gt;</code></pre>
<p>Accessing the variables within JavaScript is done using the standard dot notation, for example <code>brtSampleVars.theme_dir</code> to access the theme directory.</p>
<p>Using a post&#8217;s custom fields is slightly more complicated so I&#8217;ll write out the code in full:</p>
<pre><code>&lt;?php
function brt_load_scripts() {
  if (is_singular()) {
    wp_enqueue_script(
      'brt-sample-script', //handle
      '/path/2/script.js', //source
      null, //no dependancies
      '1.0.1', //version
      true //load in html footer
    );

    the_post();
    $allPostMeta = get_post_custom();
    wp_localize_script('brt-sample-script', 'brtSampleVars',
    array(
      'petersTwitter' =&gt; $allPostMeta['myTwitter'][0],
      'joshsTwitter' =&gt; $allPostMeta['joshsTwitter'][0]
      )
    );
    rewind_posts();
  }
}

add_action('wp_print_scripts', 'brt_load_scripts');
?&gt;</code></pre>
<p>Only pages and posts have custom fields so the check at the start of the function has become <code>is_singlular()</code> to check the user is on either a post or a page, earlier we were testing if the user was anywhere on the front end. The arguments for <code>wp_enqueue_script</code> have not changed.</p>
<p><code>the_post()</code> needs to be called to start the loop and initiate the $post object so the associated custom fields can be accessed in the following line and put in an array.</p>
<p>With the custom fields easily available, the information can then be passed to <code>wp_localize_script()</code> as earlier demonstrated. The final step is to rewind the loop so next time <code>the_post()</code> is called, from either single.php or page.php, the post data is available.</p>
<p>The html output from the sample above would be:</p>
<pre><code>&lt;script type='text/javascript'&gt;
/* &lt;![CDATA[ */
var brtSampleVars = {
  petersTwitter: "@pwcc",
  joshsTwitter: "@sealfur"
};
/* ]]&gt; */
&lt;/script&gt;
&lt;script type='text/javascript' src='/path/2/script.js?ver=1.0.1'&gt;&lt;/script&gt;</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://bigredtin.com/2010/javascript-localisation-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Delay Print Stylesheets Plugin</title>
		<link>http://bigredtin.com/2010/delay-print-css-plugin/</link>
		<comments>http://bigredtin.com/2010/delay-print-css-plugin/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 02:17:29 +0000</pubDate>
		<dc:creator>Peter Wilson</dc:creator>
				<category><![CDATA[Behind the Websites]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://bigredtin.pressgiant.net/?p=739</guid>
		<description><![CDATA[A few weeks ago I wrote a post in which I adapted an idea from a zOompf article to delay the loading of print stylesheets until after a web page has fully rendered. I've decided to convert the code from the original post into a plugin and add it to the WordPress plugin directory.]]></description>
				<content:encoded><![CDATA[<p>A few weeks ago I wrote a post in which I <a title="adapted an idea from a zOompf article" href="http://bigredtin.com/behind-the-websites/delay-loading-of-print-css/">adapted an idea from a zOompf article</a> to delay the loading of print stylesheets until after a web page has fully rendered. I finished that post with the following point/question:</p>
<blockquote><p>Another question to ask is whether all this is actually worth the effort – even when reduced through automation. On Big Red Tin, the print.css is 595 bytes, the delay in rendering is negligible.</p></blockquote>
<p>Chris and Jeff at <a title="Digging into WordPress" href="http://digwp.com">Digging into WordPress</a> picked up the article and posted it on their site. In turn it was picked up elsewhere and became the surprise hit of the summer at Big Red Tin. Not bad when one is shivering through a bitter Melbourne winter.</p>
<p>As a result of the interest, I decided to convert the code from the original post into a plugin and add it to the WordPress plugin directory.</p>
<h4>Further Testing</h4>
<p>As I warned in the original article, I&#8217;d tested the code in very limited circumstances and found it had worked. Fine for a code sample but not enough for a sub version-1.0-release plugin. Additional testing showed:</p>
<ol>
<li>Stylesheets intended for IE, through conditional comments, were loading in all browsers</li>
<li>When loading multiple stylesheets, the correct order was not maintained in all browsers</li>
</ol>
<p>If jQuery was available I wanted to use it for JavaScript event management otherwise I&#8217;d use purpose-written JavaScript. There&#8217;s no point, after all, of worrying about the rendering delay caused by 600-1000 bytes only to load a 71KB (or 24KB <a title="gzipped" href="http://developer.yahoo.net/blog/archives/2007/07/high_performanc_3.html">gzipped</a>) file in its place.</p>
<p>Other things I wanted to do included:</p>
<ol>
<li>Put the PHP in a class to reduce the risk of clashing function/class names</li>
<li>Put the JavaScript in its own namespace</li>
<li>Keep the output code as small as possible</li>
</ol>
<p>To support conditional comments for IE required adding each stylesheet within a separate &lt;script&gt; tag, using this method the output HTML takes the following form:</p>
<pre><code>&lt;script&gt;
  // add global print.css
&lt;/script&gt;
&lt;!--[if IE 6]&gt;
  &lt;script type='text/javascript'&gt;
    // add ie6 specific print.css
  &lt;/script&gt;
&lt;![endif]--&gt;</code></pre>
<p>This violates my aim to keep output as small as possible but footprint has to take second place to bug-free. I could have translated the code to use <a title="JavaScript conditional comments" href="http://en.wikipedia.org/wiki/Conditional_comment#Conditional_Comment_in_JScript">JavaScript conditional comments</a> by translating the IE version to the JavaScript engine it uses but this could lead to future-proofing problems.</p>
<p>To maintain the order of stylesheets, I added each event to an array of functions and then used a single event to loop through the array of functions. If jQuery is used, I add multiple events because jQuery runs events on a first in first out basis.</p>
<p>Putting the PHP in a class and the JavaScript in its own namespace is fairly self-explanatory. <a href="http://bit.ly/bBUXCh">Google is your friend</a> if you wish to read up further on this.</p>
<p>Minimising the footprint was also a simple step. I wrote the JavaScript out in full with friendly variable names. Once I was happy with the code, I ran the code through <a href="http://refresh-sf.com/yui/">the YUI JavaScript compressor</a>, commented out the original JavaScript in the plugin file and output the compressed version in its place.</p>
<p>The JavaScript is output inline (within the HTML) to avoid additional HTTP requests. I was in two minds about this because browser caching is lost in the process. So it may change in a later version.</p>
<p>I&#8217;ve worked out another way to keep the footprint small. Rather than creating a function to pass the stylesheet&#8217;s URL and ID to <code>brt_print.add(url, id)</code>, I wrote out the full function for each style sheet. I&#8217;ll fix that in the next release.</p>
<p>You can <a title="download" href="http://wordpress.org/extend/plugins/delay-print-css/download/">download</a> the <a title="Delay Print CSS Plugin" href="http://http://wordpress.org/extend/plugins/delay-print-css/">Delay Print CSS Plugin</a> from the WordPress plugin repository.</p>
]]></content:encoded>
			<wfw:commentRss>http://bigredtin.com/2010/delay-print-css-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Delay loading of print CSS</title>
		<link>http://bigredtin.com/2010/delay-loading-of-print-css/</link>
		<comments>http://bigredtin.com/2010/delay-loading-of-print-css/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 05:03:50 +0000</pubDate>
		<dc:creator>Peter Wilson</dc:creator>
				<category><![CDATA[Behind the Websites]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://bigredtin.pressgiant.net/?p=689</guid>
		<description><![CDATA[Recently I stumbled across an article detailing browser performance with the CSS print media type. In most recent browsers the print stylesheet held up rendering.

The article suggested a solution, which I decided to automate for WordPress.]]></description>
				<content:encoded><![CDATA[<p>Recently I stumbled across an article on zOompf <a title="detailing browser performance with the CSS print media type" href="http://zoompf.com/blog/2009/12/browser-performance-problem-with-css-print-media-type">detailing browser performance with the CSS print media type</a>. In most recent browsers, Safari being the exception, the print stylesheet held up rendering of the page.</p>
<p>The zOomph article suggests a solution, to load print stylesheets using JavaScript once the page has  rendered (ie, on the <code>window.onload</code> event), with a backup for the JavaScript impaired. You can see their code in the original article.</p>
<h4>Automating the task for WordPress</h4>
<p>Most sites I develop are in WordPress so I decided to automate the process. This relies on using <code>wp_enqueue_style</code> to register the stylesheets:</p>
<pre><code>function enqueue_css(){
  if (!is_admin()){
    wp_enqueue_style (
      'bigred-print', /* handle */
      '/path-to/print.css', /* source */
      null, /* no requirements */
      '1.0', /* version */
      'print' /* media type */
    );
  }
}
add_action('wp_print_styles', 'enqueue_css');</code></pre>
<p>The above code will output the following HTML in the header:</p>
<pre><code>&lt;link rel='stylesheet' id='bigred-print-css'  href='/path-to/print.css?ver=1.0' type='text/css' media='print' /&gt;</code></pre>
<p>The first step is to wrap the above html in noscript tags, the WordPress <a title="filter" href="http://codex.wordpress.org/Plugin_API#Filters">filter</a> <code>style_loader_tag</code> is ideal for this.</p>
<pre><code>function js_printcss($tag, $handle) {
  global $wp_styles;
  if ($wp_styles-&gt;registered[$handle]-&gt;args == 'print') {
    $tag = "&lt;noscript&gt;" . $tag . "&lt;/noscript&gt;";
  }
  return $tag;
}
add_filter('style_loader_tag', 'js_printcss', 5, 2);</code></pre>
<p>The filter runs for all stylesheets, regardless of media type, so the function checks for print stylesheets and wraps them in the <code>noscript</code> tag, other media types are left alone.</p>
<p>The first two arguments are the filter and function names respectively, the third argument specifies the timing (5 is the default) and the final argument tells WordPress how many arguments to pass to the filter – two – in this case $tag and $handle.</p>
<p>With the new filter, WordPress now outputs following HTML in the header:</p>
<pre><code>&lt;noscript&gt;
&lt;link rel='stylesheet' id='bigred-print-css'  href='/path-to/print.css?ver=1' type='text/css' media='print' /&gt;
&lt;/noscript&gt;</code></pre>
<p>The next step is to add the JavaScript to load the stylesheets, we can do this by changing our original function,  <code>js_printcss</code>, and making use of a global variable:</p>
<pre><code>$printCSS = '';

function js_printcss($tag, $handle){
  global $wp_styles, $printCSS;
  if ($wp_styles-&gt;registered[$handle]-&gt;args == 'print') {

    $tag = "&lt;noscript&gt;" . $tag . "&lt;/noscript&gt;";

    preg_match("/&lt;\s*link\s+[^&gt;]*href\s*=\s*[\"']?([^\"' &gt;]+)[\"' &gt;]/", $tag, $hrefArray);
    $href = $hrefArray[1];

    $printCSS .= "var cssNode = document.createElement('link');";
    $printCSS .= "cssNode.type = 'text/css';";
    $printCSS .= "cssNode.rel = 'stylesheet';";
    $printCSS .= "cssNode.href = '" . esc_js($href) . "';";
    $printCSS .= "cssNode.media = 'print';";
    $printCSS .= "document.getElementsByTagName(\"head\")[0].appendChild(cssNode);";
  }
  return $tag;
}</code></pre>
<p>The code creates the PHP variable <code>$printCSS</code> globally, which is then called into the function using the global command.</p>
<p>After wrapping the tag in the <code>noscript</code> tags, the new function uses a regular expression to extract the URL of the stylesheet from the link tag and placing it the variable <code>$href</code>.</p>
<p>Having extracted the stylesheet&#8217;s URL, the function then appends the required JavaScript to the PHP global variable <code>$printCSS</code>.</p>
<p>The final step is to add the JavaScript to the footer of the HTML using the wp_footer action in WordPress. The PHP to do this is:</p>
<pre><code>function printCSS_scriptTags(){
  global $printCSS;
  if ($printCSS != '') {
    echo "&lt;script type='text/javascript'&gt;\n";
    echo "window.onload = function(){\n";
    echo $printCSS;
    echo "}\n&lt;/script&gt;";
  }
}

add_action('wp_footer', 'printCSS_scriptTags');</code></pre>
<p>The above code uses <code>window.onload</code> as dictated in the original article. A better method would be to use an event listener to do the work, for those using jQuery we would change the function to:</p>
<pre><code>function printCSS_scriptTags(){
  global $printCSS;
  if ($printCSS != '') {
    echo "&lt;script type='text/javascript'&gt;\n";
    echo "jQuery(window).ready(function(){\n";
    echo $printCSS;
    echo "});\n&lt;/script&gt;";
 }

}
add_action('wp_footer', 'printCSS_scriptTags');</code></pre>
<p>The above solution had been tested for very limited circumstances only and found to have worked. Were I to use the function in a production environment I would undertake further testing.</p>
<p>Another question to ask is whether all this is actually worth the effort – even when reduced through automation. On Big Red Tin, the print.css is 595 bytes, the delay in rendering is negligible.</p>
<p><strong>Update Aug 23, 2010</strong>: Fixed a type in the code block redefining <code>js_printcss</code>.</p>
<p><strong>Update Aug 27, 2010</strong>: I&#8217;ve decided to release this as a plugin, get the skinny and the plugin from the <a href="http://bigredtin.com/behind-the-websites/delay-print-css-plugin/">followup article</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bigredtin.com/2010/delay-loading-of-print-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
