vue渲染大量数据优化_vue大数据表格卡顿问题的完美解决方案
前言
vue渲染小数据挺快,大数据vue开始出现卡顿现象,本文讲给大家详细介绍关于vue大数据表格卡顿问题的解决方法
亲测苹果电脑,chrome浏览器无卡顿现象,其它浏览器并未测试,如遇到卡顿请备注系统和浏览器,方便我后续优化,谢谢
先看一下效果,一共1000 X 100 = 10W个单元格基本感受不到卡顿,而且每个单元格点击可以编辑,支持固定头和固定列
解决问题核心点:横向滚动加载,竖向滚动加载
项目背景
笔者最近在做广告排期功能,需要进行点位预占,大的合同可能需要对多个资源排期,周期可能到几年这样,然后我们的页面交互是这样
横向每个月30个单元格,最多的3年,36个月,每行36*30=1080个单元格
竖向100个资源,总共约️10W个单元格,然后每个单元格里面会有一个输入框,一个库存总数,所以总数是20W个,内网使用,接口请求根本不是问题,可以浏览器渲染就扛不住了接口回来之后会出现几十秒的白屏,整个页面处于卡死状态
这还不算,加载出之后页面操作也是非常卡,滑动延迟严重,页面基本处于瘫痪状态
之前的功能是基于jquery开发的,项目重构用的vue,UI采用了ElementUI,ElmentUI中的表格在数据量较大是有严重的性能问题,最直接的表现就是白屏时间较长,而且会出现渲染错乱
所以就想着自己实现一个表格,解决卡顿问题
实现思路
表格拆分,动态加载
表格横向按月拆分,每个月份单独一个table,月份table外层放一个占位div,根据横向滚动位置控制展示
竖向按资源拆分,同样包裹一个占位div,按照滚动位置动态加载,始终保持dom数量上线
动态编辑,按需生成编辑输入框
不同的标签在浏览器渲染时性能是不一样的,比如input这种标签就比span等标签重许多,所以不能满屏input
方案就是点击单元格展示输入框,焦点丢失移除,此处的展示非display控制显示隐藏,而是v-if控制dom是否加载
代码分解
固定头
v-bind:style="{ transform: 'translateX(' + scrollLeft + 'px)' }"
v-for="(item, index) in monthData" v-bind:key="index">
{{item.month}}
v-for="(d_item, d_index) in item.days" v-bind:key="d_index"
style="min-width:100px">{{d_item}}
固定列
位置position
{{item.name}}
表体
style="width:3000px;"
v-for="(item, index) in monthData" v-bind:key="index">
v-if="Math.abs(index - curModule) < 3">
style="height:30px"
v-for="(p_item, p_index) in projectData"
v-bind:key="p_index">
v-if="Math.abs(p_index - curRow) < 20"
cellspacing="0" cellpadding="0">
@click="clickTd(p_index,item.month, d_item, $event)"
v-for="(d_item, d_index) in item.days" v-bind:key="d_index">
{{originProjectData[p_index][''+item.month][''+d_item]['last']}}
@blur="blurTd(p_index,item.month, d_item)"
v-if="originProjectData[p_index][''+item.month][''+d_item]['show']"
v-model="originProjectData[p_index][''+item.month][''+d_item]['last']"
v-focus="originProjectData[p_index][''+item.month][''+d_item]['focus']"/>
经过如上优化,完美解决表格卡顿问题,但是我并没有封装组件,原因如下
·插件封装后会有很多限制,不能再用vue那种模板写法,用json传入数据,自定义内容不是很灵活
·可以根据自己的应用场景自行修改拓展,代码已经很简洁
·比较懒
如果你有类似需求可以试一下我这个,也欢迎Star
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。
vue渲染大量数据优化_vue大数据表格卡顿问题的完美解决方案相关推荐
- vue+cesium cesium数据量太大导致浏览器卡顿解决办法
vue+cesium cesium数据量太大 导致浏览器卡顿 解决办法 解决方案 : 不要把任何的cesium对象 放在data中监听,因为在data中的变量 , vue会劫持数据 , 导致迟缓. 解 ...
- vue+cesium cesium数据量太大 导致浏览器卡顿 解决办法
如题 博主在开发过程中遇到了问题就是 当数据量过大时 浏览器特别卡 情景: 每秒实时渲染数据 效果:当前数据没有渲染完就开始渲染下一秒的数据了 如何将巨大的数据 在一秒内快速渲染到页面上呢? 解决方案 ...
- vue渲染大量数据如何优化_大数据量场景下的Vue性能优化
性能优化最常见的落脚点是在网络和dom上,但是在大数据量的场景下,由于Vue本身的特性,可能会造成js运行层面的性能问题,这篇文章讨论的就是针对这一部分的性能优化方案. 模拟一个大数据量的场景 // ...
- 网络优化正在从经验型优化向大数据关联分析优化转变
大数据技术的快速发展,不仅推动通信业务的创新,同时也在给传统网络的建设和运维带来变革.近几年,大数据技术正在越来越多地应用到网络优化中,成为提升网络优化效率,降低网络运营成本的新手段.在日前召开的&q ...
- 吉日嘎拉 - 1300多万条数据30G论坛大数据优化实战经验小结
http://www.cnblogs.com/jirigala/archive/2012/11/21/2780889.html 1300多万条数据30G论坛大数据优化实战经验小结 - 2012年于浙江 ...
- 数据科学与大数据技术的案例_主数据科学案例研究,招聘经理的观点
数据科学与大数据技术的案例 I've been in that situation where I got a bunch of data science case studies from diff ...
- 什么是大数据口子_大数据分析师年薪几十万,学什么专业才能从事大数据?
近几年,大数据为各个领域带来了全新的变革,大数据的重要性越来越被企业和国家所看到,大数据工作者的需求再次被无限放大,他们的薪资和社会地位也在不断上涨.马云在演讲中就提到,未来的时代将不是IT时代,而是 ...
- 数据智能是大数据的未来
来源:中国信息产业网 近日,两家大数据领域的代表性企业Cloudera和Hortonworks宣布了它们相对平等的合并,宣称新公司将创建世界领先的下一代数据平台并提供业界首个企业数据云,这令很多人感到 ...
- 【大数据】企业级大数据技术体系概述
目录 产生背景 常见应用场景 企业级大数据技术框架 数据收集层 数据存储层 资源管理与服务协调层 计算引擎层 数据分析层 数据可视层 企业级大数据技术实现方案 Google 大数据技术栈 Hadoop ...
最新文章
- java handler使用方法_Android中Handler的使用方法及实例(基础回顾)
- 开发日记-20190524 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
- 用python写的图形计算器
- display:inline、block、inline-block的区别以及该死的ie6兼容问题
- PAT甲级1106 Lowest Price in Supply Chain:[C++题解]树、结点到根结点的距离、树形dp、记忆化搜索
- Virtualization基础
- B. Light It Up
- linux创建虚拟声卡,Pear BIOS 安装和配置指引
- BindeService
- python main调试_在main.py中调试显示这个是什么问题
- winfrom的DataGridView控件选中行的DataGridViewLinkColumn列字体颜色的改变
- 项目经理的五大核心技能
- php聊天室简单实现
- matlab输出工作区,matlab保存工作区数据
- 360自动收录js代码如何添加
- 靶机渗透日记 responder
- 管理工具 QTTabBar
- 力扣(700.701)补9.9
- 2017-2018-2 20155203《网络对抗技术》Exp9 :Web安全基础
- 小白需要知道的git命令
热门文章
- LLVM IRBuilder and pass:1.llvm基础命令
- 基于FPGA的电子计算器设计(下)
- 当我们谈论Virtual DOM时,我们在说什么——etch源码解读
- 一个好用的软件定时器模块MultiTimer
- R语言绘制生存曲线估计|生存分析|如何R作生存曲线图
- 移动商务进入战国时代 08年市场规模达306.5亿
- mysql根据id取模备份_MySQL中取模运算的正负与被模数的符号相同
- 大数据之clickhouse_clickhouse的基础介绍及基础使用
- Storj:A Peer-to-Peer Cloud Storage Network(点对点云存储网络)
- 对于Ubuntu16.04中jstest-gtk不能正常识别Logitech G920 racing wheel的问题补充