本文的学习笔记来源于:
Flutter 实战
作者:wendux
一、Flutter 为什么采用 Dart 语言开发?
先了解两个概念:JIT 和 AOT
(一)JIT 和 AOT 是什么
JIT:Just in time 动态(即时)编译,边运行边编译。
AOT:Ahead of time,指运行前编译。
这两种编译方式的主要区别在于是否在“运行时”进行编译
JIT 和 AOT 各自的优缺点参考:
(二)为什么是 Dart ,而不是 JavaScript?
- 开发效率高
Dart 运行时和编译器支持 Flutter 的两个关键特性的组合:
基于 JIT 的快速开发周期:Flutter 在开发阶段采用 JIT 模式,这样就避免了每次改动都要进行编译,极大的节省了开发时间;
基于 AOT 的发布包:Flutter 在发布时可以通过 AOT 生成高效的 ARM 代码以保证应用性能。而 JavaScript 则不具有这个能力。
- 高性能
Flutter 旨在提供流畅、高保真的的 UI 体验。为了实现这一点,Flutter 中需要能够在每个动画帧中运行大量的代码。这意味着需要一种既能提供高性能的语言,而不会出现会丢帧的周期性暂停,而 Dart 支持 AOT,在这一点上可以做的比 JavaScript 更好。
- 快速内存分配
Flutter 框架使用函数式流,这使得它在很大程度上依赖于底层的内存分配器。因此,拥有一个能够有效地处理琐碎任务的内存分配器将显得十分重要,在缺乏此功能的语言中,Flutter 将无法有效地工作。当然 Chrome V8的 JavaScript 引擎在内存分配上也已经做的很好,事实上 Dart 开发团队的很多成员都是来自 Chrome 团队的,所以在内存分配上 Dart 并不能作为超越 JavaScript 的优势,而对于 Flutter 来说,它需要这样的特性,而 Dart 也正好满足而已。
- 类型安全
由于 Dart 是类型安全的语言,支持静态类型检测,所以可以在编译前发现一些类型的错误,并排除潜在问题,这一点对于前端开发者来说可能会更具有吸引力。与之不同的,JavaScript 是一个弱类型语言,也因此前端社区出现了很多给 JavaScript 代码添加静态类型检测的扩展语言和工具,如:微软的 TypeScrip t以及 Facebook 的 Flow。相比之下,Dart 本身就支持静态类型,这是它的一个重要优势。
- Dart 团队就在你身边
看似不起眼,实则举足轻重。由于有 Dart 团队的积极投入,Flutter 团队可以获得更多、更方便的支持,正如 Flutter 官网所述“我们正与 Dart 社区进行密切合作,以改进 Dart 在 Flutter 中的使用。例如,当我们最初采用Dart 时,该语言并没有提供生成原生二进制文件的工具链(这对于实现可预测的高性能具有很大的帮助),但是现在它实现了,因为 Dart 团队专门为 Flutter 构建了它。同样,Dart VM 之前已经针对吞吐量进行了优化,但团队现在正在优化 VM 的延迟时间,这对于 Flutter 的工作负载更为重要。
二、搭建 Flutter 开发环境
(一)更新环境变量
Flutter SDK 下载完成后需要将 bin 目录添加的系统环境变量中,这一步其实没有什么复杂的,但是刚刚从 windows 系统切换到 mac 系统的同学还是有点不知所措,具体步骤:
- 打开终端 Terminal,默认是在 Home 目录下,如下图所示。如果不是在这个目录下,可以参考这篇文章修改 Mac Os系统中的根目录和家(home)目录分别指什么,它们有何关系?
创建.bash_profile
输入touch .bash_profile编辑.bash_profile文件
输入open -e .bash_profile
然后在打开的文件中,添加:
PATH="路径:${PATH}"
export PATH
路径是你自己电脑的 Flutter 的 bin 目录的路径,如
PATH="/work/Flutter/flutter/bin:${PATH}"
export PATH
保存文件,关闭.bash_profile
更新刚配置的环境变量
输入source .bash_profile
添加完成后,验证“flutter/bin”是否已在PATH中:
echo $PATH
三、Flutter 常用命令
flutter doctor
查看是否还需要安装其它依赖flutter channel
查看所有分支flutter upgrade
升级 Flutter SDK