假设,页面需要在一个表格里渲染 几万条 数据。在不分页的情况下有什么好的优化方案来保证页面的流畅度。
(可能例子有些极端)
假设,页面需要在一个表格里渲染 几万条 数据。在不分页的情况下有什么好的优化方案来保证页面的流畅度。
(可能例子有些极端)
|
SappJan 17, 2020
1
虚拟列表,简单来说就是 1w 条列表,每次只渲染一部分,之后滚动的时候实时渲染出新的来模拟滚动,这样 dom 实际就是几十条的样子,网上有很多现成的方案
|
|
shijianitJan 17, 2020
2
在滚动事件里面做判断,屏幕外面的数据,元素就删除,只保留高度
|
|
zhuzhibinJan 17, 2020 via iPhone
3
貌似都在说 lazy load ?
|
|
fancy111Jan 17, 2020
4
一个表里面几万条? 能看得完吗?为何不分批
|
|
MozshawJan 17, 2020
6
关键词:virtual scroll
可参考 https://github.com/tangbc/vue-virtual-scroll-list |
|
momocraftJan 17, 2020
9
高度不一致时虚拟列表可能会有什么问题?比如滚动条不准?
|
|
zhw2590582Jan 17, 2020
10
之前也遇到过这个问题,用了这个: https://github.com/bvaughn/react-virtualized
|
|
11
@momocraft 虚拟列表是通过高度来计算出当前 可视区域内的数据的。如果高度不一致就无法计算可视区域内究竟有多少数据以及是什么数据,也就不能来删除或者渲染数据。
|
|
zhw2590582Jan 17, 2020
12
不过 react-virtualized 的默认是高度要一致,假如高度不一致需要自己提前计算出来再传值到组件里。
|
|
lovedebugJan 17, 2020
13
|
|
diveIntoWorkJan 17, 2020
15
双缓冲
|
|
linghucq1Jan 17, 2020
16
|
|
ccraohngJan 17, 2020 via Android
17
不是有支持动态高度的么,类似 CellMeasure
|
|
MrJeffJan 17, 2020
18
想办法搞成虚拟列表 否则 DOM 太多 卡爆
|
|
M003Jan 17, 2020
21
看过几个虚拟列表,都是需要行高度固定..
这样才能计算出整个列表的高度,进行渲染. 曾经也考虑过高度不一致.渲染上千条数据. 后来放弃了.需求就是个伪需求. 还不如加个搜索框来的快. |
|
buhiJan 17, 2020
22
https://github.com/buhichan/react-infinite-virtual-scroll
我这个支持每行有不一样的高度, 条件是高度渲染后就不能更改(因为会缓存下来), 虽然是 react 的, 但是 vue 的话自己改下的话都能用 |
|
w292614191Jan 17, 2020
24
|
|
wanguorui123Jan 17, 2020
25
虚拟列表
|
|
lululauJan 17, 2020 via iPhone
26
让用户换台 Mac pro
|
|
GrapeCityChinaJan 17, 2020
27
懒加载、双缓存机制、canvas 绘制界面... 好吧,我是在说 SpreadJS
|
|
csgo2Jan 17, 2020
28
核心思路应该就是只渲染可视区域。。。。我大概只用过前面大伙说的 react-virtualized
|
|
YourLordJan 17, 2020 via Android
29
打死你的后台同事,直接把全表数据扔给前段也太业余了。
|
|
xiangyuecnJan 17, 2020
30
终极优化办法:干掉提需求的人
|
|
RitrJan 17, 2020
31
@withzhaoyu 说的对,没用的 DOM 移除掉不然会很卡
|
|
mostkiaJan 18, 2020
33
可以考虑让后台分页,大量数据一次性加载到 html 是不好的做法,如果考虑到用户体验不允许有换页之类的效果,可以试试 ajax 这类,类似瀑布流的那种按需加载,都是现成的方案,挺成熟的。
|
|
r3mJan 19, 2020 via Android
34
万条数据具有多媒体数据的 table 可以先在后台缓存好每条数据对应的宽高,或者根据前端具体设备去简单在后台计算好宽高等等,最后把每一行高度数据加上每一行的 id 发送给前端。这个请求的数据量压缩前也只需要占 100kb 以内。之后前端已知宽高就可以就直接套用虚拟列表那一套,在可视范围内 lazy loading 就好了。如果要 loading 之前的可视效果更好一点后台可以顺便在其中传一些文字内容,图片颜色,视频封面颜色之类的基本信息,pinterest 上这种效果就做很好
|
|
ccsulzf0627Jan 19, 2020
35
我看老哥是用 angular 的,推荐一下 ag-grid
|