HarmonyOS 長(zhǎng)列表優(yōu)化

  • 懶加載:提供列表數(shù)據(jù)按需加載能力,解決一次性加載長(zhǎng)列表數(shù)據(jù)耗時(shí)長(zhǎng)、占用過(guò)多資源的問(wèn)題。
  • 緩存列表項(xiàng):通過(guò)預(yù)加載數(shù)據(jù)提升列表滑動(dòng)體驗(yàn)。
  • 組件復(fù)用:提供可復(fù)用組件對(duì)象的緩存資源池,降低相同組件短時(shí)間內(nèi)頻繁創(chuàng)建和銷毀的開銷。
  • 布局優(yōu)化:使用扁平化布局方案,減少視圖嵌套層級(jí)和組件數(shù),避免過(guò)度繪制,提升頁(yè)面渲染效率。

  • 數(shù)據(jù)量大的情況下使用懶加載LazyForEach

    性能差異

  • 緩存列表項(xiàng)cachedCount ,一般n/2為最佳,也要根據(jù)實(shí)際業(yè)務(wù)調(diào)整如: 網(wǎng)絡(luò)數(shù)據(jù)加載慢大于n/2;數(shù)據(jù)占用內(nèi)存大,適當(dāng)減少緩存小于n/2.

@Component
Struct MyComponent {
  build () {
    list() {
      //…
      LazyForEach(…)
    }.cachedCount(n/2)//n為一屏幕顯示的item數(shù)量
  }
}
  • 組件復(fù)用通過(guò)@ReusableaboutToReuse以及reuseId實(shí)現(xiàn)
//代碼片段一 
@Component
@Reusable
Export struct ArticleCardView {
  @Prop isCollected: boolean = false;
  @Prop isLiked: boolean = false;
  @Prop articleItem: LearningResource = new LearningResource();
  onCollected?: () => void;
  onLiked?: () => void;

  aboutToReuse(params) {
     this.onCollected = params.onCollected;
     this.onLiked = params.onLiked;
  }

  build() {
    ......
  }
}
//代碼片段二
@Component
export struct DiscoverView {
  private data: ArticleListData = new ArticleListData();
  ......
  build() {
    List() {
      Column() {
        LazyForEach(this.data, (item: LearningResource) => {
          ListItem() {
            Column() {
              ArticleCardView({
                articleItem: item
                ......
              })
            }
          }
          .reuseId(‘ArticleCardView')
        }, (item: LearningResource) => item.id)
      }
    }.cachedCount(3);
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容