And*_*rew 15 javascript client node.js socket.io mean-stack
我正在使用MEAN堆栈(mongo,express,angular和node).我每隔几天就会相对频繁地部署到生产中.我担心的是我有时会更改客户端代码和API,我宁愿不必确保API与以前版本的客户端代码的向后兼容性.
在这种情况下,当我推向生产时,确保所有客户重新加载的最有效方法是什么?我已经看过,例如Evernote有一个弹出窗口,上面写着一些内容,请重新加载浏览器以获取最新版本的Evernote.我想做类似的事情...我需要沿着socket.io或sock.js的路径走下去,还是我错过了一些简单的东西,有一种更简单的方法来实现这一点?
更新: AppCache于2015年夏季被弃用,因此以下不再是最佳解决方案.新建议是改为使用服务工作者.但是,服务工作者目前仍然在IE和Safari中使用粗略的(读取:可能没有)支持.
或者,许多构建工具现在无缝地结合缓存清除和文件"版本控制"技术来解决OP问题.WebPack可以说是这个领域的当前领导者.
这可能是使用HTML5的AppCache的一个很好的用例
您可能希望将其中一些步骤自动化到您的部署脚本中,但这里有一些您可能觉得有用的代码可以帮助您入门.
首先,创建您的appcache清单文件.这还允许您在客户端浏览器中缓存资源,直到您明确修改appcache清单文件的日期.
/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:
*
/
Run Code Online (Sandbox Code Playgroud)
在app.appcache中,行上的注释#v20150327.114142
是我们向浏览器指示清单已更改并应重新加载资源的方式.它可以是任何东西,只要文件看起来与以前版本的浏览器不同.在应用程序中部署新代码期间,应修改此行.也可以使用构建ID.
其次,在您要使用appcache的任何页面上,修改标头标签:
<html manifest="/app.appcache"></html>
Run Code Online (Sandbox Code Playgroud)
最后,您需要添加一些Javascript来检查appcache是否有任何更改,如果有,请执行一些操作.这是一个Angular模块.对于这个答案,这是一个香草的例子:
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);
Run Code Online (Sandbox Code Playgroud)
或者,如果AppCache不适合您的情况,更多的贫民区解决方案是创建一个简单的API端点,返回当前构建ID或上次部署日期时间.您的Angular应用程序偶尔会点击此端点并将结果与其内部版本进行比较,如果不同,则重新加载自身.
或者,您可以考虑一个实时重新加载脚本(示例),但是,虽然在开发中非常有用,但我不确定在生产中使用实时/就地重新加载资产是多么好的想法.
归档时间: |
|
查看次数: |
10737 次 |
最近记录: |