Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

第 118 题:vue 渲染大量数据时应该怎么优化? #233

Open
yygmind opened this issue Aug 1, 2019 · 15 comments
Open

第 118 题:vue 渲染大量数据时应该怎么优化? #233

yygmind opened this issue Aug 1, 2019 · 15 comments
Labels

Comments

@yygmind
Copy link
Contributor

yygmind commented Aug 1, 2019

No description provided.

@yygmind yygmind changed the title 第 118 题:vue 渲染大量数据时应该怎么优化?说下你的思路! 第 118 题:vue 渲染大量数据时应该怎么优化?说下你的思路 Aug 1, 2019
@yygmind yygmind changed the title 第 118 题:vue 渲染大量数据时应该怎么优化?说下你的思路 第 118 题:vue 渲染大量数据时应该怎么优化? Aug 1, 2019
@mingxuan0624
Copy link

数据量大的时候,可以做分页处理。翻页一次请求10-20条数据

@S-mohan
Copy link

S-mohan commented Aug 1, 2019

虚拟列表?

@kungithub
Copy link

Object.freeze 冻结对象,不让vue劫持

@fxxqq
Copy link

fxxqq commented Aug 1, 2019

dwqs/blog#70 虚拟列表

@pangxieju
Copy link

优化我觉得分要分两点:
1、加载显示优化,能快速加载显示;
2、内存占用优化。

@FontEndArt
Copy link

FontEndArt commented Aug 1, 2019

如果一次性传入大量数据

建议

  • 1.先打死提供数据的人 ^ v ^~ (推荐)
  • 2.如果打不过自己架设中间层
  • 3.SPA + SSR处理 bigpipe (服务器渲染组件总比浏览器强,毕竟那么多核的CPU也不是花瓶)
  • 4.可以考虑stream(我还没看用过...)
  • 4.增加加载动画提升用户体验
  • 5.同时避免浏览器处理大量的dom(具体看下面)
  • 6.尽量不要再用vue的双向数据绑定了 或者只用部分页面中处理的数据

如果并非一次性传入大量数据 而只是分段加载 但次数特别多

建议

  • 1.异步渲染组件
  • 2.使用vue的v-if 最多显示上中(可视区域)下三屏 避免出现大量的dom节点
  • 3.或者使用分页(体验可能不如上面那么好“无限加载的也要考虑dom过多的情况”)

个人建议,如有误,还劳烦指正

@Loading-m
Copy link

可以使用虚拟列表,Object.freeze冻结对象,Object.preventExtentsion阻止对象扩展来阻止vue给每个对象加上get,set,但是缺点是不能响应了

@HCLQ
Copy link

HCLQ commented Aug 1, 2019

  1. 按需加载局部数据, 虚拟列表,无限下拉刷新
  2. js运行异步处理:
    分割任务,实现时间切片处理, 类似react fiber, 每次执行记录时间, 超过一定执行时间则settimeout或requestAnimation推迟到下一个时间片,一般一个时间片为16ms
  3. 大量纯展示的数据,不需要追踪变化的 用object.freeze冻结

@630268501
Copy link

1.这主要是接口慢,后端优化的事。
2.加个loading。。。
3.数据量大vue已经处理的很好了,我能怎么优化,无非就是用户体验。
4.减少dom结构,减少重构?避免回流啥的,就是减少重绘的时间。

@supermanklk
Copy link

1.建议先从来源地方优化,SQL语句,是否SELECT使用了*, 这个真的很影响速度, 是否建立了索引.
2.然后从传输层来说,提升服务器的上传速率
3.从前端来看,要求分页处理
4.从产品角度来看,优化加载的设计

@taosin
Copy link

taosin commented Aug 2, 2019

可以考虑使用 render 函数

@montage-f
Copy link

如果一次性传入大量数据

建议

  • 1.先打死提供数据的人 ^ v ^~ (推荐)
  • 2.如果打不过自己架设中间层
  • 3.SPA + SSR处理 bigpipe (服务器渲染组件总比浏览器强,毕竟那么多核的CPU也不是花瓶)
  • 4.可以考虑stream(我还没看用过...)
  • 4.增加加载动画提升用户体验
  • 5.同时避免浏览器处理大量的dom(具体看下面)
  • 6.尽量不要再用vue的双向数据绑定了 或者只用部分页面中处理的数据

如果并非一次性传入大量数据 而只是分段加载 但次数特别多

建议

  • 1.异步渲染组件
  • 2.使用vue的v-if 最多显示上中(可视区域)下三屏 避免出现大量的dom节点
  • 3.或者使用分页(体验可能不如上面那么好“无限加载的也要考虑dom过多的情况”)

个人建议,如有误,还劳烦指正

前端菜鸟想问下, 如何通过vue的v-if来进行上中下的三屏dom控制?

@yygmind yygmind added the Vue label Dec 16, 2019
@bbrucechen
Copy link

总结了一下
1.添加加载动画,优化用户体验
2.利用服务器渲染SSR,在服务端渲染组件
3.避免浏览器处理大量的dom,比如懒加载,异步渲染组件,使用分页
4.对于固定的非响应式的数据,使用Object.freeze冻结

@xdevilj136
Copy link

如果一次性传入大量数据

建议

  • 1.先打死提供数据的人 ^ v ^~ (推荐)
  • 2.如果打不过自己架设中间层
  • 3.SPA + SSR处理 bigpipe (服务器渲染组件总比浏览器强,毕竟那么多核的CPU也不是花瓶)
  • 4.可以考虑stream(我还没看用过...)
  • 4.增加加载动画提升用户体验
  • 5.同时避免浏览器处理大量的dom(具体看下面)
  • 6.尽量不要再用vue的双向数据绑定了 或者只用部分页面中处理的数据

如果并非一次性传入大量数据 而只是分段加载 但次数特别多

建议

  • 1.异步渲染组件
  • 2.使用vue的v-if 最多显示上中(可视区域)下三屏 避免出现大量的dom节点
  • 3.或者使用分页(体验可能不如上面那么好“无限加载的也要考虑dom过多的情况”)

个人建议,如有误,还劳烦指正

前端菜鸟想问下, 如何通过vue的v-if来进行上中下的三屏dom控制?

可以用IntersectionObserver或offsettop值判断dom的可见性,然后通过变量绑定控制展示

@JaykeyGuo
Copy link

两个关键词:大量数据、渲染
那这里就需要讨论这个数据是全部都在一屏中渲染,还是有交互之后的更新,例如虚拟列表和懒加载。

如果只是对大量数据的处理,就是CPU密集型的计算的问题,这个部分可以通过引入缓存和多线程的方式来处理。
通过localStorage或者IndexDB来暂存数据在前端,然后通过web worker来多线程处理数据,包括虚拟DOM的diff。

渲染部分的核心想法是“双缓存”,也就是使用虚拟DOM,只是这个时候需要对数据做统一的处理,缓冲,在统一变更数据之后在生成对应的虚拟DOM树,来进行渲染的操作

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests