当前位置: 首页 > news >正文

关于多个elementui的cascader级联组件页面滚动渲染样式导致卡顿问题

如题,多个cascader级联组件,下拉选项含大量数据,滚动时会有实时样式重新渲染,导致CUP内存溢满而卡顿

小优化技巧:可加loading一次性加载完多个cascader级联组件后再允许页面滚动。

方法一:使用elementui中的内部源码的方法处理(推荐)

<script>// visible-change事件const cascaderVisibleChange = (val) => {const popperJsEle = refs.cascaderRef[0].popperJSif (val) {// 打开下拉时监听popper样式popperJsEle._setupEventListeners()} else {popperJsEle._removeEventListeners()}nextTick(() => {// 防止下拉框中滚动卡顿,去掉属性aria-ownsconst $el = document.querySelectorAll('.el-cascader-node[aria-owns]')Array.from($el).map(item => item.removeAttribute('aria-owns'))})}onMounted(() => {nextTick(() => {// 防止取不到poppperJS对象setTimeout(() => {// 调用内部方法,清除页面滚动实时监听给popper添加样式,导致内存溢满refs.cascaderRef[0].popperJS._removeEventListeners()}, 1000)})})</script>

方法二:强制写入display: none;样式(次推荐)

<style lang="scss">.none-imp {display: none!important;}
</style>// 当级联组件数据量大,滚动实时监听样式导致渲染消耗CPU内存溢出,可将其和子元素样式强制隐藏
const cascaderScrollStyle = (type) => {const popperEle = refs.cascaderRef[0].$refs.popperif (type === 'add') {// 父元素popperEle.classList.add('none-imp')// 第一个子元素popperEle.firstChild.classList.add('none-imp')} else if (type === 'remove') {popperEle.classList.remove('none-imp')popperEle.firstChild.classList.remove('none-imp')}
}// 防止el-cascader数据量过大,选择时卡顿,去掉属性aria-owns
const cascaderVisibleChange = (val) => {if (val) {cascaderScrollStyle('remove')} else {cascaderScrollStyle('add')}nextTick(() => {// 下拉项滚动删除属性aria-ownsconst $el = document.querySelectorAll('.el-cascader-node[aria-owns]')Array.from($el).map(item => item.removeAttribute('aria-owns'))})
}onMounted(() => {nextTick(() => {cascaderScrollStyle('add')})
})

相关文章:

  • SQLSmith: Databend 如何利用随机化测试检测 Bug
  • MySQL 8 - 处理 NULL 值 - is null、=null、is not null、<> null 、!= null
  • Jupyter Notebook的使用
  • 数据结构【DS】B树
  • Postman如何导出接口的几种方法?
  • Ubuntu Studio 23.10发布
  • 【开源】基于SpringBoot的天然气工程运维系统的设计和实现
  • NlogPrismWPF
  • Vue+ElementUI项目打包部署到Ubuntu服务器中
  • 苹果cms模板MXone V10.7魔改版源码 全开源
  • 如何公网远程访问本地WebSocket服务端
  • SQL中使用ROLLUP和CUBE函数轻松生成汇总行
  • MySQL - 为什么索引结构默认使用B+树,而不是其他?
  • 薛定谔的猫重出江湖?法国初创公司AliceBob研发猫态量子比特
  • CentOS 编译安装 nginx
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Android 控件背景颜色处理
  • Android框架之Volley
  • FineReport中如何实现自动滚屏效果
  • go append函数以及写入
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • maven工程打包jar以及java jar命令的classpath使用
  • Mysql优化
  • Python 基础起步 (十) 什么叫函数?
  • Shell编程
  • SpringCloud集成分布式事务LCN (一)
  • underscore源码剖析之整体架构
  • 初识MongoDB分片
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 关于extract.autodesk.io的一些说明
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 携程小程序初体验
  • 与 ConTeXt MkIV 官方文档的接驳
  • 正则表达式
  • puppet连载22:define用法
  • 进程与线程(三)——进程/线程间通信
  • 如何用纯 CSS 创作一个货车 loader
  • ​【已解决】npm install​卡主不动的情况
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #1014 : Trie树
  • #if 1...#endif
  • #include
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (06)金属布线——为半导体注入生命的连接
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (定时器/计数器)中断系统(详解与使用)
  • (二)pulsar安装在独立的docker中,python测试
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (翻译)terry crowley: 写给程序员