鸿蒙(HarmonyOS)性能优化实战-Grid高性能开发

往期知识点整理

概述

在构建大型、复杂应用时,性能优化至关重要。Grid布局作为一种高效布局方式,可以提高页面的均分能力、子组件占比控制能力及自适应布局能力。本文将介绍Grid在高性能开发方面的应用,包括懒加载、cachedCount、组件复用和使用GridLayoutOptions设置GridItem大小等方法,帮助开发者优化Grid布局性能,减少加载和渲染时间,提升用户体验。

使用懒加载等方式提升Grid性能

关于懒加载、cachedCount、组件复用的原理机制的介绍请参考 应用列表场景性能提升实践。

使用场景

懒加载:LazyForEach是一种在处理大量数据时提高性能的优化策略。它提供数据按需加载能力,解决一次性加载大量数据耗时长、占用过多资源的问题,可以提升页面响应速度。通常用于List、Grid以及Swiper等容器组件。当Grid需要循环渲染具有相同布局的子组件且需要展示大量数据,一次性加载所有数据的创建、渲染页面产生性能瓶颈时,应该考虑使用LazyForEach懒加载。

cachedCount:在Grid组件中,cachedCount用于设置预加载的GridItem的数量,仅在使用LazyForEach懒加载时有效。当Grid懒加载数据项比较耗时,如需要从网络获取视频数据、图片,容易出现滑动白块时,应该考虑使用cachedCount调整GridItem缓存数量。

组件复用:组件复用提供可复用组件对象的缓存资源池,通过重复利用已经创建过并缓存的组件对象,降低组件短时间内频繁创建和销毁的开销,从而提升组件渲染效率。当开发者的应用中存在滑动场景下对同一类自定义组件的实例进行频繁的创建与销毁、反复切换条件渲染的控制分支,且控制分支中的组件子树结构比较复杂,并成为UI线程的帧率瓶颈时,应该考虑使用组件复用提高页面的加载速度和响应速度。

场景示例

以下是Grid组件关于懒加载、cachedCount、组件复用的一个基本示例:

// MyDataSource类实现IDataSource接口
class MyDataSource implements IDataSource {
   
   
  private dataArray: number[] = [];

  public pushData(data: number): void {
   
   
    this.dataArray.push(data);
  }

  // 数据源的数据总量
  public totalCount(): number {
   
   
    return this.dataArray.length;
  }

  // 返回指定索引位置的数据
  public getData(index: number): number {
   
   
    return this.dataArray[index];
  }

  registerDataChangeListener(listener: DataChangeListener): void {
   
   
  }

  unregisterDataChangeListener(listener: DataChangeListener): void {
   
   
  }
}

@Entry
@Component
struct MyComponent {
   
   
  // 数据源
  private data: MyDataSource = new MyDataSource();

  aboutToAppear() {
   
   
    for (let i = 1; i < 1000; i++) {
   
   
      this.data.pushData(i);
    }
  }

  build() {
   
   
    Column({
   
    space: 5 }) {
   
   
      Grid() {
   
   
        LazyForEach(this.data, (item: number) => {
   
   
          GridItem() {
   
   
            // 使用可复用自定义组件
            ReusableChildComponent({
   
    item: item })
          }
        }, (item: string) => item)
      }
      .cachedCount(2) // 设置GridItem的缓存数量
      .columnsTemplate(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值