如何解决缓存提供的javascript文件的问题?

如何解决缓存提供的javascript文件的问题?,javascript,jquery,Javascript,Jquery,当服务器端代码更新(与JavaScript相关)时,旧的JavaScript文件将从缓存中提供 我需要一个解决方案,将旧的JavaScript文件更新为新版本。更新服务器上的文件后,浏览器缓存(与JavaScript相关)需要失效 我有以下解决这个问题的方法 var randomnumber=Math.floor(Math.random()*10000); var scriptfile='http://www.whatever.com/myjs.js?rnd='+randnumber; 但我

当服务器端代码更新(与JavaScript相关)时,旧的JavaScript文件将从缓存中提供

我需要一个解决方案,将旧的JavaScript文件更新为新版本。更新服务器上的文件后,浏览器缓存(与JavaScript相关)需要失效

我有以下解决这个问题的方法

var randomnumber=Math.floor(Math.random()*10000);

var scriptfile='http://www.whatever.com/myjs.js?rnd='+randnumber;

但我只需要在JavaScript文件上有更新时清除缓存,而不是每次重新加载页面时。大多数站点(包括堆栈溢出)都使用版本控制系统中的版本号:

var scriptfile='http://www.whatever.com/myjs.js?rnd='+revision_number;
每当修订更改时,浏览器都会指向一个“新”JavaScript文件

您也可以手动执行此操作,方法是在某个中心位置指定一个版本号,然后将该版本号添加到每个脚本调用中。更新JavaScript的一部分时,只需增加版本号

第三种方法是检查所包含的JavaScript文件的“上次修改”时间,并从中构建时间戳:

var scriptfile='http://www.whatever.com/myjs.js?version=20100803';

但是,这需要服务器端脚本,并且在每个页面请求上执行的成本可能太高。

使用版本号或更新时间戳,而不是使用随机数,因此:

var script = 'http://mysite.com/the_script.js?2010-08-02';

// or

var script = 'http://mysite.com/the_script.js?v1.20';
如果不想手动更新,可以使用
make
脚本搜索并用版本号替换标记:

var script = 'http://mysite.com/the_script.js?{{script_update_date}}';

// have a shell script find and replace the above {{ }} tag with the date or such 
// when deploying to production

或者,如果您的版本控制系统使用它(如SVN),您可以将其替换为修订号,以便在签入新脚本时进行更新。

@Pekka和Jesse Dhillon-非常感谢您的建议