每次用户访问网站时如何加载最新的javascript文件

可能重复:
如何在浏览器中强制刷新javascript文件?

我在ASP.NET MVC和javascript文件中的应用程序包含在.csHtml文件中。

我需要这样,以便用户不必执行[Ctrl + F5]或手动清除缓存,并且每次在浏览器中加载最新版本的javascript文件。

如果可以提供一些例子我很感激。

建议的主要技术是在包含文件时使用伪参数。 另外,每次修改js文件时,我都不会手动更改参数。 如果可以自动完成,需要一些示例。

编辑1:请使用ASP.NET MVC预期为此提供解决方案。

您想要使用捆绑和缩小 。 根据您的MVC版本,实现略有不同。 在最新版本中,默认使用它。

捆绑和缩小将把所有脚本(和样式表)组合并缩小为一个文件(或多个,具体取决于您的使用方式),并使用唯一参数为它们提供服务。 只要该特定包中的文件发生更改(因此用户需要下载新文件),该参数就会自动更改。

对于MVC3,您需要安装Microsoft Web Optimization 。

然后在你的global.ascx中,你会做这样的事情并从Application_Start调用它:

 private static void SetupBundling() { var jsBundle = new Bundle("~/Scripts/js", typeof(JsMinify)); jsBundle.AddDirectory("~/Scripts/", "*.js", false); jsBundle.AddDirectory("~/Scripts/anothr-good-folder/", "*.js", false); BundleTable.Bundles.Add(jsBundle); var randomBundle = new Bundle("~/Scripts/random", typeof(JsMinify)); randomBundle.AddFile("~/Scripts/random/main.js"); randomBundle.AddFile("~/Scripts/random/cool.js"); BundleTable.Bundles.Add(randomBundle); var cssBundle = new Bundle("~/Content/css", typeof(CssMinify)); cssBundle.AddDirectory("~/Content/", "*.css", false); BundleTable.Bundles.Add(cssBundle); } 

因此,第一个包将捆绑~/Scripts文件夹中的每个.js文件。 在您的头文件中,您可以像以下一样引用它:

  

它将呈现如下:

  

每当你的一个.js文件改变(或.css )时,参数也会改变。

类似于CSS包的实现,以及如果您只想在某些页面上引用randomBundle

在JS文件的文件名中加上版本号(就像jQuery一样)。 然后,无论何时修改JS文件,都会碰撞版本并更改包含它的HTML文件。

jQuery文件命名示例:

 jquery-1.8.3.js jquery-1.9.0.js 

这使您可以在服务器上为JS文件本身设置非常长的缓存,这对您网站的性能有很大帮助。 但是,无论何时修改JS文件,查看器都会立即获取新的JS文件,因为新命名的文件是由新的HTML文件提取的,因为它们不在浏览器缓存中。

您可以通过在每个javascript文件URL之后附加随机哈希或数字URL参数来执行缓存清除,如下所示:

 http://www.bestsiteonearth.yes/cool_javascript.js?cache_buster=2187sasas1289012890aohkjaiosa0990 

由于每次加载页面时该数字都不同,因此不会缓存URL。 更多信息在这里 。 教程提供了PHP示例,但是如果您知道如何使用任何语言创建哈希或随机数并且可以将其附加到您可以使用的URL。

我个人使用PHP,但我这样做的方法是在输出缓冲区中搜索静态文件,如图像,脚本和样式表(以及音频,video等),然后从文件系统中检索它们的修改时间并将其附加为/t=TIMESTAMP 。 然后我使用.htaccess去除时间戳并获取原始文件名。 这比查询字符串更受欢迎,因为许多客户端不会使用查询字符串缓存文件,并且它也优于版本控制,因为它只是通过修改文件自动更新。