前端学习-跨平台、跨端方案总结

826 阅读3分钟

一、什么是跨平台:

跨平台指的是跨操作系统,由于计算机底层cpu的指令和架构不同,上层的操作系统不同,导致一个平台的可执行文件在另一个平台上不可运行。

有哪些平台

安卓、mac、ios、windows、linux、harmonyOS

引起的问题:

  • 多平台开发如何保证功能完全一致
  • 多平台开发需要耗费多出的人力,成本增大

一些跨平台方案:

  • 浏览器
  • docker
  • node、deno
  • jvm
  • electron

跨平台方案的缺点

  • 中间都隔了一个容器层,相比调用系统api性能下降
  • 多平台一致性
    • 各个平台原生 api 命名、设计不同,如何设计出一套合理的api
    • 原生 api 提供的能力各不相同,如何兼容不同平台的 api
    • 如果容器没有提供相应能力,想要扩展能力时有难度,需要 js 引擎的 bridge、 jvm 的 jni、node 的 c++ addon 等为这个容器扩展能力的方式

二、什么是跨端

跨端是指跨客户端,跨端的概念更侧重于让前端代码能够在不同类型的终端设备上运行。

客户端有逻辑、有界面,跨端主要分为逻辑跨端和渲染跨端。

有哪些端

桌面浏览器、移动浏览器、原生移动应用(iOS 和 Android)以及其他智能设备(如智能手表等)

一些跨端方案:

  • react native
  • weex
  • flutter
  • kraken
  • 各家自研的跨端引擎等
1. react native

react native 的逻辑跨端基于 js 引擎 通过 bridge 来与原生 api 通信。

渲染跨端是通过分别实现 ios 和安卓组件的方式来实现,样式采用了 yoga 实现多端布局。

image.png

2. weex

一次编写,可在web、安卓、ios 运行。(已停止维护)

与 react native 架构类似,不过上层对接的框架为 Vue。

image.png

3. flutter

可以通过一套代码,支持iOS、Android、Windows/MAC/Linux等多个平台。它最大的特点是渲染不是基于操作系统的组件,而是直接基于绘图库(skia)来绘制的,更像是 canvas 绘制,将 UI 直接绘制出来,flutter 是在状态变更时重新构建 Widget Tree,Flutter 的渲染引擎在将 Widget Tree 转化成渲染的 Render Tree,最后交给操作系统调用 GPU 去渲染。

逻辑的跨端也不是基于 js 引擎,而是自研的 dart vm 来跨端,Dart 和 native 之间仍然存在一个接口,可以进行数据编码和解码,这可能比 JavaScript bridge 快好几个数量级。

image.png

4. uniapp
  • web模式,由于uniapp采用vue语法作为DSL编译到web基本没有任何难度
  • html plus模式,就是先走的web模式然后放在一个特殊的app里面,变成套壳app
  • 小程序模式,这个部分是uniapp自研的,由一个静态编译器把vue模板翻译成小程序的模板,有点技术含量
  • weex模式,weex本身支持用vue开发跨端应用,这个模式就是套壳weex

知识点

js bridge

  • js 调用 native:
  • 请求拦截
  • 弹窗拦截
  • 注入 js 方法
  • native 调用 js:
  • 直接执行 js 代码

参考文章

写给前端的跨平台方案、跨端引擎的本质

ReactJS到React-Native,架构原理概述

跨端跨平台Hybrid开发Tips

深入了解 Weex