问题场景
事情是这样的,我做了一个在线答题小程序,有一个顺序练习模块,每次顺序练习,都要把整个题库过一遍,每个题库题目数量不一,有的几百,有的上千,为方便讨论,我们假定某个题库1000道题目,
具体答题模块是用swiper来实现的,当swiper的数组很大的时候,setData会有三四秒的延迟,我们都知道setData的效率,但是没想到这么厉害。
问题描述
问题不是swiper本身,而是setData
https://developers.weixin.qq.com/miniprogram/dev/framework/performance/tips.html
官方资料
https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html
功能演示
https://developers.weixin.qq.com/community/develop/article/doc/00040235334788f8651a168d951413
这个问题困扰了我几个周时间,
不敢梳头,因为白头发会掉了一地,不要问我为什么是白头发
不敢照镜子,因为黑眼圈更重了;
不敢出门走路,因为问题没有解决,抬不起头来。
昨天我在群里发了一个有偿征求优化方案,小伙伴很积极,讨论了一个晚上,第二天就有朋友把优化的方案,递给我,今天中午验证有效,亲测。
现在好了,问题得到圆满解决,心情都不一样了,原来处处都是美
解决方案
大家都能想到方案就是分页,虽然总数组长度为1000,但是每次渲染到swiper的可能只有3、5、7不等的小数组,这样通过setData传递到UI层的时候才不会卡。
但是分页的逻辑要我们自己来控制,怎么判断左滑动,怎么判断右滑动,滑动边界问题,很多细节,总之我为了这个问题花了一个周末没有解决,
就是在大方向明确的情况下,还是写不出来。
具体的实现方案晚点我整理下发出来,同时也希望想挑战的同学锻炼下。
在这里特别感谢群里的两位小伙伴
社区相关帖子
https://developers.weixin.qq.com/community/develop/article/doc/000ecafb3486f07000c92c3225c013
https://developers.weixin.qq.com/community/develop/doc/000e4c77da47208296f8b0b4c51800
感谢
@~~娃娃
@~~ dinner
这个讨论很有意义,相信以后大家都会碰到这个问题。
微信官方有为此问题做了相应的解决方案组件:
1、长列表
recycle-view | 微信开放文档
https://developers.weixin.qq.com/miniprogram/dev/extended/component-plus/recycle-view.html
2、video-swiper | 微信开放文档
video-swiper就是优化视频数组量很大的时候用的,是把video固定在swiper里面,如果有需要可以把里面的video换成自己的item
https://developers.weixin.qq.com/miniprogram/dev/extended/component-plus/video-swiper.html