Flutter 特点
- Google 出品
- 使用 Dart 语言开发
- 支持跨平台,高性能,
- 使用自绘渲染引擎
特点详解
1. 高性能
2. 快速内存分配
Flutter 框架使用函数式流,这使得它在很大程度上依赖于底层的内存分配器。因此,拥有一个能够有效地处理琐碎任务的内存分配器将显得十分重要,在缺乏此功能的语言中,Flutter 将无法有效地工作。当然 Chrome V8 的 JavaScript 引擎在内存分配上也已经做的很好,事实上 Dart 开发团队的很多成员都是来自 Chrome 团队的,所以在内存分配上 Dart 并不能作为超越 JavaScript 的优势,而对于 Flutter 来说,它需要这样的特性,而 Dart 也正好满足而已。
3. 类型安全
由于 Dart 是类型安全的语言,支持静态类型检测,所以可以在编译前发现一些类型的错误,并排除潜在问题,这一点对于前端开发者来说可能会更具有吸引力。与之不同的,JavaScript 是一个弱类型语言,也因此前端社区出现了很多给 JavaScript 代码添加静态类型检测的扩展语言和工具,如:微软的 TypeScript 以及 Facebook 的 Flow。相比之下,Dart 本身就支持静态类型,这是它的一个重要优势
Flutter 架构
Flutter Framework
这是一个纯 Dart 实现的 SDK,它实现了一套基础库,自底向上,我们来简单介绍一下:
- 底下两层(Foundation 和 Animation、Painting、Gestures)在 Google 的一些视频中被合并为一个 dart UI 层,对应的是 Flutter 中的
dart:ui
包,它是 Flutter 引擎暴露的底层 UI 库,提供动画、手势及绘制能力。 - Rendering 层,这一层是一个抽象的布局层,它依赖于 dart UI 层,Rendering 层会构建一个 UI 树,当 UI 树有变化时,会计算出有变化的部分,然后更新 UI 树,最终将 UI 树绘制到屏幕上,这个过程类似于 React 中的虚拟 DOM。Rendering 层可以说是 Flutter UI 框架最核心的部分,它除了确定每个 UI 元素的位置、大小之外还要进行坐标变换、绘制(调用底层 dart:ui)。
- Widgets 层是 Flutter 提供的的一套基础组件库,在基础组件库之上,Flutter 还提供了 Material 和 Cupertino 两种视觉风格的组件库。而 我们 Flutter 开发的大多数场景,只是和这两层打交道。
Flutter Engine
这是一个纯 C++ 实现的 SDK,其中包括了 Skia 引擎、Dart 运行时、文字排版引擎等。在代码调用 dart:ui
库时,调用最终会走到 Engine 层,然后实现真正的绘制逻辑。
总结
Flutter 作为一款跨平台,开源,具有良好分层的框架,在大前端越来越流行的趋势下,是很值得花时间学习一下的。加油!!!