写点什么

混合开发框架最全对比,为什么我更推荐 Flutter?

用户头像
Android架构
关注
发布于: 26 分钟前

前言


=============================================================



Flutter 开发简介与其他的混合开发的对比




《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码




为什么要使用 Flutter?


  • 跨平台技术简介

  • Hybrid 技术简介

  • QT 简介

  • Flutter 简介


为什么要使用 Flutter?




Flutter 有什么优势?它可以帮助你:


1、提高开发效率


2、同一份代码开发 iOS 和 Android


3、用更少的代码做更多的事情


4、轻松迭代


5、在应用程序运行时更改代码并重新加载(通过热重载)


6、修复崩溃并继续从应用程序停止的地方进行调试


7、创建美观,高度定制的用户体验


9、受益于使用 Flutter 框架提供的丰富的 Material Design 和 Cupertino(iOS 风格)的 widget


10、实现定制、美观、品牌驱动的设计,而不受原生控件的限制


跨平台技术简介




针对原生开发面临问题,人们一直都在努力寻找好的解决方案,而时至今日,已经有很多跨平台框架(注意,本书中所指的“跨平台”若无特殊说明,即特指 Android 和 iOS 两个平台),根据其原理,主要分为三类:


1、H5+原生(Cordova、Ionic、微信小程序)


2、JavaScript 开发+原生渲染 (React Native、Weex、快应用)


3、自绘 UI+原生(QT for mobile、Flutter)


4、在接下来的章节中我们逐个来看看这三类框架的原理及优缺点。


Hybrid 技术简介



H5+原生混合开发

这类框架主要原理就是将 APP 的一部分需要动态变动的内容通过 H5 来实现,通过原生的网页加载控件 WebView (Android)或 WKWebView(ios)来加载(以后若无特殊说明,我们用 WebView 来统一指代 android 和 ios 中的网页加载控件)。这样一来,H5 部分是可以随时改变而不用发版,动态化需求能满足;同时,由于 h5 代码只需要一次开发,就能同时在 Android 和 iOS 两个平台运行,这也可以减小开发成本,也就是说,h5 部分功能越多,开发成本就越小。我们称这种 h5+原生的开发模式为混合开发 ,采用混合模式开发的 APP 我们称之为混合应用或 Hybrid APP ,如果一个应用的大多数功能都是 H5 实现的话,我们称其为 Web APP 。


目前混合开发框架的典型代表有:Cordova、Ionic 和微信小程序,值得一提的是微信小程序目前是在 webview 中渲染的,并非原生渲染,但将来有可能会采用原生渲染。

混合开发技术点

如之前所述,原生开发可以访问平台所有功能,而混合开发中,h5 代码是运行在 WebView 中,而 WebView 实质上就是一个浏览器内核,其 JavaScript 依然运行在一个权限受限的沙箱中,所以对于大多数系统能力都没有访问权限,如无法访问文件系统、不能使用蓝牙等。所以,对于 H5 不能实现的功能,都需要原生去做。而混合框架一般都会在原生代码中预先实现一些访问系统能力的 API, 然后暴露给 WebView 以供 JavaScript 调用,这样一来,WebView 就成为了 JavaScript 与原生 API 之间通信的桥梁,主要负责 JavaScript 与原生之间传递调用消息,而消息的传递必须遵守一个标准的协议,它规定了消息的格式与含义,我们把依赖于 WebView 的用于在 JavaScript 与原生之间通信并实现了某种消息传输协议的工具称之为 WebView JavaScript Bridge, 简称 JsBridge,它也是混合开发框架的核心。

React Native

上文已经提到 React Native 是 React 在原生移动应用平台的衍生产物,那两者主要的区别是什么呢?其实,主要的区别在于虚拟 DOM 映射的对象是什么?React 中虚拟 DOM 最终会映射为浏览器 DOM 树,而 RN 中虚拟 DOM 会通过 JavaScript Core 映射为原生控件树。


JavaScript Core 是一个 JavaScript 解释器,它在 React Native 中主要有两个作用:为 JavaScript 提供运行环境。


是 JavaScript 与原生应用之间通信的桥梁,作用和 JsBridge 一样,事实上,在 iOS 中,很多 JsBridge 的实现都是基于 JavaScript Core 。


而 RN 中将虚拟 DOM 映射为原生控件的过程中分两步:


1、布局消息传递;将虚拟 DOM 布局信息传递给原生;


2、原生根据布局信息通过对应的原生控件渲染控件树;


至此,React Native 便实现了跨平台。相对于混合应用,由于 React Native 是原生控件渲染,所以性能会比混合应用中 H5 好很多,同时 React Native 是 Web 开发技术栈,也只需维护一份代码,同样是跨平台框架。

Weex

Weex 是阿里巴巴于 2016 年发布的跨平台移动端开发框架,思想及原理和 React Native 类似,最大的不同是语法层面,Weex 支持 Vue 语法和 Rax 语法,Rax 的 DSL 语法是基于 React JSX 语法而创造。与 React 不同,在 Rax 中 JSX 是必选的,它不支持通过其它方式创建组件,所以学习 JSX 是使用 Rax 的必要基础。而 React Native 只支持 JSX 语法。

快应用

快应用是华为、小米、OPPO、魅族等国内 9 大主流手机厂商共同制定的轻量级应用标准,目标直指微信小程序。它也是采用 JavaScript 语言开发,原生控件渲染,与 React Native 和 Weex 相比主要有两点不同:


快应用自身不支持 Vue 或 React 语法,其采用原生 JavaScript 开发,其开发框架和微信小程序很像,值得一提的是小程序目前已经可以使用 Vue 语法开发(mpvue),从原理上来讲,Vue 的语法也可以移植到快应用上。


React Native 和 Weex 的渲染/排版引擎是集成到框架中的,每一个 APP 都需要打包一份,安装包体积较大;而快应用渲染/排版引擎是集成到 ROM 中的,应用中无需打包,安装包体积小,正因如此,快应用才能在保证性能的同时做到快速分发。


总结




JavaScript 开发+原生渲染的方式主要优点如下:


采用 Web 开发技术栈,社区庞大、上手快、开发成本相对较低。


原生渲染,性能相比 H5 提高很多。


动态化较好,支持热更新。

不足:

渲染时需要 JavaScript 和原生之间通信,在有些场景如拖动可能会因为通信频繁导致卡顿。


JavaScript 为脚本语言,执行时需要 JIT,执行效率和 AOT 代码仍有差距。


由于渲染依赖原生控件,不同平台的控件需要单独维护,并且当系统更新时,社区控件可能会滞后;除此之外,其控件系统也会受到原生 UI 系统限制,例如,在 Android 中,手势冲突消歧规则是固定的,这在使用不同人写的控件嵌套时,手势冲突问题将会变得非常棘手。

QT Moblie 与 Flutter

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
混合开发框架最全对比,为什么我更推荐Flutter?