往期鸿蒙全套实战精彩文章必看内容:
概述
在应用开发中,Swiper组件常用于翻页场景,比如:桌面、图库等应用。Swiper组件滑动切换页面时,基于按需加载原则通常会在下一个页面将要显示时才对该页面进行加载和布局绘制。针对复杂页面场景,该过程可能会持续较长时间,导致滑动过程中出现卡顿,对滑动体验造成负面影响,甚至成为整个应用的性能瓶颈。
本文主要介绍Swiper性能优化的相关方法。
懒加载
原理介绍
懒加载LazyForEach从提供的数据源按需迭代数据,并在每次迭代过程中创建相应的组件,Swiper采用LazyForEach进行数据懒加载,在布局时会根据可视区域按需创建Swiper子组件,并在Swiper子组件滑出可视区域外时销毁以降低内存占用。
场景案例
为了体现Swiper使用ForEach与LazyForEach加载的性能差距,本地模拟答题场景进行测试分析。
Swiper子组件核心代码如下
@Component
struct SwiperItem {
//题干
private questionStr: string = '';
//题目相关的图片资源
private image: string | PixelMap = '';
//答案选项
private answerStr: string[] = [];
//当前题号
private myIndex: number = 0;
//构造数据
aboutToAppear(): void {
// 初始化题干、图片链接、答案选项
// ...
}
build() {
Column() {
// 题干
Text(this.questionStr)
.fontSize(26)
.width('100%')
// 题目相关图片
Image(this.image)
.width('100%')
.objectFit(ImageFit.Contain)
.margin({ top: 12, bottom: 12 })
// 答案
ForEach(this.answerStr, (item: string, index: number) => {
Text(item)
.width('100%')
.fontSize(26)
})
}
// ...
}
}
Swiper主页面核心代码如下
- 使用ForEach对页面进行加载
aboutToAppear(): void { for (let i = 0; i < 1000; i++) { th