Flutter简介
Flutter框架分三层
Framework,Engine, Embedder
Framework使用dart语言实现,包括UI,文本,图片,按钮等Widgets,渲染,动画,手势等。此部分的核心代码是flutter仓库下的flutter package,以及sky_engine仓库下的 io, async, ui(dart:ui库提供了Flutter框架和引擎之间的接口)等package。
Engine使用C++实现,主要包括:Skia, Dart 和 Text。
- Skia是开源的二维图形库,提供了适用于多种软硬件平台的通用API。其已作为Google Chrome,Chrome OS,Android, Mozilla Firefox, Firefox OS等其他众多产品的图形引擎,支持平台还包括Windows, macOS, iOS,Android,Ubuntu等。
- Dart 部分主要包括:Dart Runtime,Garbage Collection(GC),如果是Debug模式的话,还包括JIT(Just In Time)支持。Release和Profile模式下,是AOT(Ahead Of Time)编译成了原生的arm代码,并不存在JIT部分。
- Text 即文本渲染,其渲染层次如下:衍生自 Minikin的libtxt库(用于字体选择,分隔行);HartBuzz用于字形选择和成型;Skia作为渲染/GPU后端,在Android和Fuchsia上使用FreeType渲染,在iOS上使用CoreGraphics来渲染字体。
Embedder是一个嵌入层,通过该层把Flutter嵌入到各个平台上去,Embedder的主要工作包括渲染Surface设置, 线程设置,以及插件等。平台(如iOS)只是提供一个画布,剩余的所有渲染相关的逻辑都在Flutter内部,这就使得它具有了很好的跨端一致性。
Dart语言
Dart 也是一种VM语言,所以在每个运行flutter的app中都有一个dart的运行环境。编译模式支持AOT和JIT。
Dart最开始是google设计出来替代javascript的,但是并没有凑效。后面Flutter选择了Dart, 才使Dart活跃起来。
Dart语言的特点:
- 单进程异步事件模型
- 强类型,可以类型推断
- 具有极高的运行效率和优秀的代码运行优化的VM,根据早前的基准测试,性能比肩 Java7 的JVM;
- 独特的隔离区( Isolate ),可以实现多线程
- 面向对象编程,一切数据类型均派生自 Object
- 运算符重载,泛型支持
- 强大的 Future 和 Stream 模型,可以简单实现高效的代码
- Minix 特性,可以更好的实现方法复用
- 全平台语言,可以很好的胜任移动和前后端的开发
- 在语法上,Dart 提供了很多便捷的操作
浙公网安备 33010602011771号