gpt4 book ai didi

javascript - 部署后如何强制客户端重新加载?

转载 作者:IT老高 更新时间:2023-10-28 23:08:24 25 4
gpt4 key购买 nike

我正在使用 MEAN 堆栈(mongo、express、angular 和 node)。我相对频繁地部署到生产环境……每隔几天。我担心的是我有时会更改客户端代码和 API,我宁愿不必确保 API 与以前版本的客户端代码的向后兼容性。

在这种情况下,当我推送到生产环境时,确保所有客户端重新加载的最有效方法是什么?例如,我看到 Evernote 有一个弹出窗口,上面写着请重新加载浏览器以获取最新版本的 Evernote。我想做一些类似的事情...我需要走 socket.io 或 sock.js 的道路还是我错过了一些简单的事情并且有更简单的方法来实现这一点?

最佳答案

更新:AppCache 已于 2015 年夏季弃用,因此以下不再是最佳解决方案。新的建议是使用 Service Workers反而。然而,Service Worker 目前仍在试验性地支持 IE 和 Safari(阅读:可能没有)。

另外,许多构建工具现在无缝地结合了缓存清除和文件“版本控制”技术来解决 OP 问题。 WebPack可以说是该领域的当前领导者。


这可能是使用 HTML5 的 AppCache 的一个很好的用例

您可能希望将其中一些步骤自动化到您的部署脚本中,但这里有一些代码可能对您有所帮助。

首先,创建您的 appcache list 文件。这也将允许您在客户端浏览器中缓存资源,直到您明确修改 appcache list 文件的日期。

/app.appcache:

CACHE MANIFEST

#v20150327.114142

CACHE:
/appcache.js
/an/image.jpg
/a/javascript/file.js
http://some.resource.com/a/css/file.css

NETWORK:
*
/

app.appcache 中,#v20150327.114142 行的注释是我们向浏览器指示 list 已更改并且应重新加载资源的方式。它可以是任何东西,真的,只要文件在浏览器中看起来与以前的版本不同。在应用程序中部署新代码期间,应修改此行。也可以使用构建 ID。

其次,在任何你想使用appcache的页面上,修改header标签如下:

<html manifest="/app.appcache"></html>

最后,您需要添加一些 Javascript 来检查 appcache 是否有任何更改,如果有,请对其进行处理。这是 Angular module .对于这个答案,这里有一个普通的例子:

appcache.js:

window.applicationCache.addEventListener('updateready', function(e) {
if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
// Browser downloaded a new app cache.
// Swap it in and reload the page to get the latest hotness.
window.applicationCache.swapCache();
if (confirm('A new version of the application is available. Would you like to load it?')) {
window.location.reload();
}
}
else {
// Manifest didn't changed. Don't do anything.
}
}, false);

或者,如果 AppCache 不适用于您的情况,一个更集中的解决方案是创建一个简单的 API 端点,该端点返回当前构建 ID 或上次部署日期时间。您的 Angular 应用程序偶尔会遇到此端点并将结果与​​其内部版本进行比较,如果不同,则重新加载自身。

或者,您可以考虑使用实时重新加载脚本 (example),但是,虽然对开发很有帮助,但我不确定使用实时/就地重新加载 Assets 的想法有多好正在生产中。

关于javascript - 部署后如何强制客户端重新加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29292051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com