我们目前正在进行私人测试,因此仍然在进行相当快速的更改,尽管显然随着使用量开始增加,我们将放慢这一过程.话虽这么说,我们遇到的一个问题是,在我们用新的JavaScript文件推出更新之后,客户端浏览器仍然使用文件的缓存版本,但他们看不到更新.显然,在支持调用上,我们可以简单地通知他们进行ctrlF5刷新以确保他们从服务器获取最新文件,但最好在此之前处理它.
我们当前的想法是简单地将版本号附加到JavaScript文件的名称上,然后在进行更改时,增加脚本上的版本并更新所有引用.这绝对可以完成工作,但更新每个版本的引用可能会变得很麻烦.
我确信我们不是第一个处理这个问题的人,我想我会把它扔给社区.在更新代码时,如何确保客户更新缓存?如果您使用上述方法,您是否正在使用简化更改的流程?
我读到,当您无法访问Web服务器的标头时,您可以使用以下命令关闭缓存:
<meta http-equiv="Cache-Control" content="no-store" />
Run Code Online (Sandbox Code Playgroud)
但我也读到这在某些版本的IE中不起作用.是否有任何<meta>标签可以关闭所有浏览器中的缓存?
基本设置:Apache 2.4提供的Angular 1.5 SPA由REST api支持,也支持Apache 2.4.
我已经阅读了所有可用的技术,以便在服务器上更改某些应用程序代码后允许SPA更新并更新.
解决方案来自HTTP缓存(HTTP标头)或缓存清除(例如版本控制文件名)技术.所有这些都基于Web浏览器发出请求获取资源并具有一些机制来了解内容是否需要更新或是否可以从缓存提供.
SPA的主要问题是,在初始加载后通常不会对资源进行请求,因为Web应用程序在浏览器中加载得很快,并且只启动对后端的XHR调用来加载数据.在许多情况下,由于长时间不刷新文件的不便,用户不会关闭标签很多天.
最难的问题是index.html
文件(见本文).这个只在您第一次在浏览器中加载应用程序时调用,然后永远不会请求它.只有手动浏览器页面重新加载才能初始化此文件的第二个请求.
所有javascript和css文件在请求后加载index.html
,然后永远不会重新加载.只有新的请求index.html
可以刷新它们.
如果index.html
在初始加载后没有获取请求,那么缓存控制头或缓存清除策略如何允许javascript或css文件在服务器上更改时刷新?
我遇到了这个问题的两种方式:
REST API必须与Web应用程序兼容.如果我在API中引入了重大更改,并且用户没有重新加载页面,则可能会触发离开数据不一致的错误.
由于html文件可以重新加载而javascript或css文件没有这样做,因此可以提供不兼容的html文件(例如缺少CSS类定义或范围引用).
我发现的唯一真正的解决方案是:
但:
我遗漏了每个人如何处理Angular缓存的问题?
我经常更新的Angular应用程序存在问题。
我想避免浏览器缓存,我正在尝试几种替代方法,但是它们都不起作用。
第一件事是我很难测试该解决方案是否有效,因为当我上载新版本时,有时我看到它而不必执行其他操作,而不必刷新页面,而有时候我需要打开控制台并强制刷新清空缓存。
我试图在请求标头中包含Cache-Control:no-cache,如您在图像中所见,但这对我不起作用。
我也尝试过,放入app.component.ts
templateUrl: './app.component.html? v1'
Run Code Online (Sandbox Code Playgroud)
正如我在一些答案中看到的那样,但都没有。
事实是我很绝望,因为当我给出我认为可行的东西时,当我与老板核对时,他不会刷新它:-(,可惜的是,正如我所说的,我不知道该怎么做确实,每次我进入网络时,都要从服务器请求最新版本。
谢谢您的帮助
我只想使用angularjs清除浏览器缓存,每次登录我的应用程序时,浏览器都应该加载新文件.