LazyColumn 是 compose 中用来完成相似 RecyclerView 作用的控件 ,可是咱们都说LazyColumn功能比RecyclerView差太多,毕竟 RecyclerView google优化了十多年了,比RecyclerView差一点也正常,今天咱们就用实际数据来对比LazyColumn和RecyclerView,看看后起之秀Compose LazyColumn 对比下老大哥RecyclerView差在哪里( Flutter列表控件就不拿来比了,肯定比不过这两个)。首先咱们得知道流通性的评判规范。

流通性评判规范

业界常用 FPS (每秒烘托的帧数)来评测流通性 , FPS 越高界面越流通 。 现在屏幕改写率大部分都为120hz, 所以1/120 约等于8.3ms毫秒屏幕改写一次,60hz屏为16.6ms。咱们能够根据LC和RV 快速滑动时,监听滑动开端和完毕,去计算这个时刻段两者的烘托帧数和烘托总耗时来评判两者的功能。

好了理论说完了,解下来便是写代码实操了,实践出真知,数据才能证明一切,Talk is cheap. Show me the code 。

准备数据

为了简洁起见,以下将LazyColumn简称LC, RecyclerView 简称RV 。

为了公平起见,咱们统一在LC 和 RV 填充相同都的数据 ,列表巨细都为200个,都用系统供给的控件,LC 用 Text ,RV 用TextView ,Text 和 TextView 高度色彩文本都一致。如下

Compose LazyColumn  对比 RecyclerView ,谁的性能更好?

Compose LazyColumn  对比 RecyclerView ,谁的性能更好?

帧率计算相关代码如下

Compose LazyColumn  对比 RecyclerView ,谁的性能更好?

界面开端滑动时开端计算 , 完毕滑动时打印烘托的帧数和时刻差。好了到了令人激动的PK环节了,两者的操作都是先开端快速下划,到达底部后快速上划 ,循环几次这样操作来看数据。

至于运用都是官方示例运用,不存在因为运用的问题影响结果吧?

榜首回合

这一回合烘托不加Thread.sleep,就正常烘托,模仿简略列表的状况。

Compose LazyColumn  对比 RecyclerView ,谁的性能更好?

看数据和实际体会,就知道这一回合LC 赢了,LC烘托时刻更短而且烘托的帧数更多。但实际上两者体会都不差,难分伯仲,但极快滑动的时候仍是感觉稍微感觉LC 体会比较好,比较丝滑。不论是不是极快滑动仍是慢速滑动,RV都是差不多的时刻和烘托帧数,比较稳。所以这个回合算LC赢,给LC加 10分吧。

第二回合

这一回合加个 Thread.sleep(4) 半帧,模仿电商超级app主页界面, 很多烘托的状况 。

Compose LazyColumn  对比 RecyclerView ,谁的性能更好?

看数据认为LC更好,但实际体会,极快速滑动状况下LC会出现极为显着的卡顿的现象,而RV不论怎么滑都仍是很丝滑 ,不存在卡顿现象,所以这个回合算RV赢了,给RV加100分。

第三回合

这一回合加个 Thread.sleep(8) 一帧, 模仿极端很多烘托的状况 。

Compose LazyColumn  对比 RecyclerView ,谁的性能更好?

这一回合LC我真实玩不下去了,因为LC真实太卡了,掉帧很严重。测验RV后发现RV仍是很流通,但没有上一回合的RV流通,极端快速滑动时RV能稍微感到有一丝卡,但这一回合的RV功能仍旧能吊打第二回合的LC 。这一回合给RV+100000分。

至于为什么杂乱列表LC烘托帧数更多耗时更短,但反而更卡顿的原理,考虑文章篇幅 ,之后再写吧。

总结下

LC 和 RV 各有长短,就看咱们怎么去挑选了,用在什么场景了。

该怎么挑选,相信咱们看完也就知道了,杂乱列表 (像电商主页那种) 是必需要选用RV 的,简略的列表能够挑选LC,因为简略列表LC体会更好,更加丝滑,跟手性更好。

当然LC 还在google的优化中 , 之后的LC肯定也会和他老大哥RV 相同,不论面对什么场景都会有着更加安稳的体现。