当前位置: 首页 > Web前端 > HTML5

前端BUG记录——lodashjsdebouncedebounce优化导致的bug

时间:2023-04-05 23:41:26 HTML5

其实在开发的时候还是要考虑边界问题的,因为边界问题有时候会导致体验断崖式下降。前段时间刚遇到一个问题,今天分享一下。之前做过一个IM项目,是session列表的问题:进入页面的时候会加载session列表,加载数据会卡顿。先说说我的逻辑:Paging拉取本地历史数据(已读消息,按userid排序20人)定时拉取远程数据(未读消息,最早的20条)。如果有新消息,它将更新会话列表排序(Array.prototype.sort)。使用lodash做debounced(防抖),添加[options.maxWait]设置func允许延迟的最大值。是不是好像数据处理都是小块的,没有问题?就是这么巧,因为我的代码没有处理边界,导致排序算法的执行时间太长,超过100ms(按理说,只能在16ms以下,我换一篇文章这里),然后因为加入了maxWait,所以会被同步调用。https://github.com/lodash/lodash/blob/15e1557b2a97c8bbee22d873832d90ed3ba50ba7/debounce.js其实就是我们一般理解的debounce的异步操作。当然,最后通过修改排序算法,改timsort,再改插入排序等方法解决了这个问题。减少方法的执行时间,就不会出现节流失败的问题。增加maxWait以防止密集的同步调用。修改Array的长度,禁止无限叠加。微信公众号:前端立农欢迎大家关注我的公众号。有问题也可以加我的微信前端交流群。参考资料说说lodash的debounce实现