- 懶加載:提供列表數(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ò)
@Reusable和aboutToReuse以及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);
}
}
