2011-11-22 70 views
4

我一直在使用相当多的JQuery,KnockoutJS和其他JavaScript的东西,我正在构建一个Web应用程序。大多数JS都在它自己的独立文件中。我遇到的问题是浏览器缓存这些文件,所以当我推送更改时,用户在获取更新的文件之前必须刷新几次。最近,我对通过一些数据的方式进行了重大改变,文件的缓存版本导致了一些错误和更糟的情况,一些数据被擦除。如何在浏览器中强制刷新JavaScript文件?

人们如何处理这个问题?有没有办法强制刷新文件?

回答

6

不同的开发者会做不同的事情。官方的方式是玩nicley并使用HTTP头。谷歌的HTTP头和缓存问题,你应该没问题,继续以自己的方式。

但是,有些浏览器只是忽略你,所以如果即时通讯在实时环境中开发,我使用版本号来确保每个人都获得最新的文件。所以你可能会称你的原始“something.js?v = 1.0”。做一个小小的改变,然后将其改为“?v = 1.1”..你明白了。因为链接不同,所以在大多数情况下它应该完全忽略缓存。

我倾向于使用这两种方法只是要为确保尽可能

+0

请注意,使用?并不是所有的浏览器都会缓存,基本上没有该文件的缓存。理想情况下,您可以在每次更改时将js文件重命名为该文件,以便在文件未更改时支持缓存,并在缓存失效时将其无效。 –

5

我知道强制所有浏览器忽略缓存的唯一方法是向脚本标记添加某种唯一标识符。

有一两件事你可以做的是通过GET PARAM添加时间戳或版本号并不意味着任何东西到服务器,或者只是改变脚本本身的文件名,如果这是可行的:

<script type="text/javascript" src="myscript.js?version=2.0"></script> 
<script type="text/javascript" src="myscript.js?ts=9342038423048"></script> 
<script type="text/javascript" src="myscript.2.0.js"></script> 

如果JS文件已经发生重大变化,尽管大多数浏览器应该足够聪明以获取新的副本......如果您有权访问服务器(缓存过期等),还可以调整您的响应标头

1

麻烦的是,当你执行对同一个URL请求GET浏览器会缓存。正如其他人所说,你可以附加一个时间戳作为查询参数。这会在URL更改时强制请求新的GET请求。

对于Ajax而言,有一个jQuery.ajax parameter,这是否对你

cacheBoolean默认:true,为的dataType '脚本' 和 'JSONP'

false如果设置为false,它会强制请求的页面不被 浏览器缓存。将缓存设置为false还会将查询字符串参数 “_ = [TIMESTAMP]”附加到URL。

使用AJAX时,您应该使用此方法。否则,追加你自己的时间戳或修改标题(这应该在现代浏览器中工作)。

相关问题