更新浏览器缓存

开始之前可以先看下这个 Self-updating scripts,看完了接着。

动态构建iframe 的好处在于,想清啥就清啥,清的不一定是固定的资源,总会有需要清滴的。IE还有可以让要清的js不用运行,webkit的好像没找到适合的方式。

function clearCache(js) {
	if(!(typeof(js) == 'object' && js.length>0 )){		
		return false;
	}	var isIE = (navigator.userAgent.match(/MSIE/)!=null);
	var mimetype = isIE ? 'type="text/cache"' : '';
	var jsClips = '<script '+ mimetype +' src="' + js.join('"><\/script><script '+ mimetype +' src="') + '"><\/script>';
	var jsReload = '<script>if(window.name == ""){window.name = "kill";location.reload(true);}<\/script>';
	var html = '<html><body>'
			+ jsClips 
			+ jsReload
			+ '</body></html>';
	var ifr = document.createElement('iframe');
	ifr.style.display ="none";
	if(isIE){
		ifr.src = 'about:blank';
		document.body.appendChild(ifr);
		var ifrdoc = ifr.contentWindow.document;
		ifrdoc.open();
		ifrdoc.write(html);
		ifrdoc.close();
	}else{
		ifr.src = "data:text/html;charset=gbk,"+ encodeURIComponent(html);
		document.body.appendChild(ifr);
	}}

虽然脚本是可以被更新,但是什么时候更新才是最大一个问题。

每次都去检查一下是否要更新,是个办法,但觉得有点浪费,以前我是用类如这种方式来创建一个4小时内的时间戳,对应请求的地址过期时间是10年 来减少消耗。

parseInt((new Date()).getTime()/(1000*60*60*4)).toString(36)

当然如果可以单独给配指定的过期时间会更简单。

现在呢?我觉得可以增加用 localStorage(低版本 IE 用 userData 顶)减少更多的消耗。

不过说实话,怎样更新 一直没想好怎样做更适合

除了用于更新第三方的,那是否可以应用到自身业务呢。在淘宝,某些通用的东东会被加上各种各样的时间戳,想统一时间戳最好的办法就是不用时间戳。 如果不带时间戳 定期在onload 之后再去检查更新我觉得是可接受的。

想看下文吗 看这里 浏览器静态资源的版本控制新思路.强制更新指定资源缓存.的探讨

This entry was posted in Web开发 and tagged , . Bookmark the permalink.

15 Responses to 更新浏览器缓存

  1. xixia @ 2012-06-17 at 01:18

    不错,可以用在应用中心了~oyeah~ 这样就不用担心缓存问题,同时也不用给那么一段复杂的代码给别人了

  2. Franky @ 2012-07-04 at 14:45

    我正准备在d2上讲这个话题…. reload(true) 是不合适的. 应该用reload(false). 除非保证我们自身的具备缓存功能的反向代理, 不遵守http1.1协议,遇到请求头中带有 Cahce-Control : no-cache的请求,不会回源. 不然所有客户端的请求都会击穿缓存层,非反向代理的成本,我们不考虑,但是反向代理每个用户都回源的成本,是无法接收的?

    • aoao @ 2012-07-05 at 00:30

      你说的回源是 查询更新还是要刷的脚本

  3. Franky @ 2012-07-04 at 14:50

    webkit,FF 不执行的方法? 如果确认只更新css,js的话,用 object 来做即可哎.
    而且webkit也不是都不支持 text/c 这种, chrome7-就是支持的?

    • aoao @ 2012-07-05 at 00:29

      FF 可以 只是没去处理,现在量太少了,主要是webkit,一直没找到适合的。text/cache 这种我的方式没办法刷掉缓存

  4. Franky @ 2012-07-05 at 09:53

    我也有个困惑, 我们qq上探讨下.这里太麻烦.

  5. Franky @ 2012-07-05 at 10:01

    应付FF + webkit 试试.

  6. Franky @ 2012-07-05 at 10:03

    咦,上面的回复,内容怎么都不全…
    http://www.cnblogs.com/_franky/archive/2012/07/05/2577141.html

    这个链接,可以看下.

  7. 麦田 @ 2012-08-27 at 19:04

    嗷嗷。你好。我正在看你写的书。你现在的个人网站。chrome浏览器怎么显示不一样的呀。有时间麻烦你看一下。

  8. 麦田 @ 2012-08-27 at 19:08

    火狐和chrome上的浏览效果是一样的。但IE上就很不一样。

  9. 麦田 @ 2012-08-27 at 19:10

    嗷嗷。你好。我正在看你写的书。你现在的个人网站。chrome浏览器怎么显示不一样的呀。有时间麻烦你看一下。
    火狐和chrome上的浏览效果是一样的。IE上就不一样了。
    嗷嗷老师。你设计的时候是怎么想的啊。我很想知道。
    谢谢!!!!!

    • aoao @ 2012-08-28 at 01:09

      因为用了css3 ie支持的不好,就显示得不一样,纯个人好玩

      • 麦田 @ 2012-08-28 at 17:33

        嗷嗷老师。你们有没有讨论的群啊。能不能让我也加一下。我的qq是784510246.能告诉我你们讨论群的qq吗?谢谢!

      • aoao @ 2012-09-04 at 21:53

        我比较少上QQ 一般在Qwrap的群 104605327

  10. blue @ 2013-06-12 at 16:34

    好长时间木有更新了

发表评论

(必填)

(必填)