在网站开发过程中,我们会遇到这样的问题:每次更行css,js文件,都需要清理流量器缓存,现在提供几种解决方法:
1.对于Ajax 的请求(不管是静态数据还是动态数据):
//以下三种方法使用其中任何一种方法都可以
xmlhttp.setRequestHeader("Cache-Control","no-cache");
//或者
xmlhttp.setRequestHeader("If-Modified-Since","0");
//或者
- xmlhttp.Open(url+‘?rnd=‘+Math.random(),....);
如果使用 prototype.js , 用类似这样的代码 :
- new Ajax.Request(url,{method:"get",requestHeaders:["Cache-Control","no-cache"]});
- //或者
- new Ajax.Request(url,{method:"get",requestHeaders:["If-Modified-Since","0"]});
2.对于css,js文件处理
因为css,js 是通过 <script src=....> 这种方式加载的,所以,很难使用 asp 的那种服务器端禁止缓存的办法。也很难使用ajax的通过设置 http请求头的办法禁止使用缓存。
看来随机数是个好办法。
- //方法一:
- document.write("<script src=‘test.js?rnd="+Math.random()+"‘></s"+"cript>");
- //方法二:
- var js=document.createElement("script");
- js.src="test.js"+Math.random();
- document.body.appendChild(js);
但是,如果采用随机数的话, js文件将永远得不到缓存,每次都必须重新从服务器加载,即使没有任何更改。
大家如果经常上国外网站的话,可以看到他们通常采用这样的方式来解决:
<script src="test.js?ver=113"></script>
其中 ver=113 的 113就是版本号,一般都是采用 CVS 或其他工具生成的开发版本号。
这样真正做到了应该缓存的时候缓存静态文件,当版本有更新的时候从获取最新的版本,并更新缓存。
对于图像 <img src="test.jps?ver=在CVS的版本号"> 来有效利用和更新缓存.