确保用户在更新后获得网站最新版本的正确方法

时间:2018-09-07 07:56:01

标签: javascript browser-cache devops

每次我将更新部署到我们的Web应用程序时,客户都会遇到一些问题,即他们的浏览器无法识别到index.html已更改,并且由于.js文件的名称已更改,因此它们会出错。大概是因为它们的index.html仍指向不再存在的旧javascript文件。

什么是确保用户在系统更新时始终获得最新版本的正确方法。

我们有一个HTML5 + AngularJS Web应用程序。它使用WebPack将供应商和应用javascript捆绑为两个js文件。这些文件包含一个哈希名称,以确保它们在发布后有所不同。

其他一些信息

  • 我永远无法在本地复制此问题(这意味着在调试中,在我们的登台站点或生产站点上)
  • 我们使用CloudFlare,但在发布后清除整个缓存
  • 我们在JS中提供了一种机制,可以每5分钟检查一次页面加载,以查看我们的API版本是否已更改,如果更改了,请显示“请刷新您的浏览器”消息。点击运行window.location.reload(true);
  • 我们的后端是IIS

1 个答案:

答案 0 :(得分:1)

如果您需要用户在更新文件后立即加载您的网站时选择最新的index.html,请使index.html不可缓存。这将意味着不允许浏览器,CloudFlare和任何中间代理对其进行缓存,并且始终会从您的规范服务器提供一个文件。

自然,这会对流量和延迟产生影响(对您和他们而言),但是如果这确实是您的要求,那么我看不到任何其他选择。

对此有一些旋转。如果index.html确实很大并且很重要,则可能不是script本身不能缓存,您可以插入另一个资源(一个写有正确的index.html标签的小JavaScript文件)。对其进行缓存,等等。但是,如果您需要立即提取更改,则需要一个不可缓存的资源来标识更改。