真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Vue.js如何優(yōu)化無限滾動列表-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)Vue.js如何優(yōu)化無限滾動列表的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

五河ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

問題

大家都知道,Web 頁面修改 DOM 是開銷較大的操作,相比其他操作要慢很多。這是為什么呢?因為每次 DOM 修改,瀏覽器往往需要重新計算元素布局,再重新渲染。也就是所謂的重排(reflow)和重繪(repaint)。尤其是在頁面包含大量元素和復(fù)雜布局的情況下,性能會受到影響。那對用戶有什么實際的影響呢?

一個常見的場景是大數(shù)據(jù)量的列表渲染。通常表現(xiàn)為可無限滾動的無序列表或者表格,當(dāng)數(shù)據(jù)很多時,頁面會出現(xiàn)明顯的滾動卡頓,嚴(yán)重影響了用戶體驗。怎么解決呢?

解決方案

既然問題的根源是 DOM 元素太多,那就想辦法限制元素數(shù)量。

  • 限制列表對用戶可見的元素數(shù)量。我們把可見區(qū)域稱為 ViewPort

  • 當(dāng)列表滾動時,列表種的其他元素怎么由不可見變?yōu)榭梢姡?/p>

  • 監(jiān)聽列表容器元素的滾動事件,當(dāng)列表里的元素進入可視區(qū)域,則添加到DOM中

  • 問題是如果一直這么滾下去,列表會越來越大。所以需要在列表元素離開 ViewPort 的時候從DOM中移除

  • 問題又來了,由于 ViewPort 剛好是一屏的大小,滾動的時候元素還沒來得及渲染,會出現(xiàn)一段時間的空白。解決辦法就是上下增加一部分?jǐn)?shù)據(jù)渲染。

Vue.js如何優(yōu)化無限滾動列表

無限滾動的性能優(yōu)化方案基本思路就是這樣。

在實際項目中,我們可能不需要自己從頭實現(xiàn)一個無限滾動列表組件,Vue.js 就有一個現(xiàn)成的輪子:vue-virtual-scroller。

在項目中安裝這個插件:

$ npm install -D vue-virtual-scroller

項目入口文件 main.js 引入這個插件:

import "vue-virtual-scroller/dist/vue-virtual-scroller.css";
import Vue from "vue";
import VueVirtualScroller from "vue-virtual-scroller";

Vue.use(VueVirtualScroller);

案例一:VirtualList

我們來看一個簡單的例子,用vue-virtual-scroller渲染一個包含大量數(shù)據(jù)的列表。 先用JSON-Generator 生成 5000 條數(shù)據(jù)的 JSON 對象,并保存到 data.json 文件??梢杂孟旅娴囊?guī)則:

[
 '{{repeat(5000)}}',
 {
  _id: '{{objectId()}}',
  age: '{{integer(20, 40)}}',
  name: '{{firstName()}} {{surname()}}',
  company: '{{company().toUpperCase()}}'
 }
]

新建一個 VirtualList.vue 文件,引入data.json,并將它賦值給組件的items屬性。然后套一個 組件:

VirtualList.vue:


 


virtual-scroller 組件必須設(shè)置 item-height 。另外,由于我們要創(chuàng)建一個列表,可以設(shè)置content-tag="ul",表示內(nèi)容渲染成

    標(biāo)簽。

    vue-virtual-scroller 支持使用 scoped slots,增加了內(nèi)容渲染的靈活性。通過使用slot-scope="props",我們可以訪問 vue-virtual-scroller 暴露的數(shù)據(jù)。

    props 有一個itemKey屬性,出于性能考慮,我們應(yīng)該在內(nèi)容部分的根元素上綁定 :key="props.itemKey"。然后我們就可以通過 props.item 拿到 JSON 里的原始數(shù)據(jù)了。

    如果你要給列表設(shè)置樣式,可以給 virtual-scroller 設(shè)置 class屬性:

    
    
    

    或者也可以用scoped 樣式,用 /deep/選擇器:

    
    .virtual-list /deep/ ul {
     list-style: none;
    }
    

    案例二: VirtualTable

    類似 VirtualList,我們再看一個表格組件VirtualTable: VirtualTable.vue:

    
     
    
    
    

    這里有個小問題,我們需要增加一個 標(biāo)簽,用于顯示列名: Age, Name 和 Company

    幸好 virtual-scroller 支持 slot,可以定制各部分內(nèi)容:

                           

    這些 slot 都可以放置自定義內(nèi)容。container 會被 container-tag 屬性值替換,默認是div,content 被 content-tag 值替換。

    這里用 before-content slot 加一個thead 就行了:

    
     
    

    請注意,我們把content-tag="table" 改成了content-tag="tbody",因為我們設(shè)置了container-tag="table",這是為了構(gòu)造table 標(biāo)簽的常規(guī)結(jié)構(gòu)。

    如果要加一個 tfoot,應(yīng)該知道怎么做了吧。

    感謝各位的閱讀!關(guān)于“Vue.js如何優(yōu)化無限滾動列表”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

    另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


    名稱欄目:Vue.js如何優(yōu)化無限滾動列表-創(chuàng)新互聯(lián)
    網(wǎng)頁網(wǎng)址:http://weahome.cn/article/dohddd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部