likes
comments
collection
share

如何选择移动端/桌面端跨平台方案

作者站长头像
站长
· 阅读数 21

跨平台开发优势

一套代码,多端运行(iOS、Andriod、MacOS、Windows、Linux、Web、小程序...)。

增加业务代码的复用率,减少多个平台适配的工作量,从而降低开发成本, 带来直接的经济效益

在提高业务专注度的同时,为用户提供一致的用户体验,达到多快好省效果。

本文主要探讨如下跨平台方案

如何选择移动端/桌面端跨平台方案

  1. Flutter 自带渲染引擎,提供画布达到从业务逻辑到功能呈现的多端高度一致的渲染体验。
  2. Web开发+原生渲染 采用类Web标准进行开发,运行时把绘制和渲染交由原生系统接管
    • React Native
    • Weex
  3. Web开发+Web渲染 基于Web相关技术, 通过Web浏览器组件来实现界面及功能
    • Ionic
    • 微信小程序
    • Electron
  4. C++ 利用高性能可移植的C++语言, 一次编码多端编译来实现跨平台开发, 适用于核心平台是桌面端的企业
    • 原生UI + C++
    • QT + C++

各个跨平台方案对比

跨平台方案FlutterWeb技术+原生渲染Web技术+Web渲染C++
性能一般
开发效率一般
社区生态活跃一般活跃一般

Flutter

Flutter是Google的移动UI框架,可以快速在iOS/Android/PC上构建高质量高性能原生用户界面App。

如何选择移动端/桌面端跨平台方案

渲染引擎依靠跨平台的Skia图形库来实现,Skia引擎使用Dart构建抽象的视图结构然后加工成GPU数据,交由OpenGL最终提供给GPU渲染,最大程度上保证App在不同平台、不同设备上的体验一致性。

支持JIT(Just-in-Time,即时编译)和AOT(Ahead-of-Time,预编译), 兼顾开发效率和运行效率

缺点:

  • 桌面端功能不够完善, 相信随着后面的迭代会进一步增强

Web开发+原生渲染

裁剪了Web标准,保留了构建移动端页面必要的Web标准,使用JavaScript开发保证了便捷的前端开发体验;

如何选择移动端/桌面端跨平台方案

放弃了浏览器控件渲染,使用原生UI组件代替核心的渲染引擎,仅保持必要的基本控件渲染能力,从而使得渲染过程更加简化,也保证了良好的渲染性能

React NativeWeex是这种方案的佼佼者。

Web开发+Web渲染

使用Web开发+WebView/Chromium加载网页

JS Bridge(桥): H5与原生代码交互协议,将部分原生系统能力暴露给H5,从而扩展H5的能力。

既有原生代码也有Web代码,因此被称为Hybrid开发模式。由于H5代码只需要开发一次,就能同时在多个系统运行,大大降低了开发成本。

如何选择移动端/桌面端跨平台方案

采用了Web开发技术,社区资源丰富。

浏览器加载H5页面过程

  1. 加载H5页面的HTML主文档;
  2. 如果遇到CSS文件,浏览器另外发出一个请求去获取;
  3. 遇到图片资源,浏览器也会另外发出一个请求去获取。
  4. 遇到JavaScript文件,由于JavaScript代码可能会修改DOM树,因此HTML文档会挂起渲染(加载解析渲染同步)的线程,等到JavaScript文件加载解析并执行完毕,才可以恢复HTML文档的渲染线程
  5. JavaScript代码中有用到CSS文件中的属性样式,于是阻塞,等待CSS加载完毕才能恢复执行。

加载、解析和渲染过程是耗时操作, 使得这种方案性能很差

原生UI + C++

利用高性能可移植的C++语言, 一次编码多端编译来实现跨平台开发

一次编码, 使用GCC/Clang编译成iOS/mac下的dylib,Android/Linux下的so,win下的dll

如何选择移动端/桌面端跨平台方案 C++实现核心的网络+数据存储+加解密+核心业务+接口定义, 所以能做到各个平台通用

各个平台基于C++定义的接口开发自己的UI, 所以不存在兼容性问题

C++ 是桌面端开发最重要的语言, Windows/Linux官方语言就是C++, MacOS开发中C++也是很重要的语言

缺点:

  • 学习难度高:C++ 语法和概念相对复杂,需要一定的学习和实践经验。
  • 开发调试难度大:会出现一些平台特有的问题,需要理解各个系统的差异性和兼容性, 并进行更多的调试和测试。

QT + C++

Qt 是跨平台的 C++ 开发框架。提供了集成的开发环境,跨平台开发桌面、移动和嵌入式App。开发者通过简单的 API 编写可移植的代码。

QT实现了内存管理/网络/数据/UI等功能, 屏蔽了底层的操作系统和平台差异。完美的避免了上一套C++方案的缺点

自绘引擎,界面上的按钮和文本框,都是Qt引擎自己画的,保证了界面在不同操作系统上的一致性。

缺点:

  • 商业授权不太友好,开发商业应用一定要谨慎。个人开发者可以免费使用。
  • 移动端兼容不太好

方案选择总结

移动端优先的企业, 短平快使用React Native/小程序这种基于 Web 的方案, 追求性能的使用Flutter

桌面端优先的企业, 短平快使用QT/Electron, 追求性能和极致用户体验的使用原生UI+C++