鸿蒙HarmonyOS NEXT开发:ArkUI高性能开发-(Swiper高性能开发指南)

往期鸿蒙全套实战精彩文章必看内容:


概述

在应用开发中,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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值