Flutter

Flutter中的热更新

2019-11-08  本文已影响0人  白茫茫的大地

首先来了解一下 JIT & AOT

JIT & AOT

JIT全称是Just In Time,代码可以在程序执行时期编译,因为要在程序执行前进行分析、编译,JIT编译可能会导致程序执行时间较慢;而AOT编译,全称Ahead Of Time,是在程序运行前就已经编译,从开发者修改代码到编译的过程较慢,但运行时不需要进行分析、编译,因此执行速度更快。

Flutter使用了独特的编译模式,开发阶段下,使用Kernel Snapshot模式(对应JIT编译),将dart代码生成标记化的源代码,运行时编译,解释执行;release阶段,ios使用AOT编译,编译器将dart代码生成汇编代码,最终生成app.framwork,android使用了Core JIT编译,dart转化为二进制模式,在VM启动前载入。

hot reload 原理

Flutter通过将新的代码注入到正在运行的DartVM中,来实现Hot Reload这种神奇的效果,在DartVM将程序中的类结构更新完成后,Flutter会立即重建整个控件树,从而更新界面。

dart中的更新

触发热刷新时Flutter会检测发生改变的Dart文件,将其同步到App私有缓存目录下,DartVM加载并且修改对应的类或者方法,重建控件树后立即可以在设备上看到效果。

热刷新限制

并不是所有的代码改动都可以通过热刷新来更新:

参考文档

揭秘Flutter Hot Reload(原理篇)

上一篇 下一篇

猜你喜欢

热点阅读