跨端技术概述| 青训营笔记

286 阅读3分钟

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

重点内容:

  1. 跨端背景
  2. 跨端技术方案介绍
    • hybrid方案
    • 原生渲染方案
    • 自渲染方案
    • 小程序方案

详细知识点:

一、跨端背景

跨PC端(Windows,Mac),移动端(安卓,iOS),web端,IoT设备(车载设备,手表)等。跨端技术是为了能够用最少的开发成本来达到最好的效果,而不是每个端都需要一套单独的人力来进行维护。

常见痛点

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

理想跨端技术方案目标

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

二、跨端技术方案介绍

1. hybrid方案

基于WebView渲染,通过JS Bridge把一部分系统能力开放给JS调用。依赖 WebView 进行渲染,在功能和性能上有所妥协。

WebView容器的工作原理是基于Web技术来实现界面和功能,通过将原生的接口封装、暴露给JS调用,JS编写的页面可以运行再系统自带的WebView中。

优点:

  • 开发成本较低,可以跨平台,调试方便,维护成本低,功能可复用。
  • CSS全集,一致性好

缺点:

  • 跨端能力受限
  • 无法保证原生体验,渲染效果会差,性能中等

2. 原生渲染方案

使用JS开发,通过中间层桥接后使用原生组件来渲染UI界面。通过中间层把前端框架转化为原生控件来渲染 UI 界面,例如 React Native、Weex等,这种方案多了一层转译层性能上有损耗,数据通信也有性能瓶颈。

在React Native中,使用React组件通过JS来调用视图。在运行时,React Native为这些组件创建相应的Android和iOS试图。由于React Native组件就是对原生视图的封装,因此使用React Native编写的应用外观、感觉和性能与其他原生应用一样。这些平台支持的组件称为原生组件。

优点:

  • 性能好

缺点:

  • CSS子集,一致性一般

3. 自渲染方案

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

Flutter 是 Google 在 2015 年开源的 UI 框架,能帮助开发者通过一套代码库高效地构建出 iOS 和 Android 上高质量的原生应用,还支持 Web、桌面和嵌入式平台开发。Flutter 使用 Skia 将界面渲染到平台提供的画布上,不需调整即可迁移到其他平台。

优点:

  • 性能最好,一致性好

缺点:

  • CSS子集
  • Dart生态一般
  • 开发成本较高

4. 小程序方案

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

小程序运行环节分为渲染层和逻辑层,其中ttml模板和ttss样式工作在渲染层,js脚本工作在逻辑层。

优点:

  • 开发成本低
  • CSS全集,一致性好

缺点:

  • 性能较好

参考

Flutter 渲染浅析