vue-virtual-scroll-list虛擬組件實現(xiàn)思路詳解
組件性能問題
在數(shù)據(jù)量大的時候,cascader/tree這類的列表加載緩慢,滾動卡頓,操作延遲。
下圖是2000條數(shù)據(jù)的時候:
密密麻麻的節(jié)點:
絢麗多芬的火焰圖:
從上面的火焰圖可知卡頓的click時間,渲染時間的非常的嚴重。
影響cascader/tree這類組件性能的主要原因:
- 一次性加載出所有的dom節(jié)點,導致首次加載緩慢
- 組件中有一個computed屬性:
checkedValue
。這個變量觸發(fā)任何一個click事件的時候,都會改變這個變量。cascader源碼當中,會因為這個值的改變觸發(fā)render
方法,導致JS執(zhí)行時間、重繪和重排的時間都很長。
解決方案
既然是大數(shù)據(jù)量導致的,那么我們就控制一次性加載的數(shù)據(jù),這個時候自然想到使用虛擬滾動。github搜索下,搜索到了vue-virtual-scroll-list
組件。
npm install vue-virtual-scroll-list --save
具體用法可以自行查看官網(wǎng)。主要是下面三個參數(shù):
- data-key: 配置循環(huán)的組件子組件的唯一ID
- data-source: 數(shù)組
- data-component: 待循環(huán)的組件
個人更加喜歡像下面這樣的組件設計:
<el-select v-model="value" placeholder="Select"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled" /> </el-select>
顯性的子組件和v-for
,以及直觀的key
值。
優(yōu)化后的表現(xiàn)
結(jié)果顯而易見?;鹧鎴D不夠紅火了!不再卡頓。
實現(xiàn)原理
那么它的實現(xiàn)原理是什么呢?
下面是一張3d圖,表示了數(shù)據(jù)實際展示的范圍。
由此可知,根據(jù)滾動容器元素的可視窗口來渲染長列表中的部分數(shù)據(jù)。利用視差和錯覺制作一份出一份“虛擬”列表,一個虛擬列表由三部分組成:
- 視窗口
- 虛擬數(shù)據(jù)列表(數(shù)據(jù)展示)
- 滾動占位區(qū)塊(底部滾動區(qū)
它的實現(xiàn)思路:
根據(jù)該圖可以得到下面這樣的思維導圖:
總結(jié)
到此這篇關于vue-virtual-scroll-list虛擬組件實現(xiàn)思路的文章就介紹到這了,更多相關vue-virtual-scroll-list虛擬組件實現(xiàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用 Vue 3 的 createApp方法初始化應用的基本步驟
createApp 是 Vue 3 引入的全局 API,用于創(chuàng)建一個應用實例,這篇文章主要介紹了如何使用 Vue 3 的 createApp方法初始化應用,通過 createApp 方法,我們從 Vue 3 的基本初始化開始,擴展到插件的應用、多個應用實例的創(chuàng)建等,需要的朋友可以參考下2024-05-05vue3.0 的 Composition API 的使用示例
這篇文章主要介紹了vue3.0 的 Composition API 的使用示例,幫助大家更好的理解和學習vue,感興趣的朋友可以了解下2020-10-10淺談vue中改elementUI默認樣式引發(fā)的static與assets的區(qū)別
下面小編就為大家分享一篇淺談vue中改elementUI默認樣式引發(fā)的static 與assets的區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02