<?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>哈哈小老虎&#039;s Blog &#187; Performance</title>
	<atom:link href="http://www.mytcer.com/category/performance/feed" rel="self" type="application/rss+xml" />
	<link>http://www.mytcer.com</link>
	<description></description>
	<lastBuildDate>Sat, 31 Dec 2011 15:42:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>离线应用缓存的资源更新问题及解决办法</title>
		<link>http://www.mytcer.com/798</link>
		<comments>http://www.mytcer.com/798#comments</comments>
		<pubDate>Thu, 28 Oct 2010 15:18:48 +0000</pubDate>
		<dc:creator>Tcer</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[offline application cache]]></category>
		<category><![CDATA[离线应用缓存]]></category>

		<guid isPermaLink="false">http://www.mytcer.com/?p=798</guid>
		<description><![CDATA[如果不清楚什么是离线应用缓存，可以看这篇文章（safari官方站点的介绍文章，强烈推荐，在我查阅过的资料中，这篇是最棒的！），这里主要介绍使用离线应用缓存后，出现的资源更新问题及我实践过的解决办法（我的blog正在使用）。 一. 使用离线应用缓存后，被缓存的资源是如何更新的？ （1）用户访问使用了离线应用缓存的页面时，客户端（支持离线应用缓存的客户端）从服务器下载manifest文件； （2）将服务器端的manifest文件和本地最新版的manifest文件（manifest文件本身也会被缓存到用户机器上）进行对比（这种对比是对文件内容进行逐字节的对比）； （3）当且仅当服务器端的manifest文件内容发生改变时，才会更新客户端的缓存（注意：改变manifest文件的最后修改时间，不会触发缓存更新）； （4）用户下一次访问该页面时，使用更新过的资源。 二. 制约资源更新的两个因素 （1）当且仅当服务器端的manifest文件内容发生改变时，缓存才会更新（即使改变被缓存资源文件的内容，缓存也不会更新）； （2）使用了离线应用缓存的页面，其本身会默认被缓存，且这个默认行为是无法取消的； 三. 两个制约因素带来的资源更新问题 （1）当修改了被缓存资源的内容时，还需要修改服务器端manifest文件的内容，太麻烦（我们更希望：被缓存资源的内容发生改变时，服务器端的manifest文件能自动更新）； （2）当被缓存资源的内容无改动，但页面（使用了离线应用缓存的页面）内容发生了变更时，同样需要修改服务器端manifest文件的内容，才能让客户端的缓存及时更新。 // 以我的blog为例： 我缓存了几个前端文件，这些前端文件的修改频率很低，但哥更新blog文章的频率则较高，这种情况下，如果发布新文章的同时，不修改服务器上的manifest文件，就会导致访问哥站点的用户看不到更新的文章（用支持离线应用缓存的浏览器访问过哥的blog，且没有清空过本机缓存的用户）。 四. 我的解决办法 1. 先解决两个制约因素 （1）访问站点时，获取被缓存资源的最后修改时间，将最后修改时间作为注释（此时manifest文件的内容需要动态生成）； （2）在服务器端创建一个文本文件（我blog中叫manifest.txt），编辑/发布文章时，将当前时间戳写入文本文件中，然后通过该文本文件的最后修改时间，来判断页面内容是否发生了变化（如果你也是使用的wordpress，那么可以通过修改post.php来实现）。 // 以我的blog为例 &#60;?php header("Content-Type: text/cache-manifest"); $line_break = "\r\n"; $hashes = ""; $cache_files = array("manifest.txt", "style.css", "img/bg.png", "img/subscribe.png"); echo "CACHE MANIFEST" . $line_break; foreach ($cache_files as $filename) { if (is_file($filename)) { echo [...]]]></description>
		<wfw:commentRss>http://www.mytcer.com/798/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>巧妙去除数组中的重复项</title>
		<link>http://www.mytcer.com/357</link>
		<comments>http://www.mytcer.com/357#comments</comments>
		<pubDate>Mon, 21 Dec 2009 12:59:14 +0000</pubDate>
		<dc:creator>Tcer</dc:creator>
				<category><![CDATA[JS]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[YUI]]></category>
		<category><![CDATA[数组]]></category>

		<guid isPermaLink="false">http://www.mytcer.com/?p=357</guid>
		<description><![CDATA[时不时的看下YUI的源码, 总会有些收获. 最近, 我在看YAHOO.util.YUILoader类的源码, 其中有个排除数组重复项的方法, 让我觉得甚为巧妙, 这里分享下&#8230; 一. YUI中的源码 var toObject = function(a) { var o = {}; for (var i=0, j=a.length; i&#60;j; i=i+1) { // 这里我调整了下, YUI源码中是i&#60;a.length o[a[i]] = true; } return o; }; var keys = function(o) { var a=[], i; for (i in o) { if (o.hasOwnProperty(i)) { // 这里, YUI源码中是lang.hasOwnProperty(o, i) [...]]]></description>
		<wfw:commentRss>http://www.mytcer.com/357/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>小心页面中引用了空的外部资源</title>
		<link>http://www.mytcer.com/299</link>
		<comments>http://www.mytcer.com/299#comments</comments>
		<pubDate>Wed, 16 Dec 2009 13:37:24 +0000</pubDate>
		<dc:creator>Tcer</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Empty image]]></category>
		<category><![CDATA[空图像]]></category>
		<category><![CDATA[网站性能]]></category>

		<guid isPermaLink="false">http://www.mytcer.com/?p=299</guid>
		<description><![CDATA[看到NCZ的这篇文章: Empty image src can destroy your site, 受益不少, 在这里总结一下! 一. 测试环境 浏览器: IE6+, FF 3.5.5, Opera 10.00 Beta 2, Chrome 4.0.249.11, Safari 4.0.3 OS: winXP 32 二. 空图像 当img元素的src属性被设置为空字符串时, 空图像就产生了, 它有两种形式: 1. html形式 &#60;img src="" /&#62; 2. js形式 var oImg = new Image(); oImg.src=""; 三. 浏览器对空图像的处理态度 1. IE6,7,8: 空图像会向当前页面所在的目录发起一次请求, 如http://www.mytcer.com/demo/test.html中有一个空图像, 那么它会请求http://www.mytcer.com/demo/; 2. Safari 4(据作者测试, [...]]]></description>
		<wfw:commentRss>http://www.mytcer.com/299/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

