深度剖析:Flutter,谷歌发布的移动UI框架的优势是什么?

发表时间: 2018-03-18 17:57

2018年2月,Flutter推出了第一个Beta版本。Flutter是什么呢?它是Google使用Dart语言开发的移动应用开发框架,使用Dart代码构建高性能、高保真的iOS和Android应用程序,虽然Flutter不是标准的,但是谷歌希望它看上去是原生的。

Flutter到底是来解决哪些实际问题的呢?Flutter主要解决了移动开发中的两个重要问题,一是原生应用程序的性能与平台的集成;二是提供多平台、可移植的UI工具包支持高效应用开发。

为什么选用Dart语言?

相信很多人都对Flutter选用了Dart语言感到疑惑不解,甚至有人都还不知道Dart语言。“为什么Flutter会选用Dart?”知乎网友马超曾当面向Flutter 的开发专家 Divod进行了求证,Divod表示“因为 Dart 的开发团队就在旁边,他们能给到我们很快的支持,双方沟通也会很顺利。”

和其它响应式视图的系统一样,Flutter在刷新视图树时会创建很多只在一帧内存在的对象,而Dart “generational garbage collection” 则对于对象消耗资源相对较少的系统非常有效。而且使用单个个pointer bump来完成对象的分配,有助于避免UI卡顿。

不过,Dart也有一个很大的缺陷,那就是可读性不好。多位网友吐槽Dart括号太多、嵌套复杂,无论是从逻辑上还是可读性上相比都与React Native有差距。也有网友表示Dart写法属于底层写法,等到社区发展壮大,加颗语法糖也是分分钟的事情。

▲ 网友晒出的使用Dart编写简单UI组件的代码

跨平台

提到跨平台,很多人都会自然而然的联想到一个名字“React Native”,程序员可以利用JavaScript和React获得一致的开发体验,但是RN在实际平台上还需要适配和桥接差异性。

而Flutter则是依靠Flutter Engine虚拟机在iOS和Android上运行,开发人员可以通过Flutter框架和API在内部进行交互。Flutter Engine使用C/C++编写,具有低延迟输入和高帧速率的特点。除此之外,Flutter提供了自己的小部件集合,可以直接在OS平台提供的画布上描绘控件。

有网友称:RN是将一种设计理念延伸到两个平台,而Flutter则实现了一套代码,部署多个平台。

性能和体验

Flutter中UI组件和渲染器都从平台中集成到用户的应用程序中,所以原来虚拟的控件树是真实的控件树,所以渲染和绘制的速度会很快,动画发生在用户空间中,开发人员也可以对其进行很多的控制。有网友在亲测了Flutter后表示:在页面渲染方面,Flutter比RN各具优势,图片量越大,Flutter的流畅度优势越大。

除此之外,在以下方面Flutter也有优势:

· 响应式视图,不需要JavaScript的桥接器

· 性能更好,兼容性更好

· 代码将AOT编译为本机(ARM)代码

· 美观,可定制的UI组件,开发人员完全控制UI组件和布局

· 强大的开发者工具,惊人的热重新加载