Flutter原理初探

前言

随着flutter正式版本的发布,flutter被越来越的人关注。flutter是Google推出的移动应用开发框架,使用Dart语言开发,一套代码可以同时在iOS和Android平台上运行。

Flutter框架结构

我们看下flutter官方提供的一张框架图:
屏幕快照 2019-05-16 下午3.01.00.png

Flutter Framework

这是一个纯Dart实现的SDK.

  1. 底下两层(Foundation和Animation、Painting、Gestures)在Google的一些视频中被合并为一个dart UI层,对应的是Flutter中的dart:ui包,它是Flutter引擎暴露的底层UI库,提供动画、手势及绘制能力。
  2. Rendering层,这一层是一个抽象的布局层,它依赖于dart UI层,Rendering层会构建一个UI树,当UI树有变化时,会计算出有变化的部分,然后更新UI树,最终将UI树绘制到屏幕上,这个过程类似于React中的虚拟DOM。Rendering层可以说是Flutter UI框架最核心的部分,它除了确定每个UI元素的位置、大小之外还要进行坐标变换、绘制(调用底层dart:ui)。
  3. Widgets层是Flutter提供的的一套基础组件库,在基础组件库之上,Flutter还提供了 Material 和Cupertino两种视觉风格的组件库。我们Flutter开发的大多数场景,只是和这两层打交道。

Flutter Engine

这是一个纯 C++实现的 SDK,其中包括了 Skia引擎、Dart运行时、文字排版引擎等。在代码调用 dart:ui库时,调用最终会走到Engine层,然后实现真正的绘制逻辑。

Dart开发

当我们写完 Dart 代码后,需要编译后才能给客户端使用。Flutter 的产物分为两种模式:

  1. 一个是 Debug 模式,采用 JIT(Just In Time)的方式,类似于解释型语言,好处是可以支持热更新,方便调试。
  2. 另一种是 AOT(Ahead Of Time)模式,类似于编译型语言,好处是性能比较好。

产物

因此在开发中,我们一般使用 Debug 模式的产物来提升调试效率,正式上线后再换成 Release 模式获得极致的性能。不管是哪种模式,在 iOS 下的产物都是三个(安卓类似):

  1. App.framework:和 flutter 的业务逻辑相关,在 Debug 模式下就是一个很小的空壳,在 Release 模式下包含全部业务逻辑。
  2. flutter_assets:也和 flutter 的业务逻辑相关,在 Debug 模式下包含全部业务逻辑,在 Release 模式下很小。
  3. Flutter.framework:实现 Flutter 框架自己的逻辑。

最后

由于Flutter现在暂不支持热更新,所以我们只是小范围打样,并不能替代现有项目的H5实现方式。

感谢参考:
Flutter中文网

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容