如何加载最新的JavaScript文件在用户每次访问网站[复制]时间(how to load the

2019-10-17 15:21发布

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

我在ASP.NET MVC应用基础和JavaScript文件包含在.csHtml文件。

我需要这使用户不必做一个[Ctrl + F5键】或手动清除缓存和JavaScript文件加载到浏览器每次最新版本。

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

建议的主要方法是使用虚拟paramater而包括文件。 此外,我不什么手动每次我修改js文件时间更改参数。 需要一些例子,如果这可以自动完成。

编辑1:请提供解决方案,这与ASP.NET MVC的前瞻性。

Answer 1:

你想用捆绑和缩小 。 根据您的MVC的版本,执行略有不同。 在最新的版本中,默认情况下使用。

捆绑和缩小将结合,然后再缩小所有的脚本(和样式表)到一个文件(或多个,这取决于你如何使用它),并为他们服务了一个唯一的参数。 任何时候,一个文件在那个特定的捆绑变化(因此用户将需要下载新的文件)的参数自动改变。

对于MVC3,你需要安装微软的Web优化 。

然后在你的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只在某些页面。



Answer 2:

放入文件名的版本号为您的JS文件(如jQuery不会)。 然后,只要你为rev JS文件,你碰到的版本,并更改​​HTML文件,其中包括它。

jQuery的文件命名例如:

jquery-1.8.3.js
jquery-1.9.0.js

这可让您的JS文件本身这确实与网站上的表现帮助设置很长的缓存服务器上。 但是,你在修订版的JS文件的任何时候,观众得到立即使用,因为新命名的文件是由新的HTML文件拉,因为他们不是在浏览器缓存中的新的JS文件。



Answer 3:

您可以通过像这样每个javascript文件URL之后附加随机哈希或数URL参数做缓存无效:

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

由于这个数字每个页面加载的网址将不被缓存的时间是不同的。 更多信息这里 。 教程提供PHP的例子,但如果你知道如何在任何语言创建一个散列或随机数可以将其连接到一个URL,你是好去。



Answer 4:

我个人使用PHP,但我做到这一点的方法是搜索输出缓冲区静态文件,如图片,脚本和样式表(音频,视频,等等),然后从文件系统中检索他们的修改时间并追加其为/t=TIMESTAMP 。 然后我用.htaccess为关闭剥离时间戳,并得到原来的文件名。 这是优于查询字符串,因为许多客户将与查询字符串不缓存文件,并且它也优于版本,因为它通过修改文件自动更新简单。



文章来源: how to load the latest javascript files every time the user visits the website [duplicate]