讲师中心 微信公众号
AI工具推荐 视频效率加速

虚拟滚动如何实现分批次数据拉取?配合后端接口实现万级数据渲染

轻枫大大_4367

轻枫大大_4367

发布时间:2026-04-29 16:54:26

|

501人浏览过

|

来源于php中文网

原创

虚拟滚动仅控制可视区域渲染,万级数据需滚动监听+节流+分页/游标接口配合;应提前预加载(如距底200px),用sentinel或scrollTop计算页码/offset;后端须服务端分页,推荐游标分页;前端需缓存、防抖、AbortController取消请求,并与react-window等库集成。

虚拟滚动如何实现分批次数据拉取?配合后端接口实现万级数据渲染

虚拟滚动本身不负责数据拉取,它只控制“当前可视区域渲染哪些项”。万级数据分批次加载,关键在于把滚动位置映射成页码或偏移量,再按需请求后端接口。核心是前端滚动监听 + 节流 + 分页/游标式接口配合。

滚动位置转为数据请求参数

不能等用户滚到底部才加载下一页(体验差、易漏数据),而应提前预加载。常见做法是监听 scroll 或使用 IntersectionObserver 监控“临近可视区底部”的占位元素(如 sentinel 元素):

  • 设定一个“提前加载距离”,比如距离底部 200px 就触发下一页请求
  • 根据当前 scrollTop + clientHeight 和容器总高度估算当前“逻辑页码”或 offset
  • 若用分页(page + size),则 page = Math.floor(visibleStartIndex / pageSize) + 1;若用游标(如 lastId),则记录上一批末尾 ID 作为下次起点

后端接口需支持精准分段查询

后端不能返回全量数据再前端切片,必须由服务端完成分页裁剪。推荐两种模式:

  • 偏移量分页(Offset-based):适合数据量稳定、排序字段唯一且无频繁增删的场景。接口如 GET /api/items?offset=1000&limit=50。注意 MySQL 的 OFFSET 在万级偏移时性能下降明显,需配合覆盖索引或改用游标
  • 游标分页(Cursor-based):更高效可靠。前端传上一批最后一条的排序字段值(如 last_created_at 或 last_id),后端查 WHERE created_at > ? ORDER BY created_at LIMIT 50。避免跳过问题,也规避了 OFFSET 性能陷阱

前端状态管理与缓存策略

避免重复请求、白屏、错乱,需维护清晰的数据状态:

  • 用 Map 或数组缓存已加载的“数据块”,key 可为 page 或 cursor;未命中时显示骨架屏或 loading 占位
  • 滚动中快速来回时,可能触发多次请求,需加防抖/节流(如 150ms 内只发一次),并取消前序未完成的请求(用 AbortController)
  • 保持“逻辑列表长度”准确(如通过接口返回 total 或估算),用于计算滚动条高度和位置映射;total 不必实时精确,可初始加载时获取一次,后续增量更新

与虚拟滚动库(如 react-window、vue-virtual-scroller)集成要点

以 react-window 为例,它只渲染可见行,但需要你提供 itemCount 和 itemData:

  • itemCount 设为预估总数(如后端返回的 total),或设为 Infinity + 滚动到底部自动加载(需配合 onItemsRendered 回调)
  • itemData 应是合并后的数据源:已加载的数据块拼接 + 未加载位置用 placeholder 对象(如 { loading: true }),组件内据此决定渲染内容或骨架
  • 监听 onItemsRendered,当渲染范围靠近末尾(overscanStopIndex >= itemCount - 5),触发下一批加载

热门AI工具

更多
讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2663

2023.08.11

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6750

2024.03.19

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

6186

2024.03.19

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2663

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

5763

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6750

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

6458

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

923

2024.05.22

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
LLVM官方文档
LLVM官方文档

共0课时 | 0人学习

Memcheck使用手册
Memcheck使用手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn