先说场景 在用uniApp 开发小程序时 遇到后端有一个接口一次性返回了超100条数据 

此时在前端写的代码 this.swiperList = res.data ; 直接导致微信小程序报警 如图

这样子导致页面全部受到影响,数据加载变得非常卡顿。来看如何处理。

首先找到卡顿的原因 :  小程序是使用setData进行数据传递。官方要求是单词数据传递不能超过1024kb

而正常我实际开发中大部分都是直接 this.xxx =  res.data ;  这样就直接导致了setData 可能会出现传输数据过大,而影响页面性能的问题。

怎么解决? 

既然一次传输过多数据不可以,我能想到的方式是,可不可以后端做分页  答案是 部分场景优先后端进行分页,前端对各种状态下进行分页请求,例如,下拉,或者,触底加载等,这里不做赘述,我们来看另外一种问题场景。


如果这些数据假设有1万条。需求就是不能做分页,一次调用解决问题,但前端需要不能让页面卡死。

答案就是 异步任务 +  二维数组 分批导入。

	groupData(data,split) {
			let result = [];
			let groupItem;
			for (var i = 0; i < data.length; i++) {
				//每20条数据分割为一个数组
				if (i % split == 0) {
					groupItem != null && result.push(groupItem);
					groupItem = [];
					console.log(groupItem,'start')
				}
				groupItem.push(data[i]);
				console.log(groupItem,'itemmm')
			}
			result.push(groupItem);
			console.log(result,'resultlll')
			return result;
		},

findBuyinfoBYidApi() {
			findBuyinfoBYid({
				id: this.RushBuyId
			}).then(res => {
				if (res.data.result.records && res.data.result.records.length > 0) {
					首先先不将数据绑定 而是定义临时变量保存
 					let data = res.data.result.records; //包含大量数据的数组
                    调用提前封装好的方法 将n条数据分割为20份 也就是每20条数据为一个数组
					let groupData = this.groupData(data,20); 
                    最终将得出一个二位数组 里面数组又嵌套了实际的数据 
					for (let i = 0; i < groupData.length; i++) {
						setTimeout(() => {
                            异步任务加入  每i*1000秒  并解构数据将数据实际传递
							this.VerticalSwiper.push(...groupData[i]);
						}, 1000 * i);
					}
				}
			})
		},


上图大家看的比较直观 

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐