fair

58同城的开源动态化方案,目前市面上比较完善的开源方案。

将build方法内的代码使用dart2dsl转化成json,将非build方法里的代码使用dart2js转化成js。

环境配置

FlatBuffers

将js转化成bin文件,好处是不用反序列化,大大提升Fair解析、加载资源的速度

faircli

用来快捷创建动态化工程和载体工程

1
2
3
4
5
6
7

# 安装 Faircli 命令行工具
dart pub global activate faircli
# 创建动态化工程
faircli create -n dynamic_project_name
# 创建载体工程
faircli create -k carrier -n carrier_project_name

Read More

Dart内存管理

Dart运行环境(VM)

和Android Art一样,Flutter也对Dart源码做了AOT编译,直接将Dart源码编译成了本地字节码,没有了解释执行的过程,提升执行性能。这里重点关注Dart VM内存分配(Allocate)和回收(GC)相关的部分。

和Java显著不同的是Dart的”线程”(Isolate)是不共享内存的,各自的堆(Heap)和栈(Stack)都是隔离的,并且是各自独立GC的,彼此之间通过消息通道来通信。Dart天然不存在数据竞争和变量状态同步的问题,整个Flutter Framework Widget的渲染过程都运行在一个isolate中。

Dart VM将内存管理分为新生代(New Generation)和老年代(Old Generation)。

Read More