今天要分享的是仓颉开发语言中的懒加载。

先和初学者朋友们解释一下什么是懒加载。懒加载在代码中叫做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)
}
}
}

运行效果如下:

以上就是今天的内容分享,感谢阅读。##HarmonyOS语言##仓颉##购物#

鸿蒙Next仓颉语言开发实战教程:懒加载的更多相关文章

  1. iOS开发UI篇—懒加载

    iOS开发UI篇—懒加载 1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了, ...

  2. iOS开发UI中懒加载的使用方法

    1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其getter方法.说的通俗一点,就是在开发中,当程序中需要利用的资源时.在程序启动的时候不加载 ...

  3. iOS开发——UI基础-懒加载,plist文件,字典转模型,自定义view

    一.懒加载 只有使用到了商品数组才会创建数组 保证数组只会被创建一次 只要能够保证数组在使用时才创建, 并且只会创建一次, 那么我们就称之为懒加载 lazy - (void)viewDidLoad 控 ...

  4. ESP8266 LUA脚本语言开发: 准备工作-LUA文件加载与变量调用

    前言 这节说一下多个文件调用 多个文件之间变量调用 准备两个文件 init.lua other.lua 开始 模块默认一开始调用的是init.lua 咱让init.lua调用 other.lua 很简 ...

  5. iOS开发中懒加载的使用和限制

    1.在开发过程中很多时候,很多控件和对象需要alloc为了,提高开发效率使得懒加载得以产生. 2.下边用代码解释: - (NSMutableArray *)newsArr{ if (!_newsArr ...

  6. iOS开发基础-图片切换(4)之懒加载

    延续:iOS开发基础-图片切换(3),对(3)里面的代码用懒加载进行改善. 一.懒加载基本内容 懒加载(延迟加载):即在需要的时候才加载,修改属性的 getter 方法. 注意:懒加载时一定要先判断该 ...

  7. Swift游戏开发实战教程(霸内部信息大学)

    Swift游戏开发实战教程(大学霸内部资料) 试读下载地址:http://pan.baidu.com/s/1sj7DvQH 介绍:本教程是国内第一本Swift游戏开发专向资料. 本教程具体解说记忆配对 ...

  8. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发4- 后台模板html页面创建

    上一篇教程<asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发>完成了本项目的登录模块,登录后就需要进入后台管理首页了,需要准备一个后台模 ...

  9. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发2-Model层建立

    上篇(asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作)文章讲解了开发过程中的准备工作,主要创建了项目数据库及项目,本文主要讲解项目M层的实现,M层这里 ...

  10. 微信小程序-云开发实战教程

    微信小程序-云开发实战教程 云函数,云存储,云数据库,云调用 https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/gettin ...

随机推荐

  1. Linux系统查看CPU使用率、内存使用率、磁盘使用率

    一.查看CPU使用率1. top 命令[root@sss ~]# toptop - 16:54:38 up 7 days,  5:13,  3 users,  load average: 0.00, ...

  2. webpack3使用additionalData和prependData都不管用

    10.css相关配置 utils.js sass: generateLoaders('sass', { indentedSyntax: true, implementation: require('n ...

  3. fastreport6的frxpngimage.pas不能编译xe下

    升级很痛苦,因为兼容问题. fastreport6的frxpngimage.pas不能编译出现错误 procedure TChunkIDAT.CopyInterlacedRGB8(const Pass ...

  4. python,爬取小说网站小说内容,同时每一章存在不同的txt文件中

    思路,第一步小说介绍页获取章节地址,第二部访问具体章节,获取章节内容 具体如下:先获取下图章节地址 def stepa(value,headers): lit=[] response = reques ...

  5. OpenJDK与OracleJDK--不挣钱的永远是二等公民

    众所周知,编程语言是的根是它的标准.标准和国际技术组织密切相关,比如 c++标准,由国际标准化组织(ISO) 的 C++ 标准委员会ISO/IEC JTC1/SC22/WG21)维护更新,他们发布的标 ...

  6. SpringBoot配置@ConfigurationProperties(prefix = "pig")时中文乱码

    问题出现 通过@ConfigurationProperties(prefix = "pig")注解进行属性绑定的时候,application.properties文件中出现中文,从 ...

  7. 仿EXCEL插件,智表ZCELL产品V2.0 版本发布,优化全键盘操作,增加JSON格式导入导出功能

    详细请移步 智表(ZCELL)官网www.zcell.net 更新说明  这次更新主要应用户要求,主要一方面重构了底层,优化了键盘操作,支持全键盘录入,另一方面增加了JSON格式的导入导出,支持终端用 ...

  8. OSS 上传和删除图片 Python SDK

    最近在搞一些全栈的小项目, 涉及到图片的上传, 删改等操作, 想着还是用这个云服务器来整一波, 阿里云的 OSS对象存储, 40G 1年9块钱, 值得拥有! 前提 购买了阿里云 OSS 服务 创建了 ...

  9. SQL 强化练习 (九)

    这两天在写一个权限的sql, 涉及 3 张表, 然后做了一个 union all 的操作, 感觉效率有点问题, 写套娃, 改来改去的做优化. 关键数据又不能贴, 嗯, 还是明天搞个假数据来说明这个关系 ...

  10. 那些神奇的CSS特性,你都有用过么?

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...