解决微信小程序数据渲染缓慢或卡顿的方法 (uniapp vue3)

在微信小程序中渲染数据时通常会使用setData方法,但是setData对数据是有影响的,单次设置的数据不能超过1024kB,否则就会出现卡顿甚至有时会导致小程序闪退等现象。而我们平时在实现业务时,一般会采取数据分页而防止大量数据渲染导致小程序白屏/卡顿,例如在一些商城平台需要滚动时切换菜单,也需要回显购物车数据的情况下,无法进行分页处理,我的方法是把从接口获取到的数据进行格式化处理后,进行递归调用(递归一次进行一次setDate从而不进行一次性渲染大量数据),代码如下:

<template>
	<scroll-box>
		<!-- 菜单 -->
		<view>
			<view v-for="(item,index) in truthfulData" :key="item.id">
				{{item.title}}
			</view>
		</view>
		
		<!-- 子列表 -->
		<view>
			<!-- 菜单 -->
			<view v-for="(item,index) in truthfulData" :key="item.id">
				{{item.title}}
			</view>
			<view>
				<!-- 子列表 -->
				<view v-for="(childItem,childIndex) in itme.childList" :key="childItem.id">
					{{childItem.name}}
				</view>
			</view>
		</view>
	</scroll-box>
</template>

<script setup lang="ts">
// 获取数据列表
const truthfulData = ref(null) // 真实渲染数据
// 处理数据模型 [{id,title,childList:[]},{id,title,childList:[]}...]
async function getDate() {
	try {
		// 1. 通过接口调用获取需要渲染的数据列表 
		const dateList= await getDateList()
		// 2. 调用setDate优化函数
		truthfulData.value = [] 
		injectDate(dateList.data,0,0)
		// 3. 进行渲染完成后的容器数据获取 - 小程序 uni.createSelectorQuery().select("#id").boundingClientRect(data=>{...}).exec() 是异步方法需要在数据渲染后执行
		nextTick(() => {
			// ... 
		})
		 
	} catch (e) {
		console.log(e);
	}
}

// 优化渲染数据 
function injectDate(virtuallyDate : [any], pIndex : number, index : number) {
	if (virtuallyDate.length === pIndex) return

	// 当菜单数据为空时
	if (!truthfulData.value[pIndex]) {
		// 数据最外层菜单赋值
		truthfulData.value[pIndex] = {
			id: virtuallyDate[pIndex].id,
			title: virtuallyDate[pIndex].title,
			childList: [] // 需要渲染的子集数据
		}
	}

	// 添加数据
    truthfulData.value[pIndex].childList.push(...virtuallyDate[pIndex].childList.slice(index, index + 20)) // 20 根据自己的数据大小拟定
    let i = index + 20 
	if (i >= virtuallyDate[pIndex].childList.length) i = 0  
	initCommodityList(virtuallyDate , i === 0 ? pIndex + 1 : pIndex, i) // 递归调用
}
</script>

递归setDate 渲染之后可用正常获取容器的宽高进行进一步业务扩展
大致效果如下:
在这里插入图片描述
建议搭配图片懒加载使用,防止大量图片同时请求导致服务器承受不住

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3+uni-app实现微信小程序登录流程主要分为以下步骤: 1. 在uni-app项目中安装并引入微信小程序登录插件(如wxlogin),在main.js中初始化并配置插件参数。 2. 创建一个登录页面,该页面包含点击按钮触发微信登录的操作,可以通过uni.login()方法调用微信小程序登录接口获取code。 3. 接收到微信小程序登录接口返回的code后,将code发送给后端服务器,后端服务器将code和小程序App ID以及App Secret发送给微信服务器进行登录凭证校验,获取到session_key和openid。 4. 服务器根据openid和session_key生成一个自定义的token,返回给前端。 5. 前端将token保存在本地,使用uni.setStorage()方法进行存储,以便后续的登录状态维持和接口请求验证。 6. 在需要登录验证的页面或组件中,通过uni.getStorage()方法获取本地存储的token,并将token添加到请求头中,发送给后端服务器进行接口请求。 7. 后端服务器接收到带有token的请求,对token进行校验和解析,验证token是否有效,从而确保用户的登录状态。 总结:通过以上步骤,实现了Vue3+uni-app微信小程序的登录流程。用户通过点击按钮触发微信小程序登录接口,后端服务器校验登录凭证,生成token并返回给前端,前端保存token并在请求接口时携带token进行验证,保证了用户的登录状态和接口访问权限的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值