微信小程序集成腾讯im,会话列表数据过多(长列表),卡顿问题的解决

说明

我这边用小程序集成im,然后结合公司的需求,做了一个聊天的小程序,在测试上线的时候没有问题,结果到客户那边,因为他们聊天的人多,会话列表达到了300多条,然后点击会话列表,进入聊天页面,会卡顿。下图是测试环境的
在这里插入图片描述

尝试解决

因为我在im原有基础上,增加了很多遍历逻辑,im保存的用户信息较少,所以先获取会话列表,然后根据imid,去自己数据库查询用户信息,如果数据过多,先去调用接口,然后再将信息重新遍历设置到列表,所以我以为是这种代码造成的卡顿,结果把这些代码去掉以后,还是卡顿

发现问题

将那些逻辑遍历之类的代码去掉,发现列表第一次点击,不卡顿,第二次再点击,卡顿,所以我以为是会话页面的资源没有释放,然后我在返回的时候各种释放,类似于这样
在这里插入图片描述
但是呢,没效果。后来就在想,一样的代码,为什么长列表就会卡顿,然后在看文档的时候,发现了一个专门针对长列表的解决组件,试了一下,快了很多

recycle-view

要严格按照文档来集成,我就是因为少了一个配置,报错,以为是环境的问题,差点放弃

解决

按照文档集成recycle-view,把相关代码贴一下
布局代码

<view class="conversation-list-area"><!-- <scroll-view class="scoll-view" scroll-y="true"> --><recycle-view batch="{{batchSetRecycleData}}" id="recycleId"><recycle-item wx:for="{{recycleList}}" wx:key="id"><ConversationItem wx:key="index" id="{{item.conversationID}}" data-type="{{item.type}}" conversation="{{item}}" bindtap="handleRoute" statusList="{{statusList}}" bind:transCheckID="transCheckID" charge="{{transChenckID===item.conversationID}}" wx:if="{{item.type!='@TIM#SYSTEM'}}" bind:updateLocalConversationList="updateLocalConversationList" data-type="{{item.type}}"></ConversationItem></recycle-item></recycle-view><!-- </scroll-view> --></view>

js代码

ready() {wx.$TUIKit.on(wx.$TUIKitTIM.EVENT.MESSAGE_RECEIVED, this.$onMessageReceived, this);ctx = createRecycleContext({id: 'recycleId',dataKey: 'recycleList',page: this,itemSize: { // 这个参数也可以直接传下面定义的this.itemSizeFunc函数height: this.rpx2px(150),width: this.rpx2px(750)}})},
...
rpx2px(rpxNum) {return rpxNum * app.globalData.rpx2px;},

app.js设置


onLaunch: function () {wx.getSystemInfo({success: e => {// 设计稿一般是 750 rpx, 但是 canvas 是 px;// 1rpx 转换成 px 的时候this.globalData.rpx2px = 1 / 750 * e.windowWidth;}});.....}
globalData: {....rpx2px:0,}

定义一个方法,用于数据的更新或者添加

	updateRecylerView(dataList) {wx.hideLoading()if(dataList.length==0){ctx.splice(0, 99999);ctx.forceUpdate()return}if (ctx.getList() == null || ctx.getList().length == 0) {ctx.append(dataList)} else {if(ctx.getList().length!=dataList.length){ctx.splice(0, 99999);ctx.append(dataList)}else{ctx.update(0, dataList);ctx.forceUpdate()}}},

因为在使用的过程中,发现不同的数据,比如现在页面上是有数据的,然后刷新以后没有数据,调用ctx.update(0, dataList),竟然没更新,所以对各种情况进行了适配

其他优化

我用小程序自带的工具进行了测评,可以测出一些不易发现的问题,比如后台没有对图片大小进行限制,竟然有将近0.5m大小的图片,如果这样的图片多了,占用资源也会很多,当然很卡
在这里插入图片描述

大家在开发小程序的时候,如果涉及到列表,在预期的将来,会有很多数据的情况下(可以本地用遍历赋值,制造大量数据测试),还是使用长列表,如果没那么多,用普通列表就可以了,在开发完以后,可以用上述的工具进行评分,会给出哪些问题需要优化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/70393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#,《小白学程序》第十六课:随机数(Random)第三,正态分布的随机数的计算方法与代码

1 文本格式 // 定义一个全局性&#xff08;公共&#xff09;的随机数发生器&#xff0c;便于大家&#xff08;各函数&#xff09;后面共同使用。 Random global_rnd new Random(); /// <summary> /// 生成服从标准正态分布的随机数 /// https://zhuanlan.zhihu.com/p/6…

Postern配置HTTP和HTTPS的步骤

Postern是一款强大的Android代理工具&#xff0c;它允许您在设备上配置全局代理来实现安全、隐私保护和自由上网。本文将详细介绍如何使用Postern在Android设备上配置HTTP和HTTPS代理&#xff0c;为您提供更便捷的上网体验。 步骤1&#xff1a;下载和安装Postern应用 首先&am…

pdf怎么合并在一起?几种方法快速合并

pdf怎么合并在一起&#xff1f;在处理PDF文件时&#xff0c;有时需要将多个PDF文件合并成一个文件。这种操作在日常学习、工作和生活中很常见。但是&#xff0c;如果没有专业的PDF工具&#xff0c;这项任务可能会变得非常繁琐、耗时和费力。因此&#xff0c;我们需要一款功能强…

[Java]_[初级]_[使用fastjson以流的方式读取json大文件]

场景 开发JSON应用时&#xff0c;有时候需要从JSON文件里读取配置数据到内存。当JSON文件足够大时&#xff0c;如果先把文件读入内存再进行parse会浪费不必要的大文件连续内存。甚至可能会导致OOM, 这时候如果能像XML文件那样可以以流的方式读取结构化JSON数据&#xff0c;那么…

Faster RCNN

【简介】 Faster RCNN[7]是第一个端到端&#xff0c;最接近于实时性能的深度学习检测算法&#xff0c;该网络的主要创新点就是提出了区域选择网络用于申城候选框&#xff0c;能几大提升检测框的生成速度。该网络首先输入图像到卷积网络中&#xff0c;生成该图像的特征映射。在特…

ActiveReportsJs 账票印刷

参考资料 官方文档 一. HTML部分 在页面上添加了Loading效果&#xff0c;账票印刷开始时显示Loading效果&#xff0c;印刷结束后隐藏Loading效果。ar-js-core.js是核心文件ar-js-pdf.js用来印刷PDFar-js-xlsx.js用来印刷EXCELar-js-locales.js用来设置语言 <!DOCTYPE htm…

优化SOCKS5的方法

在今天的互联网世界中&#xff0c;保护个人隐私和提升网络速度至关重要。作为一种常用的代理协议&#xff0c;SOCKS5代理服务器不仅可以保护您的隐私&#xff0c;还可以实现更快速的网络访问。本文将为您介绍一些优化SOCKS5代理服务器的方法&#xff0c;以提高网络速度和安全性…

阿里云2核4G服务器5M带宽五年租用价格表

阿里云2核4G服务器5M带宽可以选择轻量应用服务器或云服务器ECS&#xff0c;轻量2核4G4M带宽服务器297元一年&#xff0c;2核4G云服务器ECS可以选择计算型c7、c6或通用算力型u1实例等&#xff0c;买5年可以享受3折优惠&#xff0c;阿腾云分享阿里云服务器2核4G5M带宽五年费用表&…

大数据知识合集之预处理方法

数据预处理方法主要有&#xff1a; 数据清洗、数据集成、数据规约和数据变换。 1、数据清洗 数据清洗(data cleaning) &#xff1a;是通过填补缺失值、光滑噪声数据&#xff0c;平滑或删除离群点&#xff0c;纠正数据的不一致来达到清洗的目的。 缺失值处理 实际开发获取信…

npm、yarn、pnpm

一、简介 CommonJS 的出现&#xff0c;使 node 环境下的 JS 代码可以用模块更加细粒度的划分。一个类、一个函数、一个对象、一个配置等等均可以作为模块&#xff0c;这种细粒度的划分&#xff0c;是开发大型应用的基石。 为了解决在开发过程中遇到的常见问题&#xff0c;比如…

Xcode,swift:Error Domain=kCLErrorDomain Code=1 (null)问题解决

问题描述: iOS开发时,当使用用户的位置权限时,获取用户经纬度报错:Error DomainkCLErrorDomain Code1 "(null)",错误域kCLError域代码1“(null)” 解决方法: 打开模拟机的设置-通用-语言与地区 将地区设置为中国(如果你的开发位置在中国的话) 点击左上方Features,选择…

发光太阳聚光器的蒙特卡洛光线追踪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【大数据】Flink 详解(七):源码篇 Ⅱ

本系列包含&#xff1a; 【大数据】Flink 详解&#xff08;一&#xff09;&#xff1a;基础篇【大数据】Flink 详解&#xff08;二&#xff09;&#xff1a;核心篇 Ⅰ【大数据】Flink 详解&#xff08;三&#xff09;&#xff1a;核心篇 Ⅱ【大数据】Flink 详解&#xff08;四…

css-pseudo-class锚伪类

CSS 伪类用于向某些选择器添加特殊的效果。 属性描述:active向被激活的元素添加样式。:focus向拥有键盘输入焦点的元素添加样式。:hover当鼠标悬浮在元素上方时&#xff0c;向元素添加样式。:link向未被访问的链接添加样式。:visited向已被访问的链接添加样式。:first-child向…

redis配制redis-static-server

安装Redis,Redis Stack sudo apt install redis-serverhttps://redis.io/docs/getting-started/install-stack/linux/配制远程访问&#xff1a; 1.打开redis的配置文件“redis.conf”。 2.将“bind 127.0.0.1”注释掉。 3.将“protected-mode yes”改成“protected-mode no…

完成Centos上使用SSH公钥进行免密上传文件到gitee的步骤后,测试免密推送到gitee的时候还是需要输入邮箱和密码

如果你已经按照正确的步骤设置了SSH公钥并进行了免密测试&#xff0c;但仍然需要输入邮箱地址和密码才能推送到gitee&#xff0c;那么可能有以下几种原因&#xff1a; 您可能没有使用SSH URL来推送代码。请确保您使用的是SSH URL而不是HTTPS URL来推送代码。您可以使用命令 gi…

安卓手机安装Linux然后在其中安装(jdk,MySQL,git)

安卓手机安装Linux然后在其中安装(jdk&#xff0c;MySQL&#xff0c;git) 一.安卓手机安装Linux 安装termux最新教程_哔哩哔哩_bilibili Linux入门教程__阿伟_的博客-CSDN博客 二.安装jdk Termux手机终端运行java。jdk环境的搭建_哔哩哔哩_bilibili java后端__阿伟_的博客-CSD…

Opencv快速入门教程,Python计算机视觉基础

快速入门 OpenCV 是 Intel 开源计算机视觉库。它由一系列 C 函数和少量 C 类构成&#xff0c; 实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV 拥有包括 300 多个 C 函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也 可以使用某些外部库。 OpenCV 对非…

弹窗、抽屉、页面跳转区别 | web交互入门

当用户点击或触发浏览页面的某个操作&#xff0c;有很多web交互方式&#xff0c;可以大致分为弹窗、抽屉、跳转新页面三种web交互方式。虽然这三种web交互方式看起来没什么不同&#xff0c;但实际上弹窗、抽屉、跳转新页面对交互体验有蛮大的影响。 这需要UI\UX设计师针对不同…

Liquid Studio 2023.2 Crack

Liquid Studio 提供了用于XML和JSON开发 的高级工具包以及Web 服务测试、数据映射和数据转换工具。 开发环境包含一整套用于设计 XML 和 JSON 数据结构和模式的工具。这些工具提供编辑、验证和高级转换功能。对于新手或专家来说&#xff0c;直观的界面和全面的功能将帮助您节省…