鸿蒙开发第3篇__大数据量的列表加载性能优化

列表 是最常用到的组件

一 ForEach

渲染控制语法————Foreach
Foreach的作用

  • 遍历数组项,并创建相同的布局组件块
  • 在组件加载时, 将数组内容数据全部创建对应的组件内容, 渲染到页面上
const swiperImage: Resource[] ={$r("app.media.ic_home"),$r("app.media.ic_coupons"),$r('app.media.ic_internal_price')
};
Swiper(){Foreach(swiperImage, (item: Resource) =>{Image(item).width("100%")...}, (item: Resource) => JSON.stringify(item))
}

二. LazyForEach

渲染控制语法 ————LazyForeach

  • 使用 LazyForeach时,框架会根据滚动容器可视区域按需创建组件, 当组件滑出可视区域外时,框架会进行组件销毁回收以降低内存占用, 提高首次加载的速度
  • 不可滚动容器使用LazyForeach, 其会退化为Foreach, 全部创建内容
  • 使用的数据源需要继承 IDatasource 接口
WaterFlow(){LazyForEach(this.datasource, (item: ProductBean) =>{FlowItem(){FlowItemComponent({item: item})}}, (item: ProductBean) => JSON.stringify(item))
}

三 List列表

List 支持懒加载能力

List(){ForEach(mainViewModel.getSettingListData(),(item: ItemData) =>{ListItem(){this.settingCell(item)}},item => item.toString())
}.divider({...})

四 Grid网格布局

实现二维布局, 可以根据rowsTemplate, columnTemplate 设置行数和列数

 Grid(){ForEach(mainViewModel.getFirstGridData(),(item: ItemData) =>{GridItem(){Column(){Image(item.img)Text(item.title)}}}, item => item.toString())
}.rowsTemplate("1fr 1fr")
.columnsTemplate("1fr 1fr  1fr 1fr")
.rowsGap(12)
.columnsGap(8)

网络显示如下图 方框所示
在这里插入图片描述

五 性能优化

在大数据量情况下, 例如超过10万
使用ForEach加载 List, 会出现白屏, 使用LazyForEach 不会白屏。
ForEach为什么会有性能问题, 假设有1万条数据, 手机的可视区域只能显示5条, 剩余9千多条也会全量加载,ForEach的加载原理就是这样。
LazyForEach实现了按需加载, 减少了页面首次启动时一次性加载数据的时长, 减少了内存峰值。

要对性能优化, 就需要引入指标来进行分析、比较
在这里插入图片描述
我们可以从4方面进行优化

  1. 优化1 懒加载
  2. 优化2 缓存列表项
  3. 优化3 组件复用
  4. 优化4 布局优化
    在这里插入图片描述

在这里插入图片描述
注意: 通过设置cachedCount 来指定缓存数量。
不同cachedCount 对列表滑动帧率的影响
一般而言, 缓存的cachedCount= n/2(n为一屏显示的列表数) 的时候, 效果较好。
如果列表项中需要显示网络数据, 而网络数据加载较慢,为了提升列表信息的浏览效率和浏览体验, 我们可以适当的多设置一些缓存数量;
如果列表中需要加载一些大图或者视频等, 占用的内存较大,为了减少内存的占用, 我们需要适当地减少缓存数量的设置 (cachedCount < n/2).


在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/467109.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【EAI 019】Eureka: Human-Level Reward Design via Coding LLM

论文标题&#xff1a;Eureka: Human-Level Reward Design via Coding Large Language Models 论文作者&#xff1a;Yecheng Jason Ma, William Liang, Guanzhi Wang, De-An Huang, Osbert Bastani, Dinesh Jayaraman, Yuke Zhu, Linxi Fan, Anima Anandkumar 作者单位&#xff…

书生·浦语大模型第四课作业

基础作业&#xff1a; 构建数据集&#xff0c;使用 XTuner 微调 InternLM-Chat-7B 模型, 让模型学习到它是你的智能小助手&#xff0c;效果如下图所示&#xff0c;本作业训练出来的模型的输出需要将不要葱姜蒜大佬替换成自己名字或昵称&#xff01; 1.安装 # 如果你是在 Int…

使用 Windows 11/10 上的最佳 PDF 转 Word 转换器释放 PDF 的潜力

毫无疑问&#xff0c;PDF 是最好的文档格式之一&#xff0c;但就像其他格式一样&#xff0c;有时它们确实会带来一些限制。例如&#xff0c;在某些情况下&#xff0c;您可能想要将 PDF 转换为 Word。在这种情况下&#xff0c;您始终可以借助 PDF 到 Word 转换器的帮助。 为了说…

【C语言期末项目-通讯录】-升级可动态申请内存版(手把手详细过程,期末评分A+的项目,答辩辅助神博文,建议三连点赞收藏)

目录 ​编辑 前言&#xff1a; 1.项目功能需求分析 2.文件框架说明 3.程序主框架实现 4.创建联系人结构体类型和通讯录结构体类型 4.1创建通讯录 5.程序功能实现--封装功能函数实现不同功能 5.1通讯录初始化 5.2增加联系人 5.3显示所有联系人的信息 5.4删除指定…

又见彩票事件(含米哈游算法变形题)

又见彩票事件 1月17日&#xff0c;中国体彩最新开奖结果出炉&#xff0c;其中“排列3”和“排列5”均出现罕见的“连5”组合。 体彩“排列3”的开奖号码为“555”&#xff0c;“排列5”的开奖号码为“55555”。 5亿奖池被清空。 开奖后第二天就有同学问我怎么看。 我 ... 我能怎…

python系统学习Day1

section1 python introduction 文中tips只做拓展&#xff0c;可跳过。 PartOne introduction 首先要对于python这门语言有一个宏观的认识&#xff0c;包括特点和应用场景。 特点分析&#xff1a; 优势 提供了完善的基础代码库&#xff0c;许多功能不必从零编写简单优雅 劣势 运…

Microsoft Word 超链接

Microsoft Word 超链接 1. 取消超链接2. 自动超链接2.1. 选项2.2. 校对 -> 自动更正选项2.3. Internet 及网络路径替换为超链接 References 1. 取消超链接 Ctrl A -> Ctrl Shift F9 2. 自动超链接 2.1. 选项 2.2. 校对 -> 自动更正选项 ​​​ 2.3. Internet…

JS逆向进阶篇【去哪儿旅行登录】【上篇】

目标url: aHR0cHM6Ly91c2VyLnF1bmFyLmNvbS9wYXNzcG9ydC9sb2dpbi5qc3A 实现难点&#xff1a; 逆向滑块请求发送短信登录 目录 每篇前言&#xff1a;0、前置技术栈&#xff08;1&#xff09;JS实现页面滑动&#xff08;2&#xff09;JS实现记录滑动轨迹&#xff08;3&#xff…

Pandas从基础统计到高级分析的完整指南【第77篇—Pandas高级分析】

Pandas从基础统计到高级分析的完整指南 在数据科学和分析领域中&#xff0c;Pandas是Python中最受欢迎的数据处理库之一。它提供了丰富而强大的功能&#xff0c;其中包括各种统计方法&#xff0c;用于更好地理解和分析数据。本文将介绍Pandas中常用的统计方法&#xff0c;通过…

分享80个jQuery特效,总有一款适合您

分享80个jQuery特效&#xff0c;总有一款适合您 80个jQuery特效下载链接&#xff1a;https://pan.baidu.com/s/1o8TcFu68r67e7VeiwmR-XQ?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理…

游泳耳机怎么选?四大口碑最好游泳耳机推荐

在挑选适合游泳的耳机时&#xff0c;选择合适的产品至关重要。游泳不仅是一项身体锻炼&#xff0c;更是一种享受。佩戴耳机能够为游泳者提供更加愉悦的体验&#xff0c;但确保所选耳机符合水中使用的要求至关重要。 传统的有线耳机和非防水设计的蓝牙耳机并不适合水中使用&…

牛客错题整理——C语言(实时更新)

1.以下程序的运行结果是&#xff08;&#xff09; #include <stdio.h> int main() { int sum, pad,pAd; sum pad 5; pAd sum, pAd, pad; printf("%d\n",pAd); }答案为7 由于赋值运算符的优先级高于逗号表达式&#xff0c;因此pAd sum, pAd, pad;等价于(…