flutter 热重载原理(一)
2022-12-13 本文已影响0人
今年27
我们都知道OC是由Clang(LVVM的前端)编译的(包括词法分析,语法分析,语义分析),然后将OC代码编译成IR代码,IR然后编译成汇编代码,LVVM架构。这是典型的AOT编译。
Flutter是由Dart语言开的,运行在DartVM(即Dart虚拟机,支持两种方式,一种是AOT,还一种是JIT。热重载就是建立在JIT上的。)
热重载,即DartVM去增量的读取修改的文件,然后及时更新。
从运行效率来说AOT效率更快,因为AOT运行的字节码(二进制),可以cpu直接执行,而JIT执行的代码,属于高级语言,任何一门高级语言再执行前都要做(词法分析,语法分析,语义分析),然后转成语法树,然后转成字节码,相当于同声翻译。
flutter在开发阶段支持热重载,发布阶段不支持热重载。
那么flutter是如何热重载的呢。
流程大概是Dart代码->flutter_tools热重载平台->DartVM热重载
新创建一个flutter_hotreload工程,运行,
用Android studio打开/opt/flutter/packages/flutter_tools工程,点击Add Configurations
flutter_tools
然后点击+号
点击+
选择Dart Command Line App
选择Dart Command Line App
可以看到这个界面
Dart Command Line App
配置一下
配置
点击Apply,点击OK,然后点击运行按钮,直到console出现如下图所示
运行成功
证明我们的flutter_tools与flutter_hotreload挂载成功
而原项目则会显示失败
原项目
实际上原项目的热重载也是基于flutter_tools,既然已经被手动挂载了,原项目的挂载也自然就失效了。
我们在原项目修改一下代码,然后在flutter_tools 的console中输入r,也会刷新界面,接下来就是研究热重载的底层原理。
注意:如果报dartsdk找不到的错误可以进入preference界面
preference
修改Flutter SDK path为自己的flutter sdk地址,然后点击Apply,这样Dart的地址会自动挂在上。
Dart地址