关于浏览器处理新加入的JS,CSS方式原理

浏览器加载JS和CSS表面上看起来是很清楚的顺序加载,可是其中还是有很多的莫名其妙的东西。

浏览器缓存!!!!

我们是做产品的,采用B/S结构,使用了大量的JS和CSS。

每当产品出现Bug,或者升级的时候就会给客户发一个Patch(包含了JS,CSS,IMG,JAVA等等)

然后客户重启服务.

很沮丧!!

由于浏览器的缓存问题(我猜是)
导致了原有的(但是有修改)JS和CSS还是加载的旧的代码,没有把新打入的文件加载上,要强制的刷新,才会载入新的文件。

甚至有时候不去加载新的文件,旧的都不加载了。

CSS更是,导致的页面面目全非。

请问,大家碰见过这种问题吗?
还有,如何能让浏览器主动加载新的文件呢,别说改文件名哦!
最好也别不让用户开启缓存,由于加载的东西很多,要是有缓存还是很有用的。
特别是打完patch后,第一次重启,一定会出错,如何解决呢,帮解决了给高分哦!
[b]问题补充:[/b]
[quote]
而liuqiu的做法,导致整个页面不缓存,感觉划不来吧。

[/quote]

的确,如果强制不允许缓存是划不来的,因为加载的JS和CSS很多,缓存还是能很好的提高访问效率的;
[code="java"]
<br> [/code]</p> <p>这种方法每次后面的字符串是不同的,问一下,那是去找缓存还是去下载新的啊?<br> 还是只在打patch时候新的文件才去加这个呢?</p>

[quote]浏览器缓存!!!![/quote]
你就让它不能缓存呗,由于你新部署的js,css文件和先前的文件名一样,所以浏览器将其缓存了。
可以这样解决:

" 你用随机数可以,或者基于当前服务器时间也可以,随你。 这样的话,浏览器每一次请求web服务器,就会发现js,css等文件如之前是不同的,这样的话就会重新请求一下服务器去下载这个新的js,css文件。 在Rails中就是这么处理的,你现在打开javaeye的源代码看一下: [code="html"] <link href="http://www.iteye.com/stylesheets/ask.css?1227621142" media="screen" rel="stylesheet" type="text/css" /> <script src="http://www.iteye.com/javascripts/application.js?1219629801" type="text/javascript">

[/code]

而liuqiu的做法,导致整个页面不缓存,感觉划不来吧。

估计侬是做java的,rails中不会有这种问题。

jsp参考
response.setHeader("Pragma","No-Cache");
response.setHeader("Cache-Control","No-Cache");
response.setDateHeader("Expires", 0);

[quote]这种方法每次后面的字符串是不同的,问一下,那是去找缓存还是去下载新的啊?
还是只在打patch时候新的文件才去加这个呢? [/quote]
是到web服务器上去下载新的文件。