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

Layui 2.8版本中如何实现表格的虚拟滚动渲染万级数据

阿浩君_1261

阿浩君_1261

发布时间:2026-06-18 12:42:31

|

240人浏览过

|

来源于php中文网

原创

必须设置 height 才能触发 Layui 2.8 表格的原生虚拟滚动,否则即使数据量大也会全量渲染导致卡顿;虚拟滚动与分页机制独立,url 模式配合后端分页才是万级数据最优解。

必须设 height 才能触发 Layui 原生虚拟滚动

layui 2.8 的 table.render() 只有在明确设置了 height(如 height: 500 或 height: 'full-200')时,才会启用内部的虚拟滚动机制。不设 height,哪怕数据有一万行,它也照常全量渲染 tr 节点,页面必卡死。

常见错误是只配了 page: true 就以为“分页=性能优化”,其实那是后端分页逻辑,和前端 DOM 渲染无关。虚拟滚动和分页是两套独立机制:一个管可视区 DOM 数量,一个管数据请求范围。

  • height 必须是数字或合法 CSS 高度值,不能是 'auto' 或未设置
  • 若用 'full-xxx',确保父容器有明确高度(如 html, body { height: 100%; }),否则计算失效
  • 开启后,Layui 会自动计算可视行数、监听 scroll、复用 tr 节点——你不用写一行滚动监听代码

url 模式 + 后端分页才是万级数据的正解

本地 data: [...] 模式加载万条数据,即使开了 height,首次渲染仍要遍历全部数组生成缓存结构(比如排序索引、templet 执行),内存和主线程压力依然很大。真正轻量的方案是让后端按需吐数据。

关键配置要对齐:

  • url: '/api/list' —— 必须走接口,别传本地大数组
  • page: true —— 启用 Layui 分页器(不是可选,是必须,否则 height 虚拟滚动在 url 模式下可能不生效)
  • request: { pageName: 'pageNum', limitName: 'pageSize' } —— 和后端约定好参数名,避免前端自己拼 query
  • response: { countName: 'total', dataName: 'rows' } —— 明确告诉 Layui 哪个字段是总条数、哪块是当前页数据

注意:done 回调里别对 res.data 做 map 或深拷贝,那会额外触发 GC,大数据场景下这一步就能拖慢 100ms+。

禁用函数模板、简化列配置能再省 30% 渲染时间

Layui 对每列的 templet 函数是逐行调用的。一万行 = 一万次 JS 函数执行 + 字符串拼接。换成字符串模板,直接由内部正则替换,快一个数量级。

深蓝色网站后台管理系统layui框架模板-AdminPro
深蓝色网站后台管理系统layui框架模板-AdminPro

一款深蓝色网站后台管理系统layui框架模板

下载
  • 把 templet: function(d) { return '<span>'+ d.name +'</span>'; } 改成 templet: '{{=d.name}}' 或外部模板 templet: '#nameTpl'
  • 删掉所有没用的列属性:style、event、unresize(除非真需要),每个字段都会进 initOpts 的初始化流程
  • 用 cellMinWidth: 60 全局设最小宽,别每列写 minWidth: 60,减少样式计算次数
  • 避免 skin: 'line' 或 'row',默认 'default' 最轻量

自定义事件绑定必须用原生 addEventListener

虚拟滚动会动态替换 tbody.innerHTML,所有之前用 table.on('tool(demo)', ...) 绑定的事件监听器都会失效——因为 DOM 节点被整个替换了。

正确做法是手动委托到 tbody,并利用 data-index 定位原始数据:

const tbody = document.querySelector('#demo tbody');
tbody.addEventListener('click', function(e) {
  const tr = e.target.closest('tr');
  if (!tr) return;
  const index = +tr.dataset.index; // 注意是字符串,要转数字
  const rowData = allData[index]; // allData 是你维护的原始数组
  console.log('点击了第', index, '行', rowData);
});

如果用了复选框列(type: 'checkbox'),状态不能靠 tr.querySelector('input').checked 读取,得单独用 Map 或数组维护勾选状态,否则滚动后状态就丢了。

虚拟滚动不是开关一开就万事大吉。height 值太小会导致频繁重绘,太大又浪费内存;后端返回的每页数据量(limit)最好和可视行数接近,否则空滚动明显;排序、搜索后记得调用 table.reload() 并重置 scrollTop,不然用户会卡在旧位置看不到新数据。

热门AI工具

更多
DeepSeek

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

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

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

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

豆包大模型

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

UpDream
UpDream Hot

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

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

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

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

2323

2023.08.11

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

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

5003

2023.10.09

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

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

6090

2024.03.19

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

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

5598

2024.03.22

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

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

803

2024.05.22

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

0

2026.10.08

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

120

2026.09.30

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

100

2026.09.30

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

80

2026.09.30

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ThinkPHP配置开发与CMS后台实战
ThinkPHP配置开发与CMS后台实战

共87课时 | 12.7万人学习

第二十三期_综合实战
第二十三期_综合实战

共89课时 | 11万人学习

Layui 快速入门精讲
Layui 快速入门精讲

共5课时 | 1.6万人学习

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

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