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

时间:2013-01-27 03:59:35

标签: javascript jquery asp.net-mvc-3

  

可能重复:
  How do I force the refresh of javascript files in a browser?

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

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

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

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

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

4 个答案:

答案 0 :(得分:1)

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

jQuery文件命名示例:

jquery-1.8.3.js
jquery-1.9.0.js

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

答案 1 :(得分:0)

您可以通过在每个javascript文件网址之后附加随机哈希或数字网址参数来执行缓存清除:

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您想使用Bundling and Minification。根据您的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);
}

这样第一个包就会捆绑.js文件夹中的每个~/Scripts文件。在您的头文件中,您可以像:

一样引用它
<script src="@Microsoft.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Scripts/js")" type="text/javascript"></script>

它将呈现为:

<script src="/Scripts/js?v=-2573834892993289" type="text/javascript"></script>

每当您的.js个文件之一发生变化(或.css)时,参数也会发生变化。

CSS捆绑包的类似实现,以及仅在某些页面上引用randomBundle的情况。