当前位置: 首页 > news >正文

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

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 高度颜色文本都一致。如下

帧率统计相关代码如下

界面开始滑动时开始统计 , 结束滑动时打印渲染的帧数和时间差。好了到了令人激动的PK环节了,两者的操作都是先开始快速下划,到达底部后快速上划 ,循环几次这样操作来看数据。

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

第一回合

这一回合渲染不加Thread.sleep,就正常渲染,模拟简单列表的情况。

看数据和实际体验,就知道这一回合LC 赢了,LC渲染时间更短并且渲染的帧数更多。但实际上两者体验都不差,难分伯仲,但极快滑动的时候还是感觉略微感觉LC 体验比较好,比较丝滑。不管是不是极快滑动还是慢速滑动,RV都是差不多的时间和渲染帧数,比较稳。所以这个回合算LC赢,给LC加 10分吧。

第二回合

这一回合加个 Thread.sleep(4) 半帧,模拟电商超级app首页界面, 大量渲染的情况 。

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

第三回合

这一回合加个 Thread.sleep(8) 一帧, 模拟极其大量渲染的情况 。

这一回合LC我实在玩不下去了,因为LC实在太卡了,掉帧很严重。测试RV后发现RV还是很流畅,但没有上一回合的RV流畅,极其快速滑动时RV能略微感到有一丝卡,但这一回合的RV性能依旧能吊打第二回合的LC 。这一回合给RV+100000分。

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

总结下

LC 和 RV 各有长短,就看我们如何去选择了,用在什么场景了。

该如何选择,相信大家看完也就知道了,复杂列表 (像电商首页那种) 是必须要选用RV 的,简单的列表可以选择LC,因为简单列表LC体验更好,更加丝滑,跟手性更好。

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

Android 学习笔录

Android 性能优化篇:https://qr18.cn/FVlo89
Android Framework底层原理篇:https://qr18.cn/AQpN4J
Android 车载篇:https://qr18.cn/F05ZCM
Android 逆向安全学习笔记:https://qr18.cn/CQ5TcL
Android 音视频篇:https://qr18.cn/Ei3VPD
Jetpack全家桶篇(内含Compose):https://qr18.cn/A0gajp
OkHttp 源码解析笔记:https://qr18.cn/Cw0pBD
Kotlin 篇:https://qr18.cn/CdjtAF
Gradle 篇:https://qr18.cn/DzrmMB
Flutter 篇:https://qr18.cn/DIvKma
Android 八大知识体:https://qr18.cn/CyxarU
Android 核心笔记:https://qr21.cn/CaZQLo
Android 往年面试题锦:https://qr18.cn/CKV8OZ
2023年最新Android 面试题集:https://qr18.cn/CgxrRy
Android 车载开发岗位面试习题:https://qr18.cn/FTlyCJ
音视频面试题锦:https://qr18.cn/AcV6Ap

相关文章:

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

LazyColumn 是 compose 中用来实现类似 RecyclerView 效果的控件 ,但是大家都说LazyColumn性能比RecyclerView差太多,毕竟 RecyclerView google优化了十多年了,比RecyclerView差一点也正常,今天我们就用实际数据来对比LazyColumn和…...

[python 刷题] 49 Group Anagrams

[python 刷题] 49 Group Anagrams 题目: Given an array of strings strs, group the anagrams together. You can return the answer in any order. An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically…...

vue+element plus 使用table组件,清空用户的选择项

<el-table ref"tableRef"> .... </el-table> <script lang"ts" setup> import { onMounted, reactive, ref, nextTick } from vue const clearBtn () > {console.log(清空用户的选择项)tableRef.value.clearSelection() } </scr…...

改写软件-怎么选择改写软件

什么是改写软件&#xff1f;改写软件是基于自然语言处理技术的工具&#xff0c;它们可以分析一段文字&#xff0c;并将其重新表达&#xff0c;以保持原始意义&#xff0c;但使用不同的词汇和结构。这种技术可用于减少内容的重复&#xff0c;增加多样性&#xff0c;或者简化复杂…...

gateway之跨域处理

文章目录 什么是跨域跨域带来的问题 gateway解决跨域解决跨域的其他方式比较代码示例 总结提升 什么是跨域 跨域&#xff08;Cross-Origin&#xff09;是指在浏览器中&#xff0c;当一个Web应用程序试图访问与其所属页面不同的源&#xff08;origin&#xff09;的资源时&#…...

uniapp 实现不同用户展示不同的tabbar(底部导航栏)

一、背景 最近在做一个uniapp开发的小程序遇到一个需求&#xff0c;希望不同用户登录后展示不同的tabbar页面&#xff0c;但是uniapp项目中的pages.json是只有一个list数组的&#xff0c;并且是不能写成动态效果&#xff0c;为了实现这个需求&#xff0c;便自定义了tabbar组件 …...

线性归一化是什么,用python实现数据的线性归一化

线性归一化&#xff08;Linear Normalization&#xff09;是一种常见的数据预处理方法&#xff0c;也被称为 Min-Max 归一化。它通过对原始数据进行线性变换&#xff0c;将其缩放到特定的范围内&#xff0c;常用的是将数据缩放到 [0, 1] 或 [-1, 1] 范围内。 具体来说&#xff…...

超级好用绘图工具(Draw.io+Github)

超级好用绘图工具&#xff08;Draw.ioGithub&#xff09; 方案简介 绘图工具&#xff1a;Draw.io 存储方式&#xff1a; Github 1 Draw.io 1.2 简介 ​ 是一款免费开源的在线流程图绘制软件&#xff0c;可以用于创建流程图、组织结构图、网络图、UML图等各种类型的图表。…...

全国职业技能大赛云计算--高职组赛题卷③(私有云)

全国职业技能大赛云计算--高职组赛题卷③&#xff08;私有云&#xff09; 第一场次题目&#xff1a;OpenStack平台部署与运维任务1 基础运维任务&#xff08;5分&#xff09;任务2 OpenStack搭建任务&#xff08;15分&#xff09;任务3 OpenStack云平台运维&#xff08;15分&am…...

Redis SCAN命令操作实战(详细)

目录 SCAN 介绍 SCAN 命令基本用法 MATCH 选项用法 COUNT 选项用法 TYPE 选项用法 补充 并发执行多个迭代 中途停止迭代 使用错误的游标进行增量式迭代 迭代终结的保证 SCAN 介绍 SCAN cursor [MATCH pattern] [COUNT count][TYPE type]&#xff1a;SCAN 命令及其相…...

计网第五章(运输层)(六)(TCP可靠传输的实现)

目录 一、基本概述 二、具体实现 1.前后沿&#xff1a; 2.利用指针描述发送窗口的状态 3.有差错情况 之前在数据链路层时已经讨论过可靠传输&#xff08;计网第三章&#xff08;数据链路层&#xff09;&#xff08;二&#xff09;&#xff08;可靠传输&#xff09;&#x…...

酒店外卖小程序商城的作用是什么

随着线上餐品销售属性增强&#xff0c;传统酒店除了承接到店客户&#xff0c;外送也成为生意的一部分&#xff0c;但传统打电话、微信发送的方式无法实现餐品全面呈现和客户随时订购需求&#xff0c;在配送方面也无法规范化。 除此之外&#xff0c;还需要完善营销、会员管理、…...

居家养老一键通的功能

居家养老一键通的功能 居家养老一键通是指为老年人提供全方位的居家养老服务的平台或系统。它通过整合各种资源和服务&#xff0c;为老年人提供便捷、安全、舒适的居家养老环境&#xff0c;帮助他们解决生活中的各种难题。 居家养老一键通的功能通常包括以下几个方面&#xff…...

海外代理IP是什么?如何使用?

一、海外代理IP是什么&#xff1f; 首先&#xff0c;代理服务器是在用户和互联网之间提供网关的系统或路由器。它是一个服务器&#xff0c;被称为“中介”&#xff0c;因为它位于最终用户和他们在线访问的网页之间。 海外IP代理是就是指从海外地区获取的IP地址&#xff0c;用…...

mmdetection v3避坑

命令&#xff1a; python tools/test.py projects/DiffusionDet/configs/diffusiondet_r50_fpn_500-proposals_1-step_crop-ms-480-800-450k_coco.py /data/zhangrui/mmdetection-master/checkpoints/diffusiondet_r50_fpn_500-proposals_1-step_crop-ms-480-800-450k_coco_202…...

备份服务器数据库并保存到Git仓库

备份项目及数据库脚本 #!/bin/bash # MySQL数据库信息 DB_HOST"localhost" DB_USER"root" DB_PASS"************" DB_NAME"my-space" # 导出文件目录 EXPORT_PATH"/home/MySpace/mysql" # 获取当前时间并格式…...

尚硅谷wepack课程学习笔记

为什么需要使用打包工具&#xff1f; 开发时使用的框架、es6 语法 、less 等浏览器无法识别。 需要经过编译成浏览器能识别的css、js才可以运行。 打包工具可以帮我们编译&#xff0c;号可以做代码压缩、兼容处理、性能优化。 常见的打包工具有什么&#xff1f; vite、webpac…...

c++模版元编程-可变参数模版

在 C 中&#xff0c;我们可以使用模板参数包&#xff08;Template Parameter Pack&#xff09;和展开表达式&#xff08;Expanding Expression&#xff09;来定义可变参数模板。 模板参数包 模板参数包是一种特殊的语法&#xff0c;用于表示接受多个模板类型参数或非类型参数…...

pcl--第十节 点云曲面重建

曲面重建技术在逆向工程、数据可视化、机器视觉、虚拟现实、医疗技术等领域中得到了广泛的应用 。 例如&#xff0c;在汽车、航空等工业领域中&#xff0c;复杂外形产品的设计仍需要根据手工模型&#xff0c;采用逆向工程的手段建立产品的数字化模型&#xff0c;根据测量数据建…...

【力扣-每日一题】2560. 打家劫舍 IV

class Solution { public:bool check(vector<int> &nums,int max_num,int k){//只需要计算可以偷的房间。在满足最大值为max_num下时&#xff0c;能偷的最多的房间&#xff0c;与k值比较//如果大于K&#xff0c;说明max_num还可以缩小//如果小于看&#xff0c;说明ma…...

vue简单案例----小张记事本

小张记事本 具体效果如图所示&#xff0c;这里就简单展示&#xff0c;还有很多不足的地方&#xff0c;希望大家可以对这个小项目进行改进&#xff0c;话不多说可以参考下面的代码 源代码如下 <html lang"en"><head><meta charset"UTF-8"…...

爬虫获取接口数据

上一讲讲的是获取静态网页数据的教程&#xff0c;适用于我们要爬取的数据在网页源代码中出现&#xff0c;但是还是有很多的数据是源代码中没有的&#xff0c;需要通过接口访问服务器来获得&#xff0c;下面我就来讲讲如何爬取这类数据。 以巨潮资讯网爬取比亚迪企业年报为例。…...

私域流量的变现方式,你知道多少?

私域流量的变现方式是指通过有效的管理和运营自有的用户群体&#xff0c;将流量转化为实际收益的过程。私域流量的变现方式多样&#xff0c;下面将介绍其中几种常见的方式。 1. 电商平台入驻 通过将自有流量引导到电商平台&#xff0c;开设店铺进行商品销售&#xff0c;从中获…...

Webpack配置entry修改入口文件或打包多个文件

当我们使用Webpack进行文件打包时&#xff0c;默认打包的文件是src文件下的index.js文件 一、修改Webpack打包入口 如果我们想要在其他文件下打包指定的js文件就需要在webpack.config.js文件中进行entry配置 二、将指定的多个文件打包为一个文件 现在有两个文件&#xff0c;…...

Mac mini2014(装的windows)重装回MacOS

Mac mini2014(装的windows)重装回MacOS 制作macos的启动U盘&#xff0c;我的是32G的 第一步下载你的硬件能使用的系统&#xff0c;建议最好低一个版本&#xff0c;因为我安装的时候出现问题。 下载地址&#xff1a;https://blog.csdn.net/netgc/article/details/130641479下载…...

珠海建筑模板厂家-能强优品木业:为您提供优质建筑模板解决方案

在珠海这座美丽的沿海城市&#xff0c;建筑行业蓬勃发展&#xff0c;对于高质量的建筑模板需求也日益增加。在这里&#xff0c;有一家备受赞誉的建筑模板厂家&#xff0c;那就是能强优品木业。作为一家专业的建筑模板供应商&#xff0c;他们以优质的产品和卓越的服务在业界享有…...

图像识别技术如何改变智能家居的体验?

图像识别技术在智能家居中的应用正在改变我们的生活体验。通过图像识别技术&#xff0c;智能家居可以更准确地识别用户&#xff0c;并自动调整环境以适应用户的需求。以下是图像识别技术在智能家居中的一些应用&#xff1a; 人脸识别&#xff1a;通过人脸识别技术&#xff0c;智…...

前端中blob文件流和base64的区别

在前端中&#xff0c;base64 和 fileBlob 是用于处理文件数据的两种不同方式。 1. Base64 编码 Base64 是一种将二进制数据转换为文本字符串的编码方式。它将文件数据转换为一串由 ASCII 字符组成的字符串。在前端中&#xff0c;可以使用 JavaScript 的 btoa() 和 atob() 函数…...

MySQL详解六:备份与恢复

文章目录 1. 数据库备份的分类1.1 从物理和逻辑上分类1.1.1 物理备份1.1.2 逻辑备份 1.2 从数据库的备份策略角度上分类1.2.1 完全备份1.2.2 差异备份1.2.3 增量备份 1.3 常见的备份方法 2. MySQL完全备份2.1 完全备份简介2.2 优点与缺点2.3 实现物理冷备份与恢复2.3.1 实现流程…...

什么样的应用程序适合使用Flutter开发桌面?

桌面应用开发的现状 在过去&#xff0c;桌面应用程序的开发通常需要使用特定于操作系统的工具和语言&#xff0c;如C、C#、Java等。这导致了高昂的开发成本和维护困难。尽管有一些跨平台桌面开发工具&#xff0c;如Electron和Qt&#xff0c;但它们在性能、用户体验和开发效率方…...

大丰做网站/发帖效果好的网站

一、读音不同coaching&#xff1a;英 [ˈkəʊtʃɪŋ] 美 [ˈkoʊtʃɪŋ]mentoring&#xff1a;英 [ˈmentɔ:(r)ɪŋ] 美 [mentɔ:rɪŋ]二、意思不完全同coaching 在中文里多称“教练”&#xff0c;是指导他人为了某个特定的目标而制定计划&#xff0c;并鼓励学员有创意…...

classipress wordpress 主题/网站seo哪里做的好

刚刚接触编程的小伙伴都会有这样几个疑问&#xff1a;为什么我安装完所谓的JDK还是什么的鬼的之后都找不到一个可以直接运行的程序&#xff1f;安装完之后好像还需要配置一个叫做环境变量的东西&#xff0c;据说很重要。到底怎么样才算配置成功&#xff0c;感觉电脑总是在欺负小…...

苏州吴中区做网站价格/网上销售平台

SpaceVim 是一个模块化的 Vim IDE&#xff0c;针对 C/C 语言的支持主要依靠 lang#c 模块以及与之相关的其它模块。的这篇文章主要介绍如何使用 SpaceVim 搭建 C/C 的开发环境&#xff0c;侧重介绍跟 C/C 开发相关使用技巧。在阅读这篇文章之前&#xff0c;可以先阅读《使用 Vim…...

论坛网站地图怎么做/临沂百度推广多少钱

修订的内容可以通过颜色、线形、作者、线框等进行个性化显示&#xff0c;下面学习啦小编给大家分享WPS文字保留修改痕迹的技巧&#xff0c;欢迎阅读&#xff1a;WPS文字保留修改痕迹的教程启动修订功能,点击菜单【工具】中的【修订】功能&#xff0c;如果弹出工具栏【审阅】&am…...

潍坊专业技术人员继续教育/百度笔记排名优化

蛙蛙还是给你带来了礼物。但它有个小小的要求&#xff0c;那就是你得在石头剪刀布上赢过它才能拿到礼物哦&#xff01; 现在根据你的观察&#xff0c;你已经知道了蛙蛙心想的出拳顺序&#xff0c;你需要安排自己的出拳顺序&#xff0c;使得你能在每一局中都获胜。 输入描述…...

深圳外贸公司网站建设公司排名/西安百度代运营

近些年来&#xff0c;随着社会的发展&#xff0c;人们越来越注重学生的心理健康&#xff0c;各地区教育部门相继下发规定&#xff0c;为了保护学生自尊心&#xff0c;明令禁止各个学校公开张榜学生的成绩排名单。学校不能公布学生成绩&#xff0c;家长又想了解孩子的学习情况&a…...