Flutter 的发展历程
1. 移动开发演进
第一阶段 原生时代
移动应用(即我们日常所说的「原生」应用程序),通常是指某一移动平台所特有的应用程序。通过使用特定平台所支持的开发工具和语言进行开发,你可以直接调用系统提供的一些 SDK API。当下流行的移动操作系统中,我们使用 Java 或 Kotlin 调用 Android SDK 开发 Android 应用,或通过 Objective-C 或 Swift 调用 iOS SDK 开发可以上架 App Store 的应用。
优点:
1.原生开放能力,gps、蓝牙、摄像头等;
2.性能高、体验好。
缺点:
1.特定平台开发,综合成本高,每个平台都需要开发成员。
2.动态化能力弱,紧急问题修复或者新功能只能发版
从开发成本的角度出发,同时开发多端的成本很高,所以就有了一个迫切的需求,能否开发一套在多个平台上运行,这样可以大大降低开发成本。 所以也推动了下一阶段的技术。
第二阶段 H5时代
这个阶段h5兴起,主要采用 Webview 容器(广义)进行内容渲染,并借助原生代码预置用以暴露给 JavaScript 调用的一部分系统能力,而这类协议则为我们通常说的 JavaScript Bridge;这个时代的框架在 Web 与 Native 间还有比较明显的界限,大家各司其职(UI 渲染与系统功能调用)。
甚至有一段时间大家觉得h5会替代Android原生开发,当时也出现了很多的开源框架来实现H5与底层的交互框架:PhoneGap,Cordova,Ionic,Xamarin。
优点:
1.开发成本低,简单,跨平台
缺点:
1.依旧是性能问题
所以这种现象持续了没有多久,那,能不能有一种既能跨平台,性能又高的架构解决这个问题呢?
第三阶段 RN时代
在这个阶段我们仍然用 JavaScript 开发,但绘制已经交由 Native 接管,展现在用户面前的 UI 借助的是 JavaScript VM 的解析与 Native Widgets 的组合展示。
其实采用这种技术的不止RN,还有weex,Luaview等等目前的跨平台方案,他们的原理大同小异,只是上层采用的语言不同,中间采用的桥有差异而已,但是整个架构思想是一样的。
优点:
1.性能提升很大
缺点:
1.RN本身的成本增加。
当人们满足于这种开发带来的便利的同时,又有了新的问题产生了,就是桥的成本太高,当涉及到频繁的跨桥调用的时候,就会出现性能问题,还有个更严重的问题就是,维护成本也很高,
当人们认为RN能节省一半工程师的时候,其实RN的维护需要更多的工程师参与进来,
RN的整体思想是一处学习到处使用,所以在Android和Ios的使用方式上还是有差异的,而且在开发插件的时候,还是需要开发android ios两套插件,能达到像H5一样,一处编写,到处运行还是有很大的差异的,所以除了android和ios团队外还需要一个团队维护RN,RN架构的维护成本要比android和ios的开发的难度高多了。所以成本比原来还高,还有很多Rn架构本身没有办法结局的问题,对于小团队来说简直就是噩梦。
第四阶段 Flutter时代
它在第三阶段的基础上,增加了一个dart虚拟机,减少了桥的交互,所以性能方面会更加优秀,还有一点就是维护上,flutter有Google维护,所以他的插件开发将会更加规范,所以理论上很容易实现跨平台代码复用的情况。
- 2017.5 / Aplpha (v0.0.6)
- 2018.2 / Beta 1
- 2018.5 / Beta 3
- 2018.6 / Preview
- 2018.12 / Flutter Live with 1.0.0
- 2019.5 / Flutter 1.5 (Flutter for Web 正式开启了 Flutter 的全平台 UI 框架之路)
2 Flutter是什么?
官方介绍如下
Flutter is Google’s portable UI toolkit for building beautiful, natively-compiled applications for mobile, web, and desktop from a single codebase.
Flutter是谷歌推出的便携式UI工具包,可以跨平台的构建精美的、原生体验的mobile、web、desktop应用。
在介绍Flutter之前一定要介绍一下Dart语言。
最初设计Dart,是Google的一帮程序员出于对JavaScript的不满,决定自己搞一个新语言用来替换JavaScript的,所以刚开始Dart也就是用来作为浏览器脚本运行在浏览器中的。
为了推广Dart,Google利用自己的利器Chrome让它内置了DartVM的引擎。有了运行环境,加上用户群的可观数量,Dart最初也赢得了部分前端开发者的青睐。但Google的这帮程序员万万没想到,看似并无大用的JavaScript居然因为NodeJS而焕发了第二春。此时移动互联网处于萌芽发展中,一个叫做NodeJS的开源项目借助这股移动互联的东风顺势而起,很快的烧遍了前端、烧到了后端,甚至烧到了手机应用和桌面应用,可以说是在编程界无孔不入,几乎成就了JS程序员口中的“凡是能被JS实现的,最终都要被JS实现”的愿景。前端的开发模式因此而改变,进入了一个新的天地。一些明星项目如React、React-Native、Vue等等如雨后春笋般迅速的崛起,一句话总结就是“Javascript很忙”。
Javascript很忙,程序员更忙,Dart就这样被慢慢地遗忘在角落。加上一直以来缺少顶级的项目使用,就算再是亲儿子,得不到JS开发者的心,Google也没什么办法,在2015年的时候,Google在Chrome中默默的移除了内置的Dart引擎。
但是Google并没有放弃Dart,Google内部用Dart编写孵化了一个移动开发框架Sky,之后又被命名为Flutter,进入了移动跨平台开发的领域。这就是Flutter的由来。
3 Flutter 有什么优势?
- Beautiful - Flutter 允许你控制屏幕上的每一寸像素,这让「设计」不用再对「实现」妥协;
- Fast - 一个应用不卡顿的标准是什么,你可能会说 16ms 抑或是 60fps,这对桌面端应用或者移动端应用来说已足够,但当面对广阔的 AR/VR 领域,60fps 仍然会成为使人脑产生眩晕的瓶颈,而 Flutter 的目标远不止 60fps;借助 Dart 支持的 AOT 编译以及 Skia 的绘制,Flutter 可以运行的很快;
- Productive - 前端开发可能已经习惯的开发中 hot reload 模式,但这一特性在移动开发中还算是个新鲜事。Flutter 提供有状态的 hot reload 开发模式,并允许一套 codebase 运行于多端;其他的,再比如开发采用 JIT 编译与发布的 AOT 编译,都使得开发者在开发应用时可以更加高效;
- Open - Dart / Skia / Flutter (Framework),这些都是开源的,Flutter 与 Dart 团队也对包括 Web 在内的多种技术持开放态度,只要是优秀的他们都愿意借鉴吸收。而在生态建设上,Flutter 回应 GitHub Issue 的速度更是让人惊叹,因为是真的快(closed 状态的 issue 平均解决时间为 0.29天);
总得来说,flutter的出现是偶然的,也是必然的。让我们以开放的心态,去拥抱flutter吧。
最后,附一张flutter的架构图。
如果你觉得这篇文章对你有益,还请帮忙转发和点赞,万分感谢。
您的关注将是我坚持的动力源泉,再次感谢。
网友评论