tree 樹組件大數據卡頓問題優化

問題背景

項目中有用到樹組件用來做文件目錄,但是由于這個樹組件的節點越來越多,導致頁面在滾動這個樹組件的時候瀏覽器就很容易卡死。這種問題基本上都是因為dom節點太多,導致的瀏覽器卡頓,這里很明顯就需要用到虛擬列表的技術(即不渲染這么多的節點)。

解決方案

如果是vue3,那么直接使用element-plus提供的Tree V2 虛擬化樹形控件組件即可。但是因為這個項目是一個vue2的項目,并且它原先用的是iview的組件來實現的,我這邊不可能因為這個優化就把項目升級到vue3,所以有兩個解決思路: 1.從網上找輪子 2.自己造輪子(時間太緊,放棄) 。找了很久終于找到一個比較好用的輪子,分享給大家使用,以后有遇到相同問題的時候可以參考下。

解決過程:

使用vue-easy-tree來優化樹組件(文檔地址)

1.安裝虛擬樹組件,以及安裝sass和sass-loader
npm i @fortawesome/fontawesome-free@6.7.2 -s

由于這個項目依賴了saas,所以要把這個也安裝下

npm i sass@1.89.1 sass-loader@7.3.1 -D
2.導入使用
import VueEasyTree from '@wchbrad/vue-easy-tree'
import '@wchbrad/vue-easy-tree/src/assets/index.scss'components: {VueEasyTree},
3.替換el-tree來使用

注意:該組件和element-ui的tree組件的prop是一致的(所以使用的使用可以參考element的tree組件),但是加了height屬性時就會開啟虛擬列表

4.完整代碼
<template><div class="home"><div class="left_box"><!-- <el-tree :data="treeData" :props="props" ref="veTree" node-key="id" :default-expanded-keys="['Root']"class="op-tree" :render-content="treeRender"></el-tree> --><vue-easy-treeref="veTree"node-key="id"class="op-tree"height="calc(100vh - 110px)":default-expanded-keys="['Root']":data="treeData":props="props":render-content="treeRender"></vue-easy-tree></div></div>
</template><script>
import treeData from './treeData'
import VueEasyTree from '@wchbrad/vue-easy-tree'
import '@wchbrad/vue-easy-tree/src/assets/index.scss'export default {name: 'HomeView',components: {VueEasyTree},computed: {},data() {return {treeData: treeData,props: {children: 'children',label: 'title'},localFile: {title: '',nodeId: '',nodeType: '',pId: ''},}},created() {console.log('treeData', this.treeData)},methods: {treeRender(h, { data }) {// nodeType 'file','文件','dir','文件夾'return (<div class={this.localFile.nodeId === `${data.id === 'Root' ? '/' : data.id.replace('Root', '')}` ? 'active tree-item' : 'tree-item'}><span on-click={() => { this.changeCode(data, `${data.nodeType}Detail`) }} class={this.localFile.nodeId === `${data.id === 'Root' ? '/' : data.id.replace('Root', '')}` ? 'colorBlue tree-item-title textOverflow' : 'tree-item-title textOverflow'}>{data.nodeType === 'file' ? <i class="fa fa-file"></i> : data.nodeType === 'dir' ? <i class="fa fa-folder-open"></i> : <span></span>}&ensp;{data.title}</span><div class="button-group">{data.nodeType !== 'file'? <tooltip content="新增" transfer placement="top"><i class="fa fa-plus" on-click={() => { this.changeCode(data, 'add') }}></i></tooltip> : <span></span>}{data.id !== 'Root'? <tooltip content="修改" transfer placement="top"><i class="fa fa-edit" on-click={() => { this.changeCode(data, 'modify') }}></i></tooltip> : <span></span>}{data.id !== 'Root'? <tooltip content="刪除" transfer placement="top"><i class="fa fa-trash" on-click={() => { this.changeCode(data, 'delete') }}></i></tooltip> : <span></span>}</div></div>)},changeCode(data = '', type) {this.view = ''this.$nextTick(() => {if (data.title && data.id) {this.localFile = {title: data.title,nodeId: `${data.id === 'Root' ? '/' : data.id.replace('Root', '')}`,nodeType: data.nodeType,pId: data.pId}type === `${data.nodeType}Detail` ? this.handleDetail(data.nodeType): type === 'add' ? this.handleAdd(): type === 'modify' ? this.handleEdit(): type === 'delete' ? this.handleDelete() : ''} else {this.$Notice.warning({title: '提醒',desc: '找不到當前信息',duration: 3})}})},handleDetail(){console.log('詳情')},handleEdit() {console.log('編輯')},handleAdd() {console.log('新增')},handleDelete() {console.log('刪除')},},};
</script>
<style lang="less" scoped>
.home {.left_box {width: 300px;height: 90vh;border: 1px solid #ccc;overflow-y: auto;}
}
</style>

總結

很多項目由于前期數據量不大,所以組件可以正常使用,但是當用戶量或者數據量大了之后,瀏覽器就會變得卡頓,這種優化就是必須的。大家可以把代碼拉下來運行對比下,沒有使用虛擬列表技術的樹真的很卡。

項目地址

gitHub:https://github.com/rui-rui-an/virtual_tree

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84269.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84269.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84269.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

瀏覽器工作原理05 [#] 渲染流程(上):HTML、CSS和JavaScript是如何變成頁面的

引用 瀏覽器工作原理與實踐 一、提出問題 在上一篇文章中我們介紹了導航相關的流程&#xff0c;那導航被提交后又會怎么樣呢&#xff1f;就進入了渲染階段。這個階段很重要&#xff0c;了解其相關流程能讓你“看透”頁面是如何工作的&#xff0c;有了這些知識&#xff0c;你可…

DrissionPage爬蟲包實戰分享

一、爬蟲 1.1 爬蟲解釋 爬蟲簡單的說就是模擬人的瀏覽器行為&#xff0c;簡單的爬蟲是request請求網頁信息&#xff0c;然后對html數據進行解析得到自己需要的數據信息保存在本地。 1.2 爬蟲的思路 # 1.發送請求 # 2.獲取數據 # 3.解析數據 # 4.保存數據 1.3 爬蟲工具 Dris…

android 布局小知識點 隨記

1. 布局屬性的命名前綴規律 與父容器相關的前綴 layout_alignParent&#xff1a;相對于父容器的對齊方式。 例如&#xff1a;layout_alignParentTop"true"&#xff08;相對于父容器頂部對齊&#xff09;。layout_margin&#xff1a;與父容器或其他控件的邊距。 例如…

GeoDrive:基于三維幾何信息有精確動作控制的駕駛世界模型

25年5月來自北大、理想汽車和 UC Berkeley 的論文“GeoDrive: 3D Geometry-Informed Driving World Model with Precise Action Control”。 世界模型的最新進展徹底改變動態環境模擬&#xff0c;使系統能夠預見未來狀態并評估潛在行動。在自動駕駛中&#xff0c;這些功能可幫…

Java高頻面試之并發編程-25

hello啊&#xff0c;各位觀眾姥爺們&#xff01;&#xff01;&#xff01;本baby今天又來報道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面試官&#xff1a;CAS都有哪些問題&#xff1f;如何解決&#xff1f; CAS 的問題及解決方案 CAS&#xff08;Compare and Swap&#xff0…

從碳基羊駝到硅基LLaMA:開源大模型家族的生物隱喻與技術進化全景

在人工智能的廣袤版圖上&#xff0c;一場從生物學羊駝到數字智能體的奇妙轉變正在上演。Meta推出的LLaMA(Large Language Model Meta AI)系列模型&#xff0c;不僅名字源自美洲駝(llama)&#xff0c;更以其開源特性和強大性能&#xff0c;引領了開源大模型社區的“駝類大爆發”…

可下載舊版app屏蔽更新的app市場

軟件介紹 手機用久了&#xff0c;app越來越臃腫&#xff0c;老手機卡頓成常態。這里給大家推薦個改善老手機使用體驗的方法&#xff0c;還能幫我們卸載不需要的app。 手機現狀 如今的app不斷更新&#xff0c;看似在優化&#xff0c;實則內存占用越來越大&#xff0c;對手機性…

Python_day47

作業&#xff1a;對比不同卷積層熱圖可視化的結果 一、不同卷積層的特征特性 卷積層類型特征類型特征抽象程度對輸入的依賴程度低層卷積層&#xff08;如第 1 - 3 層&#xff09;邊緣、紋理、顏色、簡單形狀等基礎特征低高&#xff0c;直接與輸入像素關聯中層卷積層&#xff08…

比較數據遷移后MySQL數據庫和達夢數據庫中的表

設計一個MySQL數據庫和達夢數據庫的表數據比較的詳細程序流程&#xff0c;兩張表是相同的結構&#xff0c;都有整型主鍵id字段&#xff0c;需要每次從數據庫分批取得2000條數據&#xff0c;用于比較&#xff0c;比較操作的同時可以再取2000條數據&#xff0c;等上一次比較完成之…

GC1808高性能24位立體聲音頻ADC芯片解析

1. 芯片概述 GC1808是一款24位立體聲音頻模數轉換器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采樣率&#xff0c;集成Δ-Σ調制器、數字抗混疊濾波器和高通濾波器&#xff0c;適用于高保真音頻采集場景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…

Linux 文本比較與處理工具:comm、uniq、diff、patch、sort 全解析

在類 UNIX 操作系統&#xff0c;特別是 Linux 系統中&#xff0c;命令行提供了一整套強大的文本處理工具&#xff0c;這些工具對于文件差異對比、內容篩選、文本排序以及源代碼管理尤為重要。今天&#xff0c;我們將結合真實示例&#xff0c;深入介紹并實戰演示 comm、uniq、di…

6月6日day46打卡

通道注意力(SE注意力) 知識點回顧&#xff1a; 不同CNN層的特征圖&#xff1a;不同通道的特征圖什么是注意力&#xff1a;注意力家族&#xff0c;類似于動物園&#xff0c;都是不同的模塊&#xff0c;好不好試了才知道。通道注意力&#xff1a;模型的定義和插入的位置通道注意力…

前端技能包

ES6 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><script>// 變量定義var a1;let b5; // 現在使用let 定義變量// 對象解構let person{&quo…

大數據(1) 大數據概述

一、大數據時代 1.三次信息化浪潮 二、什么是大數據 1.四個特點 4V&#xff1a;數據量&#xff08;Volume&#xff09;大、數據類型&#xff08;Variety&#xff09;繁多、處理速度&#xff08;Velocity&#xff09;快、價值密度&#xff08;Value&#xff09;低 三、大數據…

element-plus 單選組件 el-radio,選不上,又沒報錯,直接復制官網也不行解決方案

在使用 Vue 框架開發項目時&#xff0c;Element UI 是常用的組件庫。最近在開發中遇到了 Element 單選框組件el-radio的雙向綁定問題&#xff0c;直接復制element官網上的的案例下來也是不得&#xff0c;經過調試和探索&#xff0c;終于找到了解決方案&#xff0c;特此記錄分享…

使用 Amazon Q Developer CLI 快速搭建各種場景的 Flink 數據同步管道

在 AI 和大數據時代&#xff0c;企業通常需要構建各種數據同步管道。例如&#xff0c;實時數倉實現從數據庫到數據倉庫或者數據湖的實時復制&#xff0c;為業務部門和決策團隊分析提供數據結果和見解&#xff1b;再比如&#xff0c;NoSQL 游戲玩家數據&#xff0c;需要轉換為 S…

開疆智能Ethernet/IP轉Modbus網關連接質量流量計配置案例

首先設置modbus從站的485參數&#xff0c;確保網關和從站的485參數保持一致。 設置完成后打開網關配置軟件并新建項目 先設置網關在Ethernet一側的IP地址以及數據轉換長度。 設置網關的Modbus參數如波特率9600無校驗8數據位&#xff08;無校驗選8&#xff0c;有校驗選9&#xf…

多智能體MPE環境遇到的若干問題

最近學習MADDPG算法&#xff0c;用MPE環境來測試算法性能。于是便下載了pettingzoo包&#xff0c;運行了simple_tag_v3環境&#xff0c;此環境中有獵人、逃亡者和障礙物。 問題1: MPE中的simple_tag_v3環境&#xff0c;在渲染時看似移動的問題 由于相機視角跟隨導致的視覺錯覺…

[特殊字符] FFmpeg 學習筆記

一、FFmpeg 簡介 FFmpeg 是一個開源跨平臺的視頻和音頻處理工具&#xff0c;支持錄制、轉換、流處理等功能。 官網&#xff1a;https://ffmpeg.org 安裝命令&#xff08;macOS&#xff09;&#xff1a; brew install ffmpeg二、基本命令結構 ffmpeg -i 輸入文件 [參數] 輸出…

leetcode Top100 238. 除自身以外數組的乘積|數組系列

題目鏈接&#xff1a;238. 除自身以外數組的乘積 - 力扣&#xff08;LeetCode&#xff09; 238. 除自身以外數組的乘積|數組系列 給你一個整數數組 nums&#xff0c;返回 數組 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。 題目數據 …