最近一直在参加招聘,寒冬莅临!到现在都没找到工作,我可太菜了!!!
说回正题,最近面试的时候被问到“前端面对大量的数据,要怎么处理,能优化用户体验?”,对于这个问题,一次没答上来的我决定来写一篇关于这个问题的博客。(没能第一次就来寻找答案应该是我辣鸡的原因之一了!!!)
面对后端返回的几十万几百万的数据,该如何处理?
使用setTimeout进行分页
对于大量的数据,进行分页操作,这样每个页面只需要对有限的数据进行渲染,每次渲染一个页面就ok了。
使用requestAnimationFrame
在渲染页面的时候,我们可以使用requestAnimationFrame来代替setTimeout,这样可以减少reflow次数,提高性能。requestAnimationFrame方法告诉浏览器您希望执行动画,并请求浏览器调用指定函数在下一次重绘之前更新动画。该方法将回调作为要在重绘之前调用的参数。
使用 createDocumentFragment()碎片节点
将数据分成一段一段执行,createDocumentFragment()创建一个虚拟节点对象,将一部分数据先添加到DocumentFragment中,再统一将DocumentFragment添加到页面,会减少页面渲染DOM的次数,效率会明显提升
延迟加载
根据用户视口的位置,来选择是否加载渲染数据。
使用Worker,开启子线程
因为js是单线程运行的,在遇到一些需要处理大量数据的js时,可能会阻塞页面的加载,造成页面的假死。这时我们可以使用worker来开辟一个独立于主线程的子线程来进行哪些大量运算。这样就不会造成页面卡死。也说明 worker可以用来解决大量运算是造成页面卡死的问题。