我正在构建一个react应用程序,它是一个单页应用程序,托管在Amazon S3上。
有时,我会同时部署后端和前端的更改,我需要所有浏览器会话开始运行新版本,或者至少是那些在最后一个前端部署之后开始的会话。
问题是,我的许多用户仍在他们的手机上运行旧版前端版本长达几周,这与后端的新版本不兼容,但其中一些用户在下一次会话开始时就可以获得更新。
由于我使用Webpack构建应用程序,它会生成包含哈希值的捆绑包,而定义应该使用哪些捆绑包的
想法是用户的浏览器可以缓存所有内容,除了他们需要的第一个文件。计划很好,但是当我用更新的版本替换
是否有权威的指南或解决此问题的方法?
我也知道PWA应该可以离线工作,因此必须具有缓存以重复使用的功能,但这个想法对我执行大规模和即时更新也没有帮助,对吧?
我有什么最好的选择来解决这个问题?
有时,我会同时部署后端和前端的更改,我需要所有浏览器会话开始运行新版本,或者至少是那些在最后一个前端部署之后开始的会话。
问题是,我的许多用户仍在他们的手机上运行旧版前端版本长达几周,这与后端的新版本不兼容,但其中一些用户在下一次会话开始时就可以获得更新。
由于我使用Webpack构建应用程序,它会生成包含哈希值的捆绑包,而定义应该使用哪些捆绑包的
index.html
文件,则上传了以下缓存控制属性:"no-cache, no-store, must-revalidate"
。服务工作者文件具有相同的缓存策略。想法是用户的浏览器可以缓存所有内容,除了他们需要的第一个文件。计划很好,但是当我用更新的版本替换
index.html
文件时,我的用户没有重新获取此文件,当他们重新启动应用程序时。是否有权威的指南或解决此问题的方法?
我也知道PWA应该可以离线工作,因此必须具有缓存以重复使用的功能,但这个想法对我执行大规模和即时更新也没有帮助,对吧?
我有什么最好的选择来解决这个问题?
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
- Leonardo Valverde