<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Cache is King</title>
	<atom:link href="http://www.stevesouders.com/blog/2012/10/11/cache-is-king/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.stevesouders.com/blog/2012/10/11/cache-is-king/</link>
	<description>Essential knowledge for making your web pages faster.</description>
	<lastBuildDate>Sat, 18 May 2013 07:47:15 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
	<item>
		<title>By: Steve Souders</title>
		<link>http://www.stevesouders.com/blog/2012/10/11/cache-is-king/#comment-4206</link>
		<dc:creator>Steve Souders</dc:creator>
		<pubDate>Sat, 20 Oct 2012 23:37:59 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=2919#comment-4206</guid>
		<description><![CDATA[@dguimbellot: I&#039;ll be announcing a new experiment to measure average time-in-cache. Stay tuned.

@Lennie: I don&#039;t know whether mobile devices stored cached items compressed or uncompressed.]]></description>
		<content:encoded><![CDATA[<p>@dguimbellot: I&#8217;ll be announcing a new experiment to measure average time-in-cache. Stay tuned.</p>
<p>@Lennie: I don&#8217;t know whether mobile devices stored cached items compressed or uncompressed.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Lennie</title>
		<link>http://www.stevesouders.com/blog/2012/10/11/cache-is-king/#comment-4205</link>
		<dc:creator>Lennie</dc:creator>
		<pubDate>Sat, 20 Oct 2012 19:55:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=2919#comment-4205</guid>
		<description><![CDATA[Steve,

Did you or anyone else test if the small caches on mobile store the files compressed ?

Or is it as bad as on the desktop where Safari for example does not cache compressed ?

I have a hard time finding numbers on that.

I did see numbers on your site and others on how small (and non-persistent) the caches on mobile browsers are and which browsers on the desktop store the data compressed.

But not the combination.]]></description>
		<content:encoded><![CDATA[<p>Steve,</p>
<p>Did you or anyone else test if the small caches on mobile store the files compressed ?</p>
<p>Or is it as bad as on the desktop where Safari for example does not cache compressed ?</p>
<p>I have a hard time finding numbers on that.</p>
<p>I did see numbers on your site and others on how small (and non-persistent) the caches on mobile browsers are and which browsers on the desktop store the data compressed.</p>
<p>But not the combination.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: dguimbellot</title>
		<link>http://www.stevesouders.com/blog/2012/10/11/cache-is-king/#comment-4204</link>
		<dc:creator>dguimbellot</dc:creator>
		<pubDate>Fri, 19 Oct 2012 19:25:17 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=2919#comment-4204</guid>
		<description><![CDATA[cached items are also stored on the edge as well as local proxies. thus the risk of 1 day cache misses having to go to the max latency server is also lower.

is there some way with ALexa or view across shared google analytics to analyze the age time vs. actual fetch to calculate a best case setting for the user community at large?]]></description>
		<content:encoded><![CDATA[<p>cached items are also stored on the edge as well as local proxies. thus the risk of 1 day cache misses having to go to the max latency server is also lower.</p>
<p>is there some way with ALexa or view across shared google analytics to analyze the age time vs. actual fetch to calculate a best case setting for the user community at large?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Steve Souders</title>
		<link>http://www.stevesouders.com/blog/2012/10/11/cache-is-king/#comment-4203</link>
		<dc:creator>Steve Souders</dc:creator>
		<pubDate>Thu, 18 Oct 2012 18:34:46 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=2919#comment-4203</guid>
		<description><![CDATA[@Nick: It&#039;s fine to use Expires instead of or in addition to max-age. Two advantages of max-age are it&#039;s an absolute # of seconds and thus is not subject to clock skew issues between the client and server, and max-age is part of the Cache-Control header which includes other values which means you can do with one less response header.]]></description>
		<content:encoded><![CDATA[<p>@Nick: It&#8217;s fine to use Expires instead of or in addition to max-age. Two advantages of max-age are it&#8217;s an absolute # of seconds and thus is not subject to clock skew issues between the client and server, and max-age is part of the Cache-Control header which includes other values which means you can do with one less response header.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nick Retallack</title>
		<link>http://www.stevesouders.com/blog/2012/10/11/cache-is-king/#comment-4199</link>
		<dc:creator>Nick Retallack</dc:creator>
		<pubDate>Wed, 17 Oct 2012 23:01:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=2919#comment-4199</guid>
		<description><![CDATA[In your metrics, you never mentioned the Expires header.  Doesn&#039;t it serve the same purpose as max-age?]]></description>
		<content:encoded><![CDATA[<p>In your metrics, you never mentioned the Expires header.  Doesn&#8217;t it serve the same purpose as max-age?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Steve Souders</title>
		<link>http://www.stevesouders.com/blog/2012/10/11/cache-is-king/#comment-4195</link>
		<dc:creator>Steve Souders</dc:creator>
		<pubDate>Mon, 15 Oct 2012 23:05:15 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=2919#comment-4195</guid>
		<description><![CDATA[@Laurens: That&#039;s a good point. I don&#039;t know what the impact would be. Next time I&#039;ll using Chrome.]]></description>
		<content:encoded><![CDATA[<p>@Laurens: That&#8217;s a good point. I don&#8217;t know what the impact would be. Next time I&#8217;ll using Chrome.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Laurens</title>
		<link>http://www.stevesouders.com/blog/2012/10/11/cache-is-king/#comment-4192</link>
		<dc:creator>Laurens</dc:creator>
		<pubDate>Mon, 15 Oct 2012 21:18:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=2919#comment-4192</guid>
		<description><![CDATA[Nice work Steve. There is a flaw in the test though. IE9 does not block the (on)load event if external javascripts are dynamically inserted to the DOM. Not even when an advertisement uses document.write, so yes the impact of no JS seems lower than you would expect. I think the result will be different if you would use Chrome.

In my opinion measuring untill onload within IE does not shape a realistic picture of the real page performance. The stuff that happens after the (on)load (but still belongs to the initial payload) is a blind spot. Would be great if navigation timing could go beyond (on)load.]]></description>
		<content:encoded><![CDATA[<p>Nice work Steve. There is a flaw in the test though. IE9 does not block the (on)load event if external javascripts are dynamically inserted to the DOM. Not even when an advertisement uses document.write, so yes the impact of no JS seems lower than you would expect. I think the result will be different if you would use Chrome.</p>
<p>In my opinion measuring untill onload within IE does not shape a realistic picture of the real page performance. The stuff that happens after the (on)load (but still belongs to the initial payload) is a blind spot. Would be great if navigation timing could go beyond (on)load.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ali</title>
		<link>http://www.stevesouders.com/blog/2012/10/11/cache-is-king/#comment-4187</link>
		<dc:creator>Ali</dc:creator>
		<pubDate>Sat, 13 Oct 2012 12:16:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=2919#comment-4187</guid>
		<description><![CDATA[Great work. With regard to AJAX advice, I also personally prefer SPA-style applications over server-rendered resources. 

However, there is a school of thought gaining momentum recently - especially in the REST community - that believes SPA-style leads to bad design and slow user experience - main page loads and then it has to start loading all the resources. Twitter&#039;s move for scrapping its SPA has been taken as a proof in the industry.

One of the main problems I have with server-rendered views is that they are composed resources as such very bad for caching. 

Watch this space for more controversy!]]></description>
		<content:encoded><![CDATA[<p>Great work. With regard to AJAX advice, I also personally prefer SPA-style applications over server-rendered resources. </p>
<p>However, there is a school of thought gaining momentum recently &#8211; especially in the REST community &#8211; that believes SPA-style leads to bad design and slow user experience &#8211; main page loads and then it has to start loading all the resources. Twitter&#8217;s move for scrapping its SPA has been taken as a proof in the industry.</p>
<p>One of the main problems I have with server-rendered views is that they are composed resources as such very bad for caching. </p>
<p>Watch this space for more controversy!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: joe vallender</title>
		<link>http://www.stevesouders.com/blog/2012/10/11/cache-is-king/#comment-4185</link>
		<dc:creator>joe vallender</dc:creator>
		<pubDate>Fri, 12 Oct 2012 15:14:41 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=2919#comment-4185</guid>
		<description><![CDATA[totally agree about having at least two aggregated files, kyle. 

I&#039;ve found this to be a real necessity for those projects that seem to be perpetually &#039;in development&#039; or with frequent releases]]></description>
		<content:encoded><![CDATA[<p>totally agree about having at least two aggregated files, kyle. </p>
<p>I&#8217;ve found this to be a real necessity for those projects that seem to be perpetually &#8216;in development&#8217; or with frequent releases</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kyle Simpson</title>
		<link>http://www.stevesouders.com/blog/2012/10/11/cache-is-king/#comment-4184</link>
		<dc:creator>Kyle Simpson</dc:creator>
		<pubDate>Fri, 12 Oct 2012 03:29:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.stevesouders.com/blog/?p=2919#comment-4184</guid>
		<description><![CDATA[Excellent post and analysis, Steve.

I think this further reinforces one of the points I&#039;ve made for years about the value of dynamic script loading where you should first concat all your JS into a single file (down from 10-20+ files on average), but THEN split that into 2-3 chunks, and load them dynamically.

I usually point out the value of parallel loading in that scenario, which has been proven many times over (despite the cargo cult &quot;load a single file only&quot; mentality that prevails). But there&#039;s another, and as you point out, MORE important benefit:

** different caching headers **

If you are combining all your JS into a single concat file, you are undoubtedly combining some code which is extremely stable (like a jQuery release which will never ever change) and some (maybe a lot) which is quite volatile (like your UX code you tweak frequently). If you only serve one file, you have to pick one caching length for all that code.

If you split your JS into 2 chunks (the volatile chunk and the stable chunk), you can serve each with different caching length headers. When your UX code updates frequently, over time, repeat users on your site will not have to keep downloading all that stable code over and over again.

I have done these things in production on large sites and I can attest time and again it helps. It helps big time. And it&#039;s nice to see your real numbers research backing that up.]]></description>
		<content:encoded><![CDATA[<p>Excellent post and analysis, Steve.</p>
<p>I think this further reinforces one of the points I&#8217;ve made for years about the value of dynamic script loading where you should first concat all your JS into a single file (down from 10-20+ files on average), but THEN split that into 2-3 chunks, and load them dynamically.</p>
<p>I usually point out the value of parallel loading in that scenario, which has been proven many times over (despite the cargo cult &#8220;load a single file only&#8221; mentality that prevails). But there&#8217;s another, and as you point out, MORE important benefit:</p>
<p>** different caching headers **</p>
<p>If you are combining all your JS into a single concat file, you are undoubtedly combining some code which is extremely stable (like a jQuery release which will never ever change) and some (maybe a lot) which is quite volatile (like your UX code you tweak frequently). If you only serve one file, you have to pick one caching length for all that code.</p>
<p>If you split your JS into 2 chunks (the volatile chunk and the stable chunk), you can serve each with different caching length headers. When your UX code updates frequently, over time, repeat users on your site will not have to keep downloading all that stable code over and over again.</p>
<p>I have done these things in production on large sites and I can attest time and again it helps. It helps big time. And it&#8217;s nice to see your real numbers research backing that up.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
