首页 > 其他分享 >【HarmonyOS】性能优化之低代码开发加载多张轮播图

【HarmonyOS】性能优化之低代码开发加载多张轮播图

时间:2023-08-03 11:03:11浏览次数:35  
标签:defaultload index 轮播 之低 HarmonyOS 组件 页面 Swiper 加载

【关键字】

HarmonyOS、低代码开发、Swiper组件、性能优化、分页加载

写在前面

目前使用DevEco Studio的低代码工具开发元服务时,通过实际测试发现,Swiper组件加载多张轮播图时加载显示耗时较长(实际测试网络状态一般的情况下显示耗时达到8秒以上),根据互联网中的8秒定律,这严重影响了用户体验,那么该怎么优化这个问题呢?

1、解决方案

由于需要加载的图片数量较多(40+),这里突出的是数量的问题,那么我们可以思考一下一般我们在处理数据量较大的数据列表时是如何做的呢?答案就是:分页加载。

解决问题的思路有了,接下来就动手具体来实践一下吧。

优化方案及场景对比:

整体上我们准备两个页面,一个页面中通过分页加载图片,另一个页面采用低码组件默认的方式加载图片,整体步骤分为以下3步:

①、开发页面:index.visual+index.js,该页面使用分页加载的方式

②、开发页面:defaultload.visual+defaultload.js,该页面使用默认的加载方式

③、调试及运行

2、开发实战

2.1、分页加载

index.visual界面布局:

最外层是一个Div组件宽高都是100%,内部是一个Swiper组件,设置宽100%,高220px,设置自动轮播为true,Swiper内部是Image组件,设置Image组件的宽高都是100%,整体布局效果如下:

【HarmonyOS】性能优化之低代码开发加载多张轮播图_加载

由于目前低码中的Swiper组件无法支持分页加载的相关设置,所以我们需要通过高低码结合的方式来实现。打开entry/src/main/js/default/pages/index目录下同名的index.js文件,编写相关相关实现代码:

export default {
data: {
showImageList: [],
currentIndex: 0,
startIndex: 0,
bannerList: [
// 此处省略图片加载地址,这里准备了图片地址一共40+
]
},
onInit() {
this.loadBanner()
},

// 图片分页加载,每次5张
// slice() 方法以新的数组对象,返回数组中被选中的元素,从start 开始到end 结束,但不包括end
loadBanner() {
const tempData = this.bannerList.slice(this.startIndex, this.startIndex + 5)
if (tempData.length > 0) {
this.startIndex += tempData.length
this.showImageList.push(...tempData)
}
},

// 用来绑定change事件,change事件是在组件索引变化时触发,提前加载下一页的图片
changeImage({index}) {
if (index + 2 >= this.showImageList.length && this.showImageList.length < this.bannerList.length) {
this.loadBanner()
}
}
}

【HarmonyOS】性能优化之低代码开发加载多张轮播图_Image_02

然后回到index.visual文件,选中Swiper组件,在右侧属性样式面板中选择“事件”选项,在Change事件中绑定上面定义的changeImage()函数:

【HarmonyOS】性能优化之低代码开发加载多张轮播图_分页_03

然后选中Image组件,在For属性和Src属性中绑定数据:

【HarmonyOS】性能优化之低代码开发加载多张轮播图_加载_04

最后,我们回到index.js文件中,定义页面跳转事件,并且将bannerList图片数据传递到下一个页面中,以供下一个页面展示数据使用:

routerToNewPage(){
router.push({
uri:"pages/index/defaultload/defaultload",
params:{
imageList:this.bannerList
}
})
},

【HarmonyOS】性能优化之低代码开发加载多张轮播图_加载_05

把该函数绑定到组件的Click事件上:

【HarmonyOS】性能优化之低代码开发加载多张轮播图_加载_06

2.2、默认加载

defaultload.visual界面布局:

页面布局这部分我们保持跟前面的index.visual页面中的布局一致,最外层是一个Div组件宽高都是100%,内部是一个Swiper组件,设置宽100%,高220px,设置自动轮播为true,Swiper内部是Image组件,设置Image组件的宽高都是100%,整体布局效果如下:

【HarmonyOS】性能优化之低代码开发加载多张轮播图_分页_07

然后同样找到entry/src/main/js/default/pages/index/defaultload目录下同名的defaultload.js文件,在这个文件中代码很简单,我们只需要定义一个同名的接收参数的字段即可:

export default {
data: {
imageList:[]
},
onInit() {

}
}

【HarmonyOS】性能优化之低代码开发加载多张轮播图_加载_08

然后再回到defaultload.visual文件,选中组件树中的Image组件,为其绑定数据:

【HarmonyOS】性能优化之低代码开发加载多张轮播图_分页_09

3、效果对比

通过上述的实战操作,我们就已经完成了两种方式的图片加载的开发,下面通过调试运行来看一下实际的加载速度的效果对比:

【HarmonyOS】性能优化之低代码开发加载多张轮播图_加载_10

OK,今天的内容就到这里了,下期再会!


标签:defaultload,index,轮播,之低,HarmonyOS,组件,页面,Swiper,加载
From: https://blog.51cto.com/u_15687416/6947360

相关文章

  • vue中展示多张小图轮播每几秒走一张,支持左右点击
    html部分    <divclass="regional-services-list"style="overflow:hidden;"@mouseenter="stopCar()"@mouseleave="starCar()">     <divclass="preIcon"@click="preChange()"><......
  • 在线直播系统源码,vant 轮播图组件
    在线直播系统源码,vant轮播图组件 <template> <van-swipe:autoplay="3000"indicator-color="#1baeae">  <van-swipe-itemv-for="(item,index)inlist":key="index">   <img:src="item.carouselUrl"......
  • 【HarmonyOS】键盘遮挡输入框时,实现输入框显示在键盘上方
    ​【关键字】harmonyOS、键盘遮挡input,键盘高度监听 【写在前面】在使用API6、API7开发HarmonyOS应用时,常出现页面中需要输入input,但是若input位置在页面下方,在input获取焦点的时候,会出现软键盘挡住input情况,对于这个问题,这里介绍如何在input获取焦点时,将input显示在键盘上方......
  • 设置轮播图的高度和宽度一样
     设置轮播图的高度和宽度一样不能用height:100%,只能是页面加载后取当前窗口宽度,再设置样式高度为取到的值 this.winWidth=uni.getWindowInfo().windowWidthconsole.log("当前窗口宽度:"+this.winWidth);<swiperclass="swiper":style="{height:winWidth......
  • OpenHarmony/HarmonyOS路由跳转并传值
    OpenHarmony/HarmonyOS路由跳转并传值作者:坚果团队:坚果派公众号:“大前端之旅”润开鸿技术专家,华为HDE,InfoQ签约作者,OpenHarmony布道师,擅长HarmonyOS应用开发、熟悉服务卡片开发,在“战码先锋”活动中作为大队长,累计培养三个小队长,带领100+队员完成Pr的提交合入。欢迎通过主页或......
  • ArkTS语言OpenHarmony/HarmonyOS项目代码规范
    ArkTS语言OpenHarmony/HarmonyOS项目代码规范作者:坚果团队:坚果派公众号:“大前端之旅”润开鸿技术专家,华为HDE,InfoQ签约作者,OpenHarmony布道师,擅长HarmonyOS应用开发、熟悉服务卡片开发,在“战码先锋”活动中作为大队长,累计培养三个小队长,带领100+队员完成Pr的提交合入。欢迎通过主......
  • 【HarmonyOS】ArkTS 组件内转场动画,动画播放时颜色异常问题
    ​【关键字】HarmonyOS、ArkTS、组件内转场动画、颜色异常 【问题描述】根据组件内转场动画文档中示例编写代码,使用动画转场组件button,并给button设置背景色让button透明度为0,实现动画转场时,会先出现默认蓝色button,然后动画再消失,问题代码如下所示:@Stateflag:boolean=t......
  • 【HarmonyOS】ArkTS 组件内转场动画,动画播放时颜色异常问题
    【关键字】HarmonyOS、ArkTS、组件内转场动画、颜色异常【问题描述】根据组件内转场动画文档中示例编写代码,使用动画转场组件button,并给button设置背景色让button透明度为0,实现动画转场时,会先出现默认蓝色button,然后动画再消失,问题代码如下所示:@Stateflag:boolean=true;@State......
  • HDC.Together2023 HarmonyOS学生公开课议程抢先看!
     未来已来,见证相遇万众瞩目的HarmonyOS学生公开课于8月6日9:30正式起航关注HarmonyOS生态前景聚焦HarmonyOS新技术畅谈HarmonyOS未来把握时代发展机遇,让我们同心而行和HarmonyOS一起创造无限可能   ......
  • 庆军之低代码vue模式
    原来render(h),h并不是一个对象。我一直以为,我可以写成render(h){ createuibycode(h,data,data.Data);returnh;},metchs:{createuibycode(h,ui,Data){....varuitype=ui....varuiprops=ui.propsvarsmh=h(uitype,uiprops,[]); }} 结果以上方案无法显......