编译产物 bin 文件详解

Wuba2022年11月7日大约 3 分钟

本文为你介绍编译产物之一的 bin 文件。

1.bin 从何而来?

你应该知道,Fair 的设计思路是将 dart 文件中,布局相关的代码转为 DSL,并最终输出一个 JSON 文件,JSON 文件可以很好的帮助我们实现动态化。

但是,我们在实践中发现,使用 JSON 文件做动态化的话,需要进行反序列化操作:初始化解析器和解析数据。

反序列化操作不仅会延长页面加载的时间,而且需要额外分配内存空间。从用户体验和性能上来说,都存在很大的优化空间。

因此,我们考虑,将反序列化的操作给去掉。

实现方式就是通过 FlatBuffers 来作为序列化工具,如果对 FlatBuffers 不了解的话,可以先阅读官方文档:传送门open in new window

简单来说,使用 FlatBuffers 可以避免反序列化操作,这大大提升了动态页面的加载速度。

使用 FlatBuffers 序列化的产物就是 bin 文件。

我们将 JSON 文件和 bin 文件的加载速度做了一个对比(左边是 JSON 文件,右边是 bin 文件):

petal_20220530_195101_.gifpetal_20220530_195145_.gif

可以看出,bin 文件的加载速度远远大于 JSON 文件。

既然 bin 文件在性能上优于 JSON ,那为啥编译产物还要保留 JSON 文件呢?

其实原因很简单,因为 JSON 可读性很高,完全可以用于 debug 期间的调试。而 bin 文件是个二进制文件,没有可读性,但是性能更优,完全可以用在 release 环境。

因此,我们保留了 JSON 文件的输出。

2.bin 文件怎么使用?

bin 文件的使用与 JSON 文件的使用方式一致,也是使用 FairWidget 进行加载:

FairWidget(
  path: 'assets/fair/lib_main.fair.bin',
  data: {
    'fairProps': jsonEncode({'title': '你好'})
  },
)

QA:为什么我的编译产物里没有 bin 文件?

一般来说,如果没有生成 bin 文件,都是由于缺少 FlatBuffers 环境,FlatBuffers 环境安装参考如下步骤:

1. 安装 CMake

下载地址:https://cmake.org/download/open in new window

下载完成默认安装就行。

2. 下载 flatbuffers 源码

下载地址:https://github.com/google/flatbuffers.gitopen in new window

3. 打开 CMake 软件

执行成功后,会生成以下文件:

我们通过 cd 命令进入到 flatcBuild 目录。

然后执行 make 命令

make //生成flatc

这样 flatc 就生成成功了,然后还需要安装 flatc

make install //安装flatc

如果执行时,遇到如下错误:

则将 make install 改成 sudo make install 就可以解决了。

这样,我们的 FlatBuffers 环境就算安装好了。

上次编辑于:
贡献者: sunzhe03