第 118 题:Vue 渲染大量数据时应该怎么优化?
众所周知 HTML 页面中 DOM 的修改会引起页面的重新渲染,重新渲染包含 DOM 节点的重排和重绘(重排和重绘的知识点可以自行百度),如果页面中大量的 DOM 节点发生重绘,页面就会出现性能问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
众所周知 HTML 页面中 DOM 的修改会引起页面的重新渲染,重新渲染包含 DOM 节点的重排和重绘(重排和重绘的知识点可以自行百度),如果页面中大量的 DOM 节点发生重绘,页面就会出现性能问题。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(15)
前端菜鸟想问下, 如何通过vue的v-if来进行上中下的三屏dom控制?
总结了一下
1.添加加载动画,优化用户体验
2.利用服务器渲染SSR,在服务端渲染组件
3.避免浏览器处理大量的dom,比如懒加载,异步渲染组件,使用分页
4.对于固定的非响应式的数据,使用Object.freeze冻结
可以用IntersectionObserver或offsettop值判断dom的可见性,然后通过变量绑定控制展示
两个关键词:大量数据、渲染
那这里就需要讨论这个数据是全部都在一屏中渲染,还是有交互之后的更新,例如虚拟列表和懒加载。
如果只是对大量数据的处理,就是CPU密集型的计算的问题,这个部分可以通过引入缓存和多线程的方式来处理。
通过localStorage或者IndexDB来暂存数据在前端,然后通过web worker来多线程处理数据,包括虚拟DOM的diff。
渲染部分的核心想法是“双缓存”,也就是使用虚拟DOM,只是这个时候需要对数据做统一的处理,缓冲,在统一变更数据之后在生成对应的虚拟DOM树,来进行渲染的操作
可以考虑使用
render
函数1.建议先从来源地方优化,SQL语句,是否SELECT使用了*, 这个真的很影响速度, 是否建立了索引.
2.然后从传输层来说,提升服务器的上传速率
3.从前端来看,要求分页处理
4.从产品角度来看,优化加载的设计
1.这主要是接口慢,后端优化的事。
2.加个loading。。。
3.数据量大vue已经处理的很好了,我能怎么优化,无非就是用户体验。
4.减少dom结构,减少重构?避免回流啥的,就是减少重绘的时间。
分割任务,实现时间切片处理, 类似react fiber, 每次执行记录时间, 超过一定执行时间则settimeout或requestAnimation推迟到下一个时间片,一般一个时间片为16ms
可以使用虚拟列表,Object.freeze冻结对象,Object.preventExtentsion阻止对象扩展来阻止vue给每个对象加上get,set,但是缺点是不能响应了
如果一次性传入大量数据
建议
如果并非一次性传入大量数据 而只是分段加载 但次数特别多
建议
个人建议,如有误,还劳烦指正
优化我觉得分要分两点:
1、加载显示优化,能快速加载显示;
2、内存占用优化。
dwqs/blog#70 虚拟列表
Object.freeze 冻结对象,不让vue劫持
虚拟列表?
数据量大的时候,可以做分页处理。翻页一次请求10-20条数据