Alita在处理React语法的时候,采用了一种运行时处理JSX的技术,相对于社区现有的编译时方案,在JSX语法的支持上更加完备,关于运行时处理JSX的原理,详情请看。html
自发布以来,Alita受到了社区普遍的关注,有多个内外团队已经开始调研Alita的使用。1.2版本咱们除了平常的bug修复,重点在运行性能作了改动,另外咱们也在优化cli 命令行,让其更加友好。react
Alita如今也放置到了React Native文档Out-of-Tree Platforms类目下git
让Alita更加易用,一直是咱们的重要目标,咱们也会根据用户的反馈不断优化Alita脚手架。github
当前版本中,新增了 alita
提示信息,指引你正确得使用 alita
相关命令。当你输入alita
, alita -h
或其它非 alita
脚手架支持的 command
,都可以看到 alita
的正确用法。小程序
1.2版本在小程序的运行性能上作了不少改进,性能优化是个长期且细致的事情,在微信小程序上主要的手段就是。微信小程序
下面咱们具体说明一下Alita的探索。react-native
微信小程序2.4.0
,提供了groupSetData
接口。性能优化
这个接口的出现,给了Alita
更加高效的刷数据到微信小程序的方式。 在v1.2
版本,咱们重写了内部mini-react
和小程序层的数据交换方式,如今每一次setState
产生的组件更新,都会被groupSetData
合并到一次操做里面,这样大大减小了setData
次数。微信
组件的初始化过程和更新略有不一样,更加复杂一些。考虑如下的状况:工具
当react
层计算出全部组件的渲染须要的数据的时候,首先刷数据给 L1
, L1
渲染完成,Alita获取到L21
, L22
实例,刷数据,L21
结束,获取L31
, L32
。。。这里的刷数据存在着时序上的前后,很难经过groupSetData
一次性的把全部数据传递给L1,L21 ... L34
。
这里假定组件树结构有n层,咱们最少是能够作到n次 groupSetData
, 对应这里:
L1
L21
, L22
L31
, L32
, L33
, L34
Alita尝试过这个方案,在测试了几个业务以后,发现这个方案有两个问题,通常首屏页面初始会有7,8层,这样会有7,8次groupSetData
,致使页面TTI
(首次可交互时间)变长。 更加严重的是假如后面的组件结构很浅,前面的组件结构很深,会致使后面的组件先渲染完成,形成页面的抖动。
因此最终Alita
也并无采用上面的方案。 Alita
的方案以下: Alita
会把全部数据集合到一块儿L1
, 经过L1
的一次设置,渲染出L1, L21, L22...L34
。 当这个过程结束的时候, Alita
持有了全部组件, 会在进行一次groupSetData
修正一下数据。 这个方案只会固定的执行两次groupSetData
。另外因为全部组件在一次groupSetData
里面完成,故而不会有抖屏。
Alita 1.2
精简了react
层产生的数据描述结构,减小了描述数据的层级。补偿性的,把不少数据计算放在了wxs
脚本里面
减小生成小程序包体积
从新实现componentWillUnmount
生命周期,再也不依赖微信小程序detached
回调
修改自定义组件render
返回null
的时候,微信小程序组件依然存在的bug
修复componentGenerics 字段的在老开发者工具下的警告,在新的开发者工具下的报错
修复文件后缀为jsx的时候,转化产生的bug
其余平常bug修复
关注 ARES Labs 公众号