image
LP小透明

当你感到无聊的时候,就去学习,因为一旦你开始认真学习,就会立刻发现比学习有趣的事来打断你的学习

Flutter 实战.pdf


LP小透明

Flutter 是 Google推出并开源的移动应用开发框架, 主打跨平台、 高保真、 高性能。 开发者可以通 过 Dart语言开发 App, 一套代码同时运行在 iOS 和 Android平台。 Flutter提供了丰富的组 件、 接口, 开发者可以很快地为 Flutter添加 native扩展。 同时 Flutter还使用 Native引擎渲 染视图, 这无疑能为用户提供良好的体验。

Flutter与用于构建移动应用程序的其它大多数框架不同, 因为Flutter既不使用WebView, 也不使 用操作系统的原生控件。 相反, Flutter使用自己的高性能渲染引擎来绘制widget。 这样不仅可以保 证在Android和iOS上UI的一致性, 而且也可以避免对原生控件依赖而带来的限制及高昂的维护成本。 Flutter使用Skia作为其2D渲染引擎, Skia是Google的一个2D图形处理函数库, 包含字型、 坐标转 换, 以及点阵图都有高效能且简洁的表现, Skia是跨平台的, 并提供了非常友好的API, 目前Google Chrome浏览器和Android均采用Skia作为其绘图引擎, 值得一提的是, 由于Android系统已经内置了 Skia, 所以Flutter在打包APK(Android应用安装包)时, 不需要再将Skia打入APK中, 但iOS系统 并未内置Skia, 所以构建iPA时, 也必须将Skia一起打包, 这也是为什么Flutter APP的Android安 装包比iOS安装包小的主要原因。

Flutter高性能主要靠两点来保证, 首先, Flutter APP采用Dart语言开发。 Dart在 JIT( 即时编 译) 模式下, 速度与 JavaScript基本持平。 但是 Dart支持 AOT(tijia), 当以 AOT模式运行 时, JavaScript便远远追不上了。 速度的提升对高帧率下的视图数据计算很有帮助。 其次, Flutter 使用自己的渲染引擎来绘制UI, 布局数据等由Dart语言直接控制, 所以在布局过程中不需要像RN那样 要在JavaScript和Native之间通信, 这在一些滑动和拖动的场景下具有明显优势, 因为在滑动和拖 动过程往往都会引起布局发生变化, 所以JavaScript需要和Native之间不停的同步布局信息, 这和 在浏览器中要JavaScript频繁操作DOM所带来的问题是相同的, 都会带来比较客观的性能开销。 这是一个很有意思, 但也很有争议的问题, 在了解Flutter为什么选择了 Dart而不是 JavaScript 之前我们先来介绍两个概念: JIT和AOT。

目前, 程序主要有两种运行方式: 静态编译与动态解释。 静态编译的程序在执行前全部被翻译为机器 码, 通常将这种类型称为AOT ( Ahead of time) 即 “提前编译”; 而解释执行的则是一句一句边翻 译边运行, 通常将这种类型称为JIT( Just-in-time) 即“即时编译”。 AOT程序的典型代表是用

 
Views 1.7K