hybrid app中h5首屏渲染优化小思考 - NSR

前言

这是今年GMTC北京场之后回来分享的一个ppt

背景&场景

  1. app原⽣开发投⼊资源成本⾼
  2. iOS审核难
  3. 需要版本升级才可以使新功能触达到⽤户

以上种种问题引发了 Hybrid APP 出现,且h5页面越来越多,从补充式到基本替代

当占有率提高了,该考虑 白屏 的问题了

渲染的方式&过程

渲染过程

优化方向

native耗时,主要体现在webview壳子的准备上

  1. 提前准备WebView
  2. 复用WebView

webview耗时,主要体现在前端资源的准备上

  1. CDN
  2. 分包,只加载核⼼的
  3. ⾸屏拆接⼝
  4. 接⼝数据缓存,对于⽐较稳定的⻚⾯进来,先展示上次的数据,再请求接⼝做替换
  5. 接⼝PreFetch
  6. 甚⾄前端资源离线化,file://

渲染耗时

渲染耗时

前端渲染方式

  1. CSR
  2. SSR

    麻烦,要伸⼿到服务端,项⽬也多,并且不能对标Native渲染

  3. PWA

    3.1 http cache;https;

    3.2 启动保活(分派进程,加载SW.js,启动线程)

    3.3 在不同启动场景(浏览器重启,后台,锁屏…)

    3.4 耗时100 - 1000ms

    3.5 是⼀种优化,不是⽅式,不同维度

  4. …?

前端渲染新方式

借助native的能⼒,模仿SSR的⼀种⽅式,也具备CSR的优点

模板 + 数据 = 页面

  1. 对于⾼流量⻚⾯,⽐如⻋辆详情⻚,制作模板,结构拿来复⽤
  2. 甚⾄数据也可以借助native来prefetch
  3. 把⽣成html string的动作交给native

NSR - 模板

对native的诉求

  1. 凡有native参与的动作,都需要考虑动态性,模板可以内置or下载
  2. data prefetch的策略,提⾼命中率
  3. 在要渲染的h5⻚⾯中,约定占位符标记,native render后替换
  4. 最⼩化模板,可以抽离出最⼩化的没有vdom但保留最⼩组件周期的库来⽀持渲染
  5. ⾸屏仅使⽤兼容ES5的语,避免引⼊polyfill,⾮⾸屏不限制
  6. ⾸屏只做渲染,所包含事件绑定、统计上报等逻辑全部移到异步chunk中

总结

三种渲染方式的区别

渲染区别

预渲染的延伸

预渲染延伸

最后

整个优化过程,论写代码的话基本是native的同学在写,但是思考的角度却是从前端的角度出发的。