JIT JIT(Just In Time) 翻譯爲 即時編譯,指的是在程序運行中,將熱點代碼編譯成機器碼,提升運行效率。常見例子有 V8 引擎和 JVM,JIT 能夠充分利用解釋型語言的優勢,動態執行源碼,而不用考慮平臺差別性。這裏須要注意的是,對於 JVM 來講,源碼指字節碼,而不是 Java 源碼。ios
AOT AOT(Ahead Of Time) 稱爲 運行前編譯,指的是在程序運行以前,已經編譯成對應平臺的機器碼,不須要在運行中解釋編譯,就能夠直接運行。常見例子有 C 和 C++。 雖然,咱們會區別 JIT 和 AOT 兩種編譯模式,但實際上,有不少語言並非徹底使用 JIT 或者 AOT 的,一般它們會混用這兩種模式,來達到最大的性能優化。性能優化
Script:最普通的 JIT模式,在 PC命令行調用 dart vm執行 dart源代碼文件便是這種模式。bash
Script Snapshot:JIT模式,和上一個不一樣的是,這裏載入的是已經 token化的 dart源代碼,提早執行了上一步的 lexer步驟。markdown
Application Snapshot:JIT模式,這種模式來源於 dart vm直接載入源碼後 dump出數據。dart vm經過這種數據啓動會更快。不過值得一提的是這種模式是區分架構的,在 x64上生成的數據不能夠給 arm使用。架構
AOT:AOT模式,直接將 dart源碼編譯出 .S文件,而後經過彙編器生成對應架構的代碼。app
Script:同 Dart Script模式一致,雖然 Flutter支持,但暫未看到使用,畢竟影響啓動速度。性能
Kernel Snapshot:Dart的 bytecode 模式,bytecode模式是不區分架構的。Kernel Snapshot在 Flutter項目內也叫 Core Snapshot。bytecode模式能夠歸類爲 AOT編譯。優化
Core JIT:Dart的一種二進制模式,將指令代碼和 heap數據打包成文件,而後在 vm和 isolate啓動時載入,直接標記內存可執行,能夠說這是一種 AOT模式。Core JIT也被叫作 AOTBlobui
AOT Assembly: 即 Dart的 AOT模式。直接生成彙編源代碼文件,由各平臺自行彙編。包體積比較大,區分架構。this
Android : Kernel Snapshot模式
iOS : Kernel Snapshot模式
Android : Core JIT
iOS : AOT Assembly
flutter build apk flutter build apk --debug flutter build ios flutter build ios —debug Usage: flutter build <subcommand> [arguments] -h, --help Print this usage information. Available subcommands: aot Build an ahead-of-time compiled snapshot of your app's Dart code. apk Build an Android APK file from your app. appbundle Build an Android App Bundle file from your app. bundle Build the Flutter assets directory from your app. ios Build an iOS application bundle (Mac OS X host only). 複製代碼
Android產物就是build/app/intermediates/flutter/XXX下面的flutter_assets/目錄中的全部內容。若是是release或者profile版本的話,還包含Dart的二進制產物app.so或者***snapshot***。能夠看到,除了默認狀況的***snapshot***,咱們還能夠指定Dart產物爲常規的so庫形式。
isolate_snapshot_data :用於加速 isolate啓動,業務無關代碼,固定,僅和 flutter engine版本有關
vm_snapshot_data :用於加速 dart vm啓動的產物,業務無關代碼,僅和 flutter engine版本有關
kernel_blob.bin :JIT模式下Dart編譯的中間代碼
flutter.so :Flutter引擎
assets :資源文件
iOS產物 App.framework
Flutter相關代碼的最終產物是:App.framework(dart代碼生成)和Flutter.framework(引擎)。