鸿蒙NEXT开发【Grid网格布局性能提升】常见性能场景

概述

在实现如下图所示可滚动布局效果时,可能会通过[columnStart/columnEnd]对GridItem设置其占有行列数,实现不规则的布局效果。

图1 columnStart/columnEnd实现不规则网格布局
1

如果遇到如下的使用场景,使用columnStart/columnEnd可能会造成性能问题:

  1. 删除或拖拽等改变GridItem位置
  2. 使用scrollToIndex滑动到指定GridItem

Grid中存在大量GridItem,当使用columnStart/columnEnd、rowStart/rowEnd设置GridItem大小,该场景下耗时过长时,应该考虑使用GridLayoutOptions提升性能。使用columnStart/columnEnd、rowStart/rowEnd布局,在scrollToIndex滑动指定Index时,Grid会遍历GridItem去查找位置。而使用GridLayoutOptions布局,在scrollToIndex滑动指定Index时,则是通过计算方式去查找位置,查找GridItem位置效率更高。对此,可以通过GridLayoutOptions布局选项,配合rowsTemplate、columnsTemplate仅设置其中一个的Grid使用,替代通过columnStart/columnEnd控制GridItem占用多列的情况

案例说明

场景示例

下面介绍Grid中使用scrollToIndex滑动到指定位置的场景为例。在案例中采有了columnStart/columnEnd设置了不规则的宫格布局的反例,以及才有GridLayoutOption的正例进行对比,示例代码如下:

反例: 使用columnStart,columnEnd设置GridItem大小。

// 导入性能打点模块
import hiTraceMeter from '@ohos.hiTraceMeter';

@Component
struct TextItem {
  @State item: string = "";

  build() {
    Text(this.item)
      .fontSize(16)
      .backgroundColor(0xF9CF93)
      .width('100%')
      .height(80)
      .textAlign(TextAlign.Center)
  }

  aboutToAppear() {
    // 结束打点任务
    hiTraceMeter.finishTrace("useColumnStartColumnEnd", 1);
  }
}

class MyDataSource implements IDataSource {
  private dataA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值