热重载与热更新
热重载,是在运行调试状态下,将新代码直接更新到执行中的二进制。
热更新,是在app上线后,通过Runtime或其他方式,改变现有的执行逻辑。
AOT和JIT
Flutter
支持AOT
(Ahead of time
)和JIT
(Just in time
)两种编译模式,JIT
模式支持在运行过程中进行Hot Reload
。刷新过程是一个增量的过程,由系统对本次和上次的代码做一次snapshot
,将新的代码注入到DartVM
中进行刷新。但有时会不能进行Hot Reload
,此时进行一次全量的Hot Reload
即可。
而AOT
模式则是在运行前预先编译好,这样在每次运行过程中就不需要进行分析、编译,此模式的运行速度是最快的。Flutter
同时采用了两种方案,在开发阶段采用JIT
模式进行开发,在release
阶段采用AOT
模式,将代码打包为二进制进行发布。
在开发原生应用时,每次修改代码后都需要重新编译,并且运行到硬件设备上。由于Flutter
支持Hot Reload
,可以进行热重载,对项目的开发效率有很大的提升。
由于Flutter
实现机制支持JIT
的原因,理论上来说是支持热更新以及服务器下发代码的。可以从服务器。但是由于这样会使性能变差,而且还有审核的问题,所以Flutter
并没有采用这种方案。