• 请不要在回答技术问题时复制粘贴 AI 生成的内容
gzxu
V2EX  ›  程序员

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

  •  2
     
  •   gzxu · Dec 23, 2018 · 3312 views
    This topic created in 2697 days ago, the information mentioned may be changed or developed.

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

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

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