无论是H5页面发布、还是RN相关的JS bundle发布,处理的情况都差不多。考虑:①已发布的页面的静态性;②如何让用户快速更新到新的页面。
-
版本号概念
- H5:基本没有版本号概念,按页面级(如:活动)发布,不同页面的发布时间不同因此依赖的组件代码不同。
- 类RN(前端维护逻辑,客户端上屏):每个页面加载时都会指定版本号,一般会有一个服务维护每个页面指向的版本号,包含白名单、灰度、下载优先级等功能。
-
已发布的页面(或一个发布过的版本),不允许再被以后更新的组件或各种其他情况修改(可以理解为页面不依赖会动态更新的资源)。
优先保证已发布页面的静态性、安全性,保持原页面逻辑不变。
-
考虑特殊场景:如果有组件需要紧急更新,如何更快地让所有用户加载到不包含旧组件的页面?
- 简化发布流程;白名单、灰度更新等安全保障页面质量,降低紧急更新情况发生。
-
针对H5
-
重新发布
.html
设置不缓存或协商缓存或超短时间强缓存;资源配置超长时间的强缓存。-
搜集改动涉及到的页面 + 页面活跃性筛选(如:pv),针对这些页面重新发布。
优化搜集过程:建立一个 页面活跃度或发布时间排序、活动页依赖组件列表 的数据看板。
-
激进做法(不妥、一定会被滥用、导致线上出现的问题 > 想要解决问题的收益):提供一个高风险能力“依赖某个组件的所有页面,一键全部重新发布”。
-
-
像下面类RN那样考虑游戏的动态更新?
-
-
针对类RN页面
-
发布新版本后,设置这个页面新版本为高下载优先级
需要下载完毕后重进页面才能使用新版本。
-
参考游戏动态更新(考虑:成本-收益)
- 更新下载好后,提示用户并强制用户退出页面(重进自然就会使用新包);
- 热修复:下载补丁包,当前页直接修复不需要重启(类似HMR)。
-
-
若依赖远程组件,则更新远程组件。