vue-virtual-scroll-list虛擬組件實(shí)現(xiàn)思路詳解
組件性能問題
在數(shù)據(jù)量大的時(shí)候,cascader/tree這類的列表加載緩慢,滾動(dòng)卡頓,操作延遲。
下圖是2000條數(shù)據(jù)的時(shí)候:
密密麻麻的節(jié)點(diǎn):

絢麗多芬的火焰圖:

從上面的火焰圖可知卡頓的click時(shí)間,渲染時(shí)間的非常的嚴(yán)重。
影響cascader/tree這類組件性能的主要原因:
- 一次性加載出所有的dom節(jié)點(diǎn),導(dǎo)致首次加載緩慢
- 組件中有一個(gè)computed屬性:
checkedValue。這個(gè)變量觸發(fā)任何一個(gè)click事件的時(shí)候,都會(huì)改變這個(gè)變量。cascader源碼當(dāng)中,會(huì)因?yàn)檫@個(gè)值的改變觸發(fā)render方法,導(dǎo)致JS執(zhí)行時(shí)間、重繪和重排的時(shí)間都很長。
解決方案
既然是大數(shù)據(jù)量導(dǎo)致的,那么我們就控制一次性加載的數(shù)據(jù),這個(gè)時(shí)候自然想到使用虛擬滾動(dòng)。github搜索下,搜索到了vue-virtual-scroll-list組件。
npm install vue-virtual-scroll-list --save
具體用法可以自行查看官網(wǎng)。主要是下面三個(gè)參數(shù):
- data-key: 配置循環(huán)的組件子組件的唯一ID
- data-source: 數(shù)組
- data-component: 待循環(huán)的組件
個(gè)人更加喜歡像下面這樣的組件設(shè)計(jì):
<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不夠紅火了!不再卡頓。
實(shí)現(xiàn)原理
那么它的實(shí)現(xiàn)原理是什么呢?
下面是一張3d圖,表示了數(shù)據(jù)實(shí)際展示的范圍。

由此可知,根據(jù)滾動(dòng)容器元素的可視窗口來渲染長列表中的部分?jǐn)?shù)據(jù)。利用視差和錯(cuò)覺制作一份出一份“虛擬”列表,一個(gè)虛擬列表由三部分組成:
- 視窗口
- 虛擬數(shù)據(jù)列表(數(shù)據(jù)展示)
- 滾動(dòng)占位區(qū)塊(底部滾動(dòng)區(qū)
它的實(shí)現(xiàn)思路:

根據(jù)該圖可以得到下面這樣的思維導(dǎo)圖:

總結(jié)
到此這篇關(guān)于vue-virtual-scroll-list虛擬組件實(shí)現(xiàn)思路的文章就介紹到這了,更多相關(guān)vue-virtual-scroll-list虛擬組件實(shí)現(xiàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue3實(shí)現(xiàn)tabs導(dǎo)航欄點(diǎn)擊每個(gè)導(dǎo)航項(xiàng)有下劃線動(dòng)畫效果
這篇文章主要介紹了vue3實(shí)現(xiàn)tabs導(dǎo)航欄點(diǎn)擊每個(gè)導(dǎo)航項(xiàng)有下劃線動(dòng)畫效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-07-07
vue-calendar-component 封裝多日期選擇組件的實(shí)例代碼
這篇文章主要介紹了vue-calendar-component 封裝多日期選擇組件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
教你如何在 Nuxt 3 中使用 wavesurfer.js
這篇文章主要介紹了如何在 Nuxt 3 中使用 wavesurfer.js,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01
vue ajax 攔截原理與實(shí)現(xiàn)方法示例
這篇文章主要介紹了vue ajax 攔截原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了vue.js基于ajax攔截實(shí)現(xiàn)無刷新登錄的相關(guān)原理與操作技巧,需要的朋友可以參考下2019-11-11
Vue解析帶html標(biāo)簽的字符串為dom的實(shí)例
今天小編就為大家分享一篇Vue解析帶html標(biāo)簽的字符串為dom的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11

