Angularjs 部署ASP.NETMVC时,角度应用程序下载文件发生更改
我有一个ASP.net应用程序,它使用AngularJs、Javascript和HTML5。 问题是,每次我部署浏览器时,可能会缓存一些文件,这会导致错误,因为用户没有获得最新的Html和javascript文件 我知道HTML5有一个清单文件,可以强制下载文件,但是当文件发生实际更改时,有没有更有效的方法来下载文件 我知道bundles只对Javascript文件而不是HTML文件执行此操作 我不确定它是否与angularjs相关,因为许多HTML文件都是使用ng视图和模板交换的 任何线索都将不胜感激 我正在尝试使用捆绑包,但不确定这是否适用于使用AngularJs的html文件 谢谢更新的答案 我不确定它是否与许多HTML相关 使用ng视图和模板交换文件 捆绑减少了对服务器的请求数量。对于AngularJS,您可以在构建时使用一种技术将模板与javascript内联。这是一个基于Grunt构建系统的插件。 现在您可以为JS使用bundle了 其他选项围绕浏览器缓存,甚至不用担心绑定模板。 基于Grunt的构建具有良好的缓存破坏机制。进一步描述。 我建议您查看缓存选项和下面的一些要点。缓存选项在web服务器级别设置 经验法则 永远不要缓存第一页(index.html)或缓存修改后的标题。 缓存从主页解析的每个资源 用于引用的资源 使用基于Grunt的构建和插件 此插件的工作方式是,它将计算HTML中引用的每个资源的哈希值,并使用file.HASH重命名该文件,确保其引用也被更新。 它也足够聪明,可以忽略基于CDN的远程URL 如果客户端甚至不向您发送请求,您就无法从服务器执行任何操作Angularjs 部署ASP.NETMVC时,角度应用程序下载文件发生更改,angularjs,asp.net-mvc-4,caching,bundle,browser-cache,Angularjs,Asp.net Mvc 4,Caching,Bundle,Browser Cache,我有一个ASP.net应用程序,它使用AngularJs、Javascript和HTML5。 问题是,每次我部署浏览器时,可能会缓存一些文件,这会导致错误,因为用户没有获得最新的Html和javascript文件 我知道HTML5有一个清单文件,可以强制下载文件,但是当文件发生实际更改时,有没有更有效的方法来下载文件 我知道bundles只对Javascript文件而不是HTML文件执行此操作 我不确定它是否与angularjs相关,因为许多HTML文件都是使用ng视图和模板交换的 任何线索都将
HTML5缓存清单不能在所有浏览器上运行(即,您可以将web.config配置为在asp.net应用程序中禁用缓存)
<system.webServer>
<staticContent>
<clientCache cacheControlMode="DisableCache" />
</staticContent>
</system.webServer>
一般来说,为了控制包含的web资源
js/css/…
缓存行为,我建议管理某种类型的版本id并将其附加到include元素中
例如:
或
甚至
部署新应用程序后,浏览器将忽略预览缓存文件并使用较新的文件
如果您使用源代码管理(git/svn/…),您可以使用最新的提交id作为版本id。否则,请手动管理此版本id(增量编号)
如果您使用的是构建服务器,您可以在构建脚本中添加一条规则,为您自动执行此过程。否,html文件不捆绑在ASP.NET MVC中。这可以通过js或css完成,但html文件通常需要通过URL直接寻址 在新版本的模板中加载Angular的一种简单方法是,只要在Angular中使用模板URL的任何位置添加一个唯一的查询字符串参数:
module.directive('myDirective', function() {
return {
// add querystring with deploy date, or whatever
templateUrl: '/Path/Template.html' + '?noCache=08102014',
controller: controller
};
});
当然,一个更干净、更易于维护的解决方案是将模板编译成javascript字符串,然后可以像Angular应用程序的任何其他部分一样捆绑在一起。这将是这种方法的一个候选方案。在开发模式下,您的浏览器应该能够禁用javascript缓存(在大多数浏览器中为F12)。当您请求文件包(bundle.js)时,您可以将其作为“bundle.js?20140810”获取,更新后您可以更改日期时间戳。