Skip to content

Latest commit

 

History

History
35 lines (23 loc) · 2.43 KB

File metadata and controls

35 lines (23 loc) · 2.43 KB

页面发布更新

无论是H5页面发布、还是RN相关的JS bundle发布,处理的情况都差不多。考虑:①已发布的页面的静态性;②如何让用户快速更新到新的页面。

  • 版本号概念

    1. H5:基本没有版本号概念,按页面级(如:活动)发布,不同页面的发布时间不同因此依赖的组件代码不同。
    2. 类RN(前端维护逻辑,客户端上屏):每个页面加载时都会指定版本号,一般会有一个服务维护每个页面指向的版本号,包含白名单、灰度、下载优先级等功能。
  1. 已发布的页面(或一个发布过的版本),不允许再被以后更新的组件或各种其他情况修改(可以理解为页面不依赖会动态更新的资源)。

    优先保证已发布页面的静态性、安全性,保持原页面逻辑不变。

  2. 考虑特殊场景:如果有组件需要紧急更新,如何更快地让所有用户加载到不包含旧组件的页面?

    • 简化发布流程;白名单、灰度更新等安全保障页面质量,降低紧急更新情况发生。
    1. 针对H5

      1. 重新发布

        .html设置不缓存或协商缓存或超短时间强缓存;资源配置超长时间的强缓存。

        1. 搜集改动涉及到的页面 + 页面活跃性筛选(如:pv),针对这些页面重新发布。

          优化搜集过程:建立一个 页面活跃度或发布时间排序、活动页依赖组件列表 的数据看板。

        2. 激进做法(不妥、一定会被滥用、导致线上出现的问题 > 想要解决问题的收益):提供一个高风险能力“依赖某个组件的所有页面,一键全部重新发布”。

      2. 像下面类RN那样考虑游戏的动态更新?

    2. 针对类RN页面

      1. 发布新版本后,设置这个页面新版本为高下载优先级

        需要下载完毕后重进页面才能使用新版本。

      2. 参考游戏动态更新(考虑:成本-收益)

        1. 更新下载好后,提示用户并强制用户退出页面(重进自然就会使用新包);
        2. 热修复:下载补丁包,当前页直接修复不需要重启(类似HMR)。
    3. 若依赖远程组件,则更新远程组件。