网页前端有没有类似 RecyclerView 的东西?

2018-12-23 16:14:22 +08:00
 gzxu

对于需要显示大量数据的场景,Web 端通常的解决方案要么是每次只显示一页,并额外加上翻页按钮,要么是当列表滑到最底端的时候触发事件,加载下一页的数据并添加至末尾。然而在移动端通常大家会用复用不可见元素的方式来减少渲染成本,这个方案后来在 Android 端被封装成了 RecyclerView。不考虑利用 canvas 元素自己实现渲染引擎的话,在 Web 端似乎是没办法实现复用不可见元素的,我的理解是在这样做的时候会引起大量 reflow。

那么问题来了,在 Web 端有没有方案能实现类似移动端上,从滚动条上看用户能觉得一下子加载了 100000 行数据,而且滑动的时候不卡顿的方案?

2585 次点击
所在节点    程序员
12 条回复
yljcyct
2018-12-23 16:42:18 +08:00
better-scroll 好像有做类似的处理
作为小白希望看见更多的讨论
fsdgfd
2018-12-23 16:59:11 +08:00
fsdgfd
2018-12-23 17:00:23 +08:00
大致是不渲染不可见元素
newbieRenew
2018-12-23 17:11:12 +08:00
可以的,你用绝对定位来做。先给一个很高的高度,根据滑动一段距离来动态替换里面的内容,看起来像是连续加载的。浏览完一千多张图也不卡。
royzxq
2018-12-23 18:38:22 +08:00
差不多如#4 所说, 但是需要注意的是该方式需要预先算好每个节点的高度, 不然会导致进度条之类的 bug。
成品的话你可以参考一下 B 站视频播放页面的弹幕列表。
Raincal
2018-12-23 19:09:54 +08:00
kernel
2018-12-23 19:16:41 +08:00
virtual list 实现已经有无数了,包括应用于 react/vue 之类的
azh7138m
2018-12-24 09:48:36 +08:00
exonuclease
2018-12-24 10:12:30 +08:00
虚拟化技术吧
gzxu
2018-12-24 16:57:39 +08:00
多谢楼上各位~
gzxu
2018-12-24 17:00:28 +08:00
其实我现在打算在 GTK 里面搞一个表放大量数据,但尽管前端有这么多库实现了 Virtual list,GTK 的生态太差了,得自己实现。先不操心大量数据的场景好了。
wuhongwei
2018-12-24 18:47:01 +08:00
迂回一下, 类似 lazy-load 一样,先做 10000 个空 div 给放如 IntersectionObserver 的 queue, 需要的时候在渲染,10000 个空 div 不会 卡顿的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/520200

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX