鸿蒙Next仓颉语言开发实战教程:懒加载

布局王
• 阅读 3

今天要分享的是仓颉开发语言中的懒加载。 先和初学者朋友们解释一下什么是懒加载。懒加载在代码中叫做LazyForEach,看到名字你一定能猜到它和ForEach的功能类似。只不过和ForEach的一次性加载所有数据不同,懒加载会根据屏幕可使区域按需加载数据,并且当内容滑出屏幕范围时,懒加载又会自动将这些内容销毁。 所以懒加载对于程序的性能有显著的优化,对于用户的体验也有大幅的提升,这一点幽蓝君在ArkTs语言中已经做过对比。当数据比较多比较大的时候强烈建议大家使用懒加载。 LazyForEach的用法和ForEach相比较为麻烦一些,它的数据源要求IDataSource类型,我们需要先自定义这个数据类型。IDataSource中有一些方法,主要用来获取数据和监听数据改变:

public interface IDataSource<T> {
    func totalCount(): Int64
    func getData(index: Int64): T
    func onRegisterDataChangeListener(listener: DataChangeListener): Unit
    func onUnregisterDataChangeListener(listener: DataChangeListener): Unit
}

我在本地服务器放了几张高清图片,下面以加载这些高清图片为例,为大家演示懒加载的具体用法:

package ohos_app_cangjie_entry.page
import ohos.base.*
import ohos.component.*
import ohos.state_manage.*
import ohos.state_macro_manage.*
import std.collection.ArrayList
import std.collection.*
class CoverDataSource <: IDataSource<String> {
    public CoverDataSource(let data_: ArrayList<String>) {}
    public var listenerOp: Option<DataChangeListener> = None
    public func totalCount(): Int64 {
        return data_.size
    }
    public func getData(index: Int64): String {
        return data_[index]
    }
    public func onRegisterDataChangeListener(listener: DataChangeListener): Unit {
        listenerOp = listener
    }
    public func onUnregisterDataChangeListener(listener: DataChangeListener): Unit {
        listenerOp = None
    }
    public func notifyChange(): Unit {
        let listener: DataChangeListener = listenerOp.getOrThrow()
        listener.onDataReloaded()
    }
}
func getDS(): CoverDataSource
{
    let data: ArrayList<String> = ArrayList<String>([
        'http://example.com/youlanApi/cover/lazy1.jpg',
        'http://example.com/youlanApi/cover/lazy2.jpg',
        'http://example.com/youlanApi/cover/lazy3.jpg',
        'http://example.com/youlanApi/cover/lazy4.jpg',
        'http://example.com/youlanApi/cover/lazy5.jpg',
        'http://example.com/youlanApi/cover/lazy6.jpg',
        'http://example.com/youlanApi/cover/lazy7.jpg',
        'http://example.com/youlanApi/cover/lazy8.jpg',
        'http://example.com/youlanApi/cover/lazy9.jpg',
         'http://example.com/youlanApi/cover/lazy10.jpg',
        'http://example.com/youlanApi/cover/lazy11.jpg'
        ])
    let dataSourceStu: CoverDataSource = CoverDataSource(data)
    return dataSourceStu
}
let coverDataSource: CoverDataSource = getDS()
@Entry
@Component
public  class lazypage {
    func build(){
        Column(30) {
            Grid {
                LazyForEach(coverDataSource, itemGeneratorFunc: {cover: String, idx: Int64 =>
                    GridItem {
                        Image(cover)
                            .width(100.percent)
                            .height(300)
                    }
                })
            }
            .height(100.percent)
            .width(100.percent)
            .columnsTemplate('1fr 1fr')
            .columnsGap(5)
            .rowsGap(5)
            .backgroundColor(0xFFFFFF)
            .padding(right: 5, left: 5)
        }
    }
}

运行效果如下: 鸿蒙Next仓颉语言开发实战教程:懒加载 以上就是今天的内容分享,感谢阅读。##HarmonyOS语言##仓颉##购物#

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
vue 路由懒加载
原文链接: vue路由懒加载(https://my.oschina.net/ahaoboy/blog/1796979)路由懒加载当打包构建应用时,Javascript包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了。结合Vue的异步组件
Easter79 Easter79
3年前
vue 路由 懒加载
原文链接: vue路由懒加载(https://my.oschina.net/ahaoboy/blog/1618024)路由懒加载当打包构建应用时,Javascript包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了。结合Vue的异步组
Wesley13 Wesley13
3年前
viewpage里fragment懒加载与缓存已经创建的fragment
以下内容来源于网络收集:新闻类应该最常见的就是viewpage,Fragment.懒加载的方式基本都是通过setUserVisibleHint的方式来判断当前的Fragment是不是可见,但是如果想只有第一次加载数据后面再显示不加载数据,就必须还要做一些其他的判断下面直接看代码:privatebooleanhasCreateV
Stella981 Stella981
3年前
JavaScript——图片懒加载
前言有一个朋友问我这个问题,刚好有时间,现在就简单的写个Demo~github|https://github.com/wangyang0210/bky/tree/picLoadLazy(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fwan
Stella981 Stella981
3年前
Angular性能优化实践——巧用第三方组件和懒加载技术
应该有很多人都抱怨过Angular应用的性能问题。其实,在搭建Angular项目时,通过使用打包、懒加载、变化检测策略和缓存技术,再辅助第三方组件,便可有效提升项目性能。为了帮助开发者深入理解和使用Angular,本文将以我司客户中最为典型的业务场景——在线表格编辑为例,演示如何借助懒加载技术,在基于Angular的框架中实现在线导入导出Excel
Stella981 Stella981
3年前
Angular中,模块加载的几种方法
一、懒加载  通过路由配置: {path:'flightbooking',loadChildren:'./flightbooking/flightbooking.moduleFlightBookingModule'}好处:这种方式有利于
融云IM即时通讯 融云IM即时通讯
6个月前
融云IM干货丨有没有插件能帮我优化uni-app的页面加载速度?
根据您的需求,以下是一些可以帮助优化uniapp页面加载速度的插件和方法:1.图片懒加载插件:使用图片懒加载可以显著减少首屏的加载时间。可以在页面滚动时才加载图片,减少初次加载的压力。2.代码拆分和懒加载:根据页面和功能的使用情况,将代码拆分为多个模块,并
陈杨 陈杨
2天前
鸿蒙5开发宝藏案例分享---体验流畅的首页信息流
🌟鸿蒙新闻类首页开发全攻略:流畅动效懒加载实战Hey各位鸿蒙开发者!今天要分享一个超实用的鸿蒙新闻类首页开发方案,官方文档里藏着的宝藏案例被我挖出来了!从流畅的Tab切换动效到丝滑的懒加载列表,手把手带大家实现高性能新闻首页👇🚀整体场景效果用户操作
陈杨 陈杨
2天前
鸿蒙5开发宝藏案例分享---Swiper组件性能优化实战
1.懒加载:LazyForEach替代ForEach原理:只渲染可视区域内的页面,滑出后自动销毁。//优化前:ForEach一次性加载所有页面(内存爆炸!)Swiper()ForEach(this.list,(item:number)SwiperItem(