V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
gzxu
V2EX  ›  程序员

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

  •  2
     
  •   gzxu · 2018-12-23 16:14:22 +08:00 · 2762 次点击
    这是一个创建于 2192 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    12 条回复    2018-12-24 18:47:01 +08:00
    yljcyct
        1
    yljcyct  
       2018-12-23 16:42:18 +08:00 via Android
    better-scroll 好像有做类似的处理
    作为小白希望看见更多的讨论
    fsdgfd
        2
    fsdgfd  
       2018-12-23 16:59:11 +08:00 via Android   ❤️ 1
    fsdgfd
        3
    fsdgfd  
       2018-12-23 17:00:23 +08:00 via Android   ❤️ 1
    大致是不渲染不可见元素
    newbieRenew
        4
    newbieRenew  
       2018-12-23 17:11:12 +08:00 via iPhone   ❤️ 1
    可以的,你用绝对定位来做。先给一个很高的高度,根据滑动一段距离来动态替换里面的内容,看起来像是连续加载的。浏览完一千多张图也不卡。
    royzxq
        5
    royzxq  
       2018-12-23 18:38:22 +08:00
    差不多如#4 所说, 但是需要注意的是该方式需要预先算好每个节点的高度, 不然会导致进度条之类的 bug。
    成品的话你可以参考一下 B 站视频播放页面的弹幕列表。
    Raincal
        6
    Raincal  
       2018-12-23 19:09:54 +08:00   ❤️ 1
    kernel
        7
    kernel  
       2018-12-23 19:16:41 +08:00
    virtual list 实现已经有无数了,包括应用于 react/vue 之类的
    azh7138m
        8
    azh7138m  
       2018-12-24 09:48:36 +08:00 via Android   ❤️ 1
    exonuclease
        9
    exonuclease  
       2018-12-24 10:12:30 +08:00 via iPhone
    虚拟化技术吧
    gzxu
        10
    gzxu  
    OP
       2018-12-24 16:57:39 +08:00
    多谢楼上各位~
    gzxu
        11
    gzxu  
    OP
       2018-12-24 17:00:28 +08:00
    其实我现在打算在 GTK 里面搞一个表放大量数据,但尽管前端有这么多库实现了 Virtual list,GTK 的生态太差了,得自己实现。先不操心大量数据的场景好了。
    wuhongwei
        12
    wuhongwei  
       2018-12-24 18:47:01 +08:00
    迂回一下, 类似 lazy-load 一样,先做 10000 个空 div 给放如 IntersectionObserver 的 queue, 需要的时候在渲染,10000 个空 div 不会 卡顿的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2985 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 14:01 · PVG 22:01 · LAX 06:01 · JFK 09:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.