一、初识Flutter

Flutter是什么?

Flutter is Google's UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop form a single codebase。


Flutter是一个UI SDK(Software Development Kit)。

可以进行移动端(iOS、Android),Web端(Beta),桌面(technical preview),跨平台解决方案;

移动端目前已经很多公司在用,Google、阿里、腾讯。

特别是阿里的咸鱼团队,为Flutter做了非常多的贡献;

Flutter它是有一统大前端的野心的,并且它正在侵蚀iOS、Android这些原生开发;


Flutter的特点

Google公司在国内做过很多宣讲,其中多次提到Flutter的几个特点:美观、快速、高效、开发。

美观:使用Flutter内置美丽的Material Design和Cupertino widget,丰富的motion API,平滑而自然的活动效果和平台感知,为您的用户带来全新的体验。

快速:Flutter 的UI渲染性能很好。在生产环境下,Flutter 将代码编译成机器码执行,并充分利用 GPU 的图形加速能力,因此使用Flutter 开发的移动应用即使在低配手机上也能实现每秒 60 帧的 UI 渲染速度; Flutter 引擎使用 C++ 编写,包括高效的 Skia 2D 渲染引擎,Dart 运行时和文本渲染库。

高效:Hot Reload (热重载) ,在前端已经不是什么新鲜的东西,但在移动端之前一直是没有的

开发:Flutter 是开放的,它是一个完全开源的项目。


平台独立开发:

完整的软件系统需要移动端:iOS端和Android端 

iOS端使用OC、Swift来进行开发,大部分iOS程序员目前这两个都需要掌握;(iOS开发工程师) 

Android端使用Java、Kotlin来进行开发,使用Java开发Android会更多一些;(Android开发工程师) 

对于公司来说成本其实是非常高的。

在很长一段时间内,大家都在需求一种移动端的跨平台解决方案,希望可以通过一套代码开发出可以同时运行在iOS和Android两个系统上的应用程序。

跨平台解决方案一:webview

基于 JavaScript 和 WebView的跨平台。

最早出现的跨平台框架是基于JavaScript和WebView, 代表框架有PhoneGap,Apache Cordova,Ionic 等等。

主要是通过HTML来构建自己的界面,再将其显示在各个平台的WebView中。

但是它默认是不能调用本地的一些服务的(比如相机、蓝牙等),所以需要通过JavaScript进行桥接调用Native的一些代码来完成某些功能。但是,它本身的体验、性能都并不理想,而且开发过程

中的坑非常多。

跨平台解决方案二:React Native

在寻求最佳跨平台解决方案的过程中,无疑React Native 是之前最优秀的一个。

React Native (简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的JS框架React在原生移动应用平台的衍生产物,目前支持iOS和安卓两大平台。

RN使用JavaScript语言,类似于HTML的JSX,以及CSS来开发移动应用,因此熟悉Web前端开发的技术人员只需很少的学习就可以进入移动应用开发领域。 

并且在保留基本渲染能力的基础上,用原生自带的 UI 组件实现核心的渲染引擎,从而保证了良好的渲染性能。

但是,由于RN的本质是通过JavaScript VM调用原生接口,通信相对比较低效,而且框架本身不负责渲染,而是是间接通过原生进行渲染的。所以在RN上做出非常多贡献的Airbnb之前就宣布放弃RN, 而转向Native进行开发

跨平台解决方案三:Flutter

从Flutter出现到现在,我个人就一直非常看好,因为它可能才是我们很久以来所期待的跨平台的终极解决方案。

我们直接看下面这幅图来对比flutter - native - rn的区别 

Flutter利用Skia绘图引擎,直接通过CPU、GPU进行绘制,不需要依赖任何原生的控件

Android操作系统中,我们编写的原生控件实际上也是依赖于Skia进行绘制,所以flutter在某些Android操作系统上甚至还要高于原生(因为原生Android中的Skia必须随着操作系统进行更新,而Flutter SDK中总是保持最新的)

而类似于RN的框架,必须通过某些桥接的方式先转成原生进行调用,之后再进行渲染。

Flutter绘制原理图

flutter区别于React Native的本质区别:

React Native之类的框架,只是通过JavaScript虚拟机扩展调用系统组件,由Android和iOS系统进行组件的渲染;Flutter 是自己完成了组件渲染的闭环

图像是如何显示的?

首先,你需要知道,我们在屏幕上可以看到的所有内容都是计算机绘制出来的图像。

无论是视频还是GIF图片,还是操作系统给我们看到的图形化界面中的画面,都是图像。 

但是我们为什么能看到类似于动画的效果呢?

这是因为它播放的速度非常快,研究表明:当图片连续播放的频率超过16帧(16张图片),人眼就会感觉非常流畅,当少于16帧时,会感觉到卡顿,所以我们平时看到的电影,通常都是24帧或者30帧的(李安之前拍摄120帧的电影,目的就是让图片间隔更小,画面更加的流畅) 

帧率与刷新率的关系:

帧率(fps):Frames Per Second  

刷新率:显示器的频率,比如iPhone的 60Hz、iPad Pro的 120Hz。

双重缓存(Double Buffer) 

双重缓存存在的问题

双重缓存的缺陷在于:当 CPU/GPU 绘制一帧的时间过长(比如超过16ms)时,会产生Jank(画面停顿,甚至空白)。

三重缓存(Triple Buffer):本质是在每次Vsync信号发出后,多缓存一个Buffer作为备用。


渲染引擎skia

大前端学不动系列

很多人看到Google的flutter框架的时候,第一反应就是:别出新东西了,实在学不动了。

客户端开发者:从Android到iOS,或者从iOS到Android,到RN,甚至现在越来越多的客户端开发者接触前端相关知识(Vue、React、Angular、小程序) 

前端开发者:从jQuery到AngularJS,到三大框架并行:Vue、React、Angular,还有小程序,甚至现在也要接触客户端开发(比如RN、Flutter),包括TypeScript、Webpack、uniapp、Nodejs。 

大前端开发就是,不像服务器一样可能几年甚至几十年还是那一套的东西,新技术会层出不穷。 

但是每一样技术的出现都会让惊喜,因为他必然是解决了之前技术的某一个痛点的,所以我们要学会拥抱这种变化。

并且很多知识在学习的过程中,你会发现他们都是相同的,并不是说都要从头再来,最重要的是建立属于自己的知识体系。 



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容