程序主要有两种运行方式:静态编译
与 动态解释
AOT (静态编译)
静态编译的程序在执行前程序会被提前编译为机器码(或中间字节码),通常将这种类型称为AOT
(Ahead of time)即 “提前编译”
。
AOT
程序的典型代表是用 C/C++ 开发的应用,它们必须在执行前编译成机器码。
JIT(动态解释)
解释执行则是在运行时将源码实时翻译为机器码来执行,通常将这种类型称为JIT
(Just-in-time)即 “即时编译”
。
JIT
的代表则非常多,如JavaScript、python等,事实上,所有脚本语言都支持 JIT 模式。
但需要注意的是 JIT 和 AOT 指的是程序运行方式,和编程语言并非强关联的,有些语言既可以以 JIT 方式运行也可以以 AOT 方式运行,如Python,它可以在第一次执行时编译成中间字节码,然后在之后执行时再将字节码实施转为机器码执行。也许有人会说,中间字节码并非机器码,在程序执行时仍然需要动态将字节码转为机器码,这不应该是 JIT 吗 ? 是这样,但通常我们区分是否为AOT 的标准就是看代码在执行之前是否需要编译,只要需要编译,无论其编译产物是字节码还是机器码,都属于AOT
Flutter 采用 Dart 语言开发的优势
1、开发效率高
Dart 运行时和编译器支持 Flutter 的两个关键特性的组合:
- 基于
JIT
的快速开发周期:Flutter 在开发阶段采用,采用JIT
模式,这样就避免了每次改动都要进行编译,极大的节省了开发时间;- 基于
AOT
的发布包: Flutter 在发布时可以通过AOT
生成高效的机器码以保证应用性能。而 JavaScript 则不具有这个能力。
2、高性能
Flutter 旨在提供流畅、高保真的的 UI 体验。为了实现这一点,Flutter 中需要能够在每个动画帧中运行大量的代码。这意味着需要一种既能提供高性能的语言,而不会出现会丢帧的周期性暂停,而 Dart 支持 AOT,在这一点上可以做的比 JavaScript 更好。
3、快速内存分配
Flutter 框架使用函数式流,这使得它在很大程度上依赖于底层的内存分配器。因此,拥有一个能够有效地处理琐碎任务的内存分配器将显得十分重要,在缺乏此功能的语言中,Flutter 将无法有效地工作。当然 Chrome V8 的 JavaScript 引擎在内存分配上也已经做的很好,事实上 Dart 开发团队的很多成员都是来自Chrome 团队的,所以在内存分配上 Dart 并不能作为超越 JavaScript 的优势,而对于Flutter来说,它需要这样的特性,而 Dart 也正好满足而已。
4、类型安全和空安全
由于 Dart 是类型安全的语言,且 2.12 版本后也支持了空安全特性,所以 Dart 支持静态类型检测,可以在编译前发现一些类型的错误,并排除潜在问题,这一点对于前端开发者来说可能会更具有吸引力。与之不同的,JavaScript 是一个弱类型语言,也因此前端社区出现了很多给 JavaScript 代码添加静态类型检测的扩展语言和工具,如:微软的 TypeScript 以及Facebook 的 Flow。相比之下,Dart 本身就支持静态类型,这是它的一个重要优势。
参考链接:https://book.flutterchina.club/chapter1/flutter_intro.html#_1-2-1-flutter-%E7%AE%80%E4%BB%8B
文章持续更新中、希望对各位有所帮助、有问题可留言 大家共同学习.