我们在 1.x 版本中用的是 HTML Renderer,通过 kbone 运行的 DOM 模拟层存在很多的问题,最令人诟病的是数据更新后界面刷新慢。当然问题的并不在于 kbone,而是 MPFlutter 1.x 本身对于 Element Tree 的序列化、反序列化的处理存在天然的缺陷,尽管已经通过 Dirty 和 Diff 等手段优化。
在 2.x 版本中,我们直接抛弃 HTML Renderer 的想法,使用 CanvasKit Renderer。
使用 CanvasKit Renderer 有这几个大前提:
•
微信小程序已支持 WebAssembly 并支持 Brotli 压缩;
•
微信小程序 Canvas 的性能相比最初的版本有质的提升,并支持 WebGL;
•
微信小程序全部分包限制放宽到 20M,足够使用。
Skia 裁剪
Skia 是 Google 开源的 2D 渲染库,凭借良好的跨设备能力,优秀的性能表现,在 Google 多个产品中被使用,包括 Chrome / Flutter / Android / Fuchsia 都有 Skia 的身影。