如何解决 大规模 DOM 节点渲染卡顿:使用虚拟列表 (Virtual List) 的核心思路

舞夢輝影

舞夢輝影

2026-05-15

576人浏览

原创

虚拟列表通过只渲染可视区域及缓冲区的dom节点、用占位元素维持滚动条高度、以transform定位内容来避免重排,从根本上解决大规模dom渲染卡顿。

如何解决 大规模 dom 节点渲染卡顿:使用虚拟列表 (virtual list) 的核心思路

解决大规模 DOM 节点渲染卡顿,虚拟列表不是“让页面变快一点”的技巧,而是从根源上避免浏览器处理不该处理的节点。它的核心思路就一条:不渲染看不见的项,只维护当前可视区域加少量缓冲的 DOM

只渲染“看得见”的那几十个

用户滚动时,真正进入视野的永远只是固定高度的一小段区域。比如容器高 600px、每行高 60px,最多同时看到 10 行——虚拟列表就只创建这 10 个 DOM 元素,而不是十万条全挂上去。

  • 通过 scrollTopitemHeight 算出当前应显示的起始索引:startIndex = Math.floor(scrollTop / itemHeight)
  • 再结合容器高度算出可视行数,得出结束索引:endIndex = startIndex + Math.ceil(containerHeight / itemHeight) + buffer
  • 实际渲染的数据就是 list.slice(startIndex, endIndex),数量恒定,与总数据量无关

用占位元素撑开滚动条

如果只渲染可见部分,滚动条会消失或错位。所以必须保留“整体高度感”:

  • 插入一个空的 <div class="phantom">,高度设为 <code>total * itemHeight
  • 它不包含任何内容,也不参与交互,纯粹用来告诉浏览器:“这个列表本该这么长”
  • 滚动条位置、拖拽距离、惯性滚动等原生行为全部正常,用户毫无感知
  • 靠 transform 定位真实内容

    渲染区不能随滚动自然位移(否则会触发重排),必须用 CSS 变换实现“视觉跟随”:

    • 把真实内容包裹在 position: relative 容器里
    • transform: translateY(offset) 把内容整体下拉,偏移量 offset = startIndex * itemHeight
    • 这样内容始终“对齐”滚动位置,但不触发布局计算,性能开销极低

    缓冲区是流畅滚动的关键

    纯可视区域渲染在快速滚动时容易闪白——因为新内容还没来得及渲染出来。缓冲区就是提前多画几行:

    • 上下各多渲染 5–10 条(具体看业务节奏,通常 buffer = 5 足够)
    • 缓冲区内容随滚动动态更新,始终包围着可视区域
    • 太小:快滑时露白;太大:DOM 数量回升,失去优化意义
PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

2024.08.14

6252

7

Selenium WebDriver元素定位与页面操作教程
Selenium WebDriver元素定位与页面操作教程

本专题整理Selenium WebDriver元素定位、XPath、CSS Selector、等待机制、窗口切换、Frame处理、Alert弹窗、Cookie操作和文件上传等核心用法。

2026.08.05

0

26

Selenium Grid分布式测试与并行执行教程
Selenium Grid分布式测试与并行执行教程

本专题整理Selenium Grid架构、远程WebDriver、并行测试、Docker部署、Kubernetes动态Grid、浏览器矩阵和测试环境扩展方法,适合进阶自动化测试团队使用。

2026.08.05

0

18

Selenium常见报错排查与自动化测试稳定性
Selenium常见报错排查与自动化测试稳定性

本专题整理Selenium常见报错、驱动版本问题、元素找不到、点击失败、等待超时、浏览器闪退、脚本不稳定和测试用例维护方法。

2026.08.05

0

17

墨刀AI提示词教学
墨刀AI提示词教学

本合集由PHP中文网精心整理,为您提供全面的墨刀AI提示词教学。内容涵盖高质量原型撰写公式与实操窍门,助您轻松掌握AI设计工具。无论是零基础入门还是进阶技巧,都能让您快速上手,大幅提升产品设计与协作效率。

2026.08.04

11

21

墨刀AI完整入门
墨刀AI完整入门

PHP中文网为您倾力打造墨刀AI保姆级入门指南完整版!本合集从零基础讲起,涵盖AI生成原型、提示词优化、图片转原型及多轮对话等核心功能。无论您是新手还是进阶用户,都能轻松掌握产品设计全流程。快来PHP中文网,一键解锁高效设计技巧,让想法即刻成型!

2026.08.04

8

20

墨刀AI进阶技巧
墨刀AI进阶技巧

本合集由PHP中文网精心整理,为您提供墨刀AI核心进阶策略指南。内容涵盖高效提示词写作、原型智能生成与微调、结构化导图制作及行业分析报告输出等实战技巧。助您轻松掌握AI设计工具,大幅提升产品设计与团队协作效率。

2026.08.04

10

14

火山引擎实名认证失败怎么办
火山引擎实名认证失败怎么办

火山引擎实名认证失败可能与证件信息填写错误、姓名或企业信息不一致、证件照片不清晰、营业执照状态异常、手机号验证失败或审核资料不完整有关。本专题整理个人认证、企业认证、资料上传、审核退回、重新提交和认证不通过的常见处理方法。

2026.08.04

5

10

火山引擎域名备案流程详解
火山引擎域名备案流程详解

火山引擎域名备案适合需要在火山引擎云服务器、对象存储、CDN或网站服务上绑定域名的用户参考。本专题整理备案入口、账号实名认证、备案类型选择、主体信息填写、网站信息提交、资料上传、初审核验、管局审核和备案失败排查,帮助用户完成网站上线前的备案流程。

2026.08.04

1

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.4万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 131.8万人学习