美文网首页
snapshot、dill概念理解

snapshot、dill概念理解

作者: laomao_老毛 | 来源:发表于2021-05-13 15:02 被阅读0次

在学习flutter过程中,遇到一些snapshot、dill文件,不知道它们是什么,是做什么的。其实它们是一种dart的编译产物。而snapshot和dill在一些情况下是同一个东西。

dart产物类型

  • exe:可执行文件,自带了精简版的Dart运行环境
  • aot-snapshot:一种特定架构的文件,没有dart运行环境
  • jit-snapshot:一种特定架构的文件。它里面是在程序运行期间生成的已解析的类和已编译的代码
  • kernel snapshot:可移植的二进制快照
  • js:可部署的JavaScript文件

exe(独立可执行文件 self-contained executables)

exe独立可执行文件,可以在Windows、MacOS或Linux上单独运行。是由指定的dart文件及其依赖编译而成。它里面带有小型的dart运行环境,可以用来处理类型检查和垃圾回收。

编译:

dart2native hello.dart

运行:

➜  dartTest ./hello.exe
hello world

上面运行的时候不需要dart命令,由此也可以知道它是独立的可执行文件,内部有dart运行环境。

最新的编译命令:替换了dart2native命令

dart compile exe hello.dart

aot-snapshot

使用AOT snapshots可以减少磁盘空间。它是一种指定当前框架的产物。即:如果你使用macos创建的.aot文件,那么你只能运行在macOS上。

编译:

dart2native hello.dart -k aot

运行:运行时需要使用dartatoruntime命令

➜  dartTest dartaotruntime hello.aot
hello world

最新的编译命令:

dart compile aot-snapshot hello.dart

jit-snapshot

JIT snapshot中有所有的解析类和编译的代码(在程序运行的时候生成的),当运行jit-snapshot时,dart虚拟机不需要再去解析和编译类,因此VM可以运行的更快。

编译:

dart --snapshot-kind=app-jit --snapshot=helloJit.dart.snapshot hello.dart

运行:

➜  dartTest dart helloJit.dart.snapshot              
hello world

最新的编译命令:

dart compile jit-snapshot ./hello.dart

kernel snapshot

kernal snapshot是单个可移植文件,能运行在所有的操作系统和CPU架构上。kernel snapshot包含了dart程序的抽象语法树(AST)的二进制形式

编译:默认不指定kind,就是kernel类型

dart --snapshot-kind=kernel --snapshot=hello1.dart.snapshot hello.dart

运行:

➜  dartTest dart hello1.dart.snapshot                
hello world

最新命令:

dart compile kernel ./hello.dart

查看其生成的文件:hello.dill。由此我们可知dill文件就是snapshot类型为kernel的文件。它们是一个东西

产物大小比较

-rw-r--r--   1 laomao  staff  1007072 May 13 14:05 hello.aot
-rw-r--r--   1 laomao  staff       31 May 12 17:54 hello.dart
-rw-r--r--   1 laomao  staff      568 May 13 14:35 hello.dill
-rwxr-xr-x   1 laomao  staff  7269472 May 13 11:57 hello.exe
-rw-r--r--   1 laomao  staff  3958304 May 13 14:27 hello.jit

可以得出:exe > jit-snapshot > aot-snapshot > kernel > dart source code

exe中有dart运行环境所以很大,jit-snapshot和aot-snapshot是特定架构文件,kernel是AST的二进制文件,可以在平台之间迁移。

相关文章

  • snapshot、dill概念理解

    在学习flutter过程中,遇到一些snapshot、dill文件,不知道它们是什么,是做什么的。其实它们是一种d...

  • mvn snapshot理解

    简介 snapshot快照仓库用于保存开发过程中的不稳定版本 release正式仓库则是用来保存稳定的发行版本 策...

  • 5. Flutter你想要的热更新之为dill瘦身

    Flutter你想要的热更新之为dill瘦身 1. 换了个马甲的 dill 在 flutter_assets 有个...

  • Day3

    A great man once said it is necessary to dill as much as ...

  • 插画师Cannon Dill作品欣赏

    分享一组作品来自插画师Cannon Dill。 Cannon Dill笔下有趣的动物们。无论是柔软的猫咪还是健硕的...

  • Day 4

    That was the summer Dill came to us. Early one morning as...

  • 自学植物绘第六天

    莳萝的英语俗名Dill是由盎格鲁·萨克逊语的Dylle或Dylla演变而来的,到了中世纪时才变成Dill,这个字意...

  • Flink--State & Fault Tolerance-官

    基于flink-1.8.1 基于官网 概念解析 Snapshot 快照 - 一个通用术语,指的是Flink作业状态...

  • Maven 中 jar 包的 Snapshot 和 Releas

    概念 这两个概念是用于描述 jar 包,jar 包 提供给其他系统作为依赖 snapshot 版本代表不稳定、尚处...

  • Maven 中 Snapshot 和 Release

    概念 这两个概念是用于描述 jar 包,jar 包 提供给其他系统作为依赖 snapshot 版本代表不稳定、尚处...

网友评论

      本文标题:snapshot、dill概念理解

      本文链接:https://www.haomeiwen.com/subject/mmxxjltx.html