跨端实现方案 | 青训营笔记

116 阅读3分钟

这是我参与「第五届青训营」笔记创作活动的第 10 天

了解跨端开发

跨端方案的目标

  1. 研发效率高:学习成本低,多端一致性高
  2. 用户体验好:稳定性高,性能体验好
  3. 动态化:支持动态化下发,满足日益增长的业务需求

原生开发的痛点

  1. 各端功能几乎一致,但需要单独配置研发人员
  2. 开发、维护成本较高
  3. 安卓、IOS发版周期长

跨端技术方案

Hybrid

基于 WebView 渲染,通过 JavaScript Bridge 将一部分系统能力开放给 JavaScript 进行调用。相当于在原生层上独立运行一个Web层。

优势:对前端开发者比较友好,可以低成本实现跨端,同时保留部分原生的能力。 缺点:浏览器内核渲染独立于系统组件,原生体验糟糕,性能不好。

原生渲染方案

使用JS开发,通过中间层桥接后使用原生组件渲染UI界面。

React Native 的思路是最大化地复用前端的生态和 Native 的生态,和 WebView 容器的最大区别在于 View 的渲染体系。React Native 抛弃了低效的浏览器内核渲染,转而使用自己的DSL生成中间格式,然后映射到对应的平台,渲染成平台的组件。

自渲染方案

利用 Skia 重新实现渲染管线,不依赖原生组件

常用于自渲染方案的框架是 Flutter ,这是谷歌在世界移动大会公布的开源应用开发框架,通过一套代码库就可以构建原生平台编译的多平台应用

小程序方案

使用小程序 DSL + JS 开发,通过中间层桥接后调用原生能力,使用webview来渲染UI界面

一个小程序的运行环境会被分为两个部分,分别是:渲染层和逻辑层,一些HTML的模板会在渲染层中工作,而js代码会在逻辑层中工作,因此小程序的渲染层和逻辑层分别由2个线程管理:渲染层的界面使用了webview进行渲染,逻辑层使用JSC线程来运行JS脚本

总结

当前的跨端生态还没有出现一个既能照顾到性能,也能方便多端快捷开发的方案,所以当遇到跨端需求时,从四种方案中选择较能满足需求的方案实现即可。但是相信在不远的未来,肯定会有一个强大的跨端方案的产生。

技术方案视图层逻辑层优点缺点
hybridwebviewwebview JS thread1. 开发成本低 2. CSS全集 3. 一致性好性能中等
原生渲染原生组件JS Engine1. 性能好1. CSS子集 2. 一致性一般
自渲染SkiaDart VM1. 性能最好 2. 一致性好1. CSS子集 2. Dart生态一般 3. 开发成本较高
小程序webview+原生组件JS Engine1. 开发成本低 2. CSS全集 3. 一致性好1. 性能较好