那么,Flutter 是怎么完成组件渲染的呢?
这需要从图像显示的基本原理说起。在计算机系统中,图像的显示需要 CPU、GPU 和显示器一起配合完成:CPU 负责图像数据计算,GPU 负责图像数据渲染,而显示器则负责最终图像显示。
随后视频控制器会以每秒 60 次的速度,从帧缓冲区读取帧数据交由显示器完成图像显示。
可以看到,Flutter 关注如何尽可能快地在两个硬件时钟的 VSync 信号之间计算并合成视图数据,然后通过 Skia 交给 GPU 渲染:UI 线程使用 Dart 来构建视图结构数据,这些数据会在 GPU 线程进行图层合成,随后交给 Skia 引擎加工成 GPU 数据,而这些数据会通过 OpenGL 最终提供给 GPU 渲染。
2. 关于Skia
Skia是一个开源的 2D 图形库,提供各种常用的API,并可在多种软硬件平台上运行。谷歌Chrome浏览器、Chrome OS、安卓、Flutter、火狐浏览器、火狐操作系统以及其它许多产品都使用它作为图形引擎。
Skia 在图形转换、文字渲染、位图渲染方面都表现卓越,并提供了开发者友好的 API。
因此,架构于 Skia 之上的 Flutter,也因此拥有了彻底的跨平台渲染能力。通过与 Skia 的深度定制及优化,Flutter 可以最大限度地抹平平台差异,提高渲染效率与性能。
底层渲染能力统一了,上层开发接口和功能体验也就随即统一了,开发者再也不用操心平台相关的渲染特性了。也就是说,Skia 保证了同一套代码调用在 Android 和 iOS 平台上的渲染效果是完全一致的。
同样的在界面渲染、绘制的过程中,Flutter也做了很多优化处理,提升合成、渲染效率。
3. FLutter的优势
(1)在所有的平台下,都可以保持同样UI样式,同样的业务逻辑
大多数跨平台框架中的UI呈现如下图所示:
而Flutter是直接画在画布上:
(2)减少开发所需的时间
- Flutter的热重载可以高效快速的看到改变,甚至保留应用状态;
- 官方提供的各种现成的组件(Material和Cupertino)。
(3)快速迭代上线
不需要单独适配 iOS、Android 双端的 UI 层面。
(4)更接近native的性能表现
Flutter不依赖任何中