Flutter的基础认识

开发五年了,一直没有写博客的习惯,最近发生一些事情才意识到记录和分享的重要性。以下是我一年前学习时候的笔记,相当于挪个地方保存啦~

Flutter:一款移动应用程序的SDK,包含框架工具和Widget。不使用webView,也不使用操作系统的原生控件。使用自己的高性能的渲染引擎(Skia)来绘制Widget。核心只有一层轻量的C/C++代码。

在Android上运行。引擎的C/C++代码是用Android的NDK编译的。任何Dart代码都是AOT编译成本地代码的。Flutter应用程序使用本机指令集运行(不涉及解释器)

在iOS上运行,引擎的C/C ++代码使用LLVM编译,任何Dart代码都是AOT编译为本地代码的。Flutter应用程序使用本机指令集运行(不涉及解释器)

附加解释:

JIT (Just-In-Time - 实时编译) 和 AOT (Ahead-Of-Time - 预先编译)

Android虚拟机有两种:DalvikART(android runtime),JIT与AOT是虚拟机为了提高运行效率等采用的不同的编译策略

JIT意思是Just In Time Compiler,就是即时编译技术,动态编译。与Dalvik虚拟机相关。JIT 的引入使得 Dalvik 的性能提升了 3~6 倍。

JIT缺陷:每次启动应用都需要重新编译(没有缓存)

AOT 是静态编译,ART(android runtime)5.0以后被用来替换Dalvik.

AOT的缺陷:应用安装和系统升级之后的应用优化比较耗时(重新编译,把程序代码转换成机器语言)

                      优化后的文件会占用额外的存储空间(缓存转换结果)

JIT和AOT共存

Android 7.0上,JIT 编译器被再次使用,采用AOT/JIT 混合编译的策略,特点是:

应用在安装的时候dex不会再被编译,App运行时,dex文件先通过解析器被直接执行,热点函数会被识别并被JIT编译后存储在 jit code cache 中并生成profile文件以记录热点函数的信息。手机进入 IDLE(空闲) 或者 Charging(充电) 状态的时候,系统会扫描 App 目录下的 profile 文件并执行 AOT 过程进行编译。

总结:

Dalvik,ART是Android的两种运行环境,也可以叫做Android虚拟机。 JIT,AOT是Android虚拟机采用的两种不同的编译策略。

Dart运行时和编译器支持Flutter的两个关键特性的组合:

基于JIT的快速开发周期:Flutter在开发阶段采用,采用JIT模式,这样就避免了每次改动都要进行编译,极大的节省了开发时间;

基于AOT的发布包: Flutter在发布时可以通过AOT生成高效的ARM代码以保证应用性能。而JavaScript则不具有这个能力。

猜你喜欢

转载自blog.csdn.net/guoyingmiss/article/details/110817977