可能重复:
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预期为此提供解决方案。
答案 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
的情况。