随手记:小程序setData 数据传输长度为 XXXKB,存在有性能问题!小程序长列表性能优化,uni.createIntersectionObserver

在一些小程序列表的页面,总是会看到小程序控制台的黄色警告:

这是由于data 数据过大,导致的问题

方法:

1.避免setData的数据过大,小于1024kb。

2.避免调用频繁,保证数据实时性。

3.避免未绑定在WXML的变量传入setData,也就是不显示的数据不写入方法中。

4.不需要使用的字段让后端删除

5.尽量避免大循环

6.尝试使用uni.createIntersectionObserver

重点尝试uni.createIntersectionObserver

传送门:https://uniapp.dcloud.net.cn/api/ui/intersection-observer.html#createintersectionobserver

思路参考:

用户在划动列表的时候,离开可视范围的数据卸载dom元素,在接近可视范围的时候挂在dom元素,这样可以减少dom元素的数量以达到性能优化的目的

获取到数据的时候给数据初始化增加单个item是否展示的show,默认为true,单个item初始化的实例值为null,单个item的高度为0,然后获取到单个item的id,给每个item绑定一个createIntersectionObserver实例,这个实例返回的参数有个intersectionRatio为相交点的值,如果intersectionRatio为0则表示当前这个item不在可视范围,可以卸载dom元素,不等0的时候就是item在可视范围之内,需要展示dom元素

在获取到后端数据的时候增加初始化值

前后代码逻辑忽略:

获取到数据之后,做生成实例处理:

javascript 复制代码
				// ----性能优化方案
				this.$nextTick(() => {
					this.prescriptionList.forEach(item => {
						// 判断为创建过实例
						if(!item.observer) {
							// 创建并返回一个 IntersectionObserver 对象实例
							item.observer = uni.createIntersectionObserver(this);
							// 指定页面显示区域作为参照区域之一,假设windowHeight=617,即超出屏幕上方617*2px和超出屏幕下方617*2px时,则把dom元素v-if隐藏
							console.log('this.$system.windowHeight', this.$system.windowHeight,'this.$system.windowHeight')
							item.observer.relativeToViewport({ top: this.$system.windowHeight * 2, bottom: this.$system.windowHeight * 2 })
							.observe(`#${item.virtualId}`, res => {
								/**
								 * 指定目标节点并开始监听相交状态变化情况。回调函数callback包含一个参数result。observe(selector, [callback])
								 * intersectionRatio:相交比例-最大值1-最小值0,0~1区间
								*/
							   item.intersectionRatio = res.intersectionRatio;
								if(res.intersectionRatio === 0) {
									// 超过预定范围,从页面卸载dom元素
									item.virtualShow = false;
								}else {
									// 达到预定范围,将dom元素渲染进页面
									item.virtualShow = true;
									// 拿到当前item的高度
									item.itemHeight = res.intersectionRect.height;
								}
							})
						}
					})
				})
相关推荐
老华带你飞1 小时前
口腔助手|口腔挂号预约小程序|基于微信小程序的口腔门诊预约系统的设计与实现(源码+数据库+文档)
java·数据库·微信小程序·小程序·论文·毕设·口腔小程序
尸僵打怪兽1 小时前
HBuilder X打包发布微信小程序
微信小程序·小程序·打包·hbuilder x
说私域11 小时前
公域流量向私域流量转化策略研究——基于开源AI智能客服、AI智能名片与S2B2C商城小程序的融合应用
人工智能·小程序
半生过往12 小时前
微信小程序文件下载与预览功能实现详解
微信小程序·小程序·notepad++·压缩包下载解压
源码_V_saaskw12 小时前
JAVA图文短视频交友+自营商城系统源码支持小程序+Android+IOS+H5
java·微信小程序·小程序·uni-app·音视频·交友
weixin_lynhgworld15 小时前
淘宝扭蛋机小程序系统开发:重塑电商互动模式
大数据·小程序
ᥬ 小月亮18 小时前
Uniapp编写微信小程序,绘制动态圆环进度条
微信小程序·小程序·uni-app
说私域1 天前
技术赋能与营销创新:开源链动2+1模式AI智能名片S2B2C商城小程序的流量转化路径研究
人工智能·小程序·开源
游戏开发爱好者82 天前
没有 Mac,如何上架 iOS App?多项目复用与流程标准化实战分享
android·ios·小程序·https·uni-app·iphone·webview
weixin_lynhgworld2 天前
代驾小程序系统开发:引领出行行业数字化转型
小程序