當面試官問你:怎么處理百萬條數(shù)據(jù)渲染的性能問題誓军?

不要再回答使用分頁或者文檔碎片了

回答分頁 ,不是很貼切考官的問題疲扎,考官也不會想聽到這樣的答案昵时,
第二 ,文檔碎片 椒丧,這是使用js 操作dom 的時候需要用到壹甥,需要動態(tài)生成原生dom,在vue的項目里使用比較不方便壶熏。能回答到這個勉強可以句柠。

我推薦的是:window.requestAnimationFrame
requestAnimationFrame是HTML5中提供的動畫API,簡稱rAF棒假,即請求動畫幀溯职。可以讓瀏覽器優(yōu)化并行的動畫動作帽哑,更合理的重新排列動作序列谜酒,并把能夠合并的動作放在一個渲染周期內(nèi)完成,從而呈現(xiàn)出更流暢的動畫效果妻枕。

瀏覽器每次渲染一秒鐘渲染60次 1000ms/60s , 即 每毫秒16.6次 僻族。
當我們頁面的數(shù)據(jù)超級多的時候,一次性就渲染全部的數(shù)據(jù)屡谐,就會造成頁面卡頓
我們來看下一個例子:


image.png

右邊是渲染的dom 每個div盒子里面包含了n個div塊述么,數(shù)量其實并不多。但是等待頁面卻花了十秒鐘的時間
通過性能調(diào)試面板可以看到 瀏覽器裝載只需要1毫秒 執(zhí)行js 腳本花了 5秒多 愕掏,渲染也花了四秒多碉输,總計 10秒左右。


image.png

看看代碼如何寫的亭珍,可以看到就是嵌套了兩個循環(huán)一個 ,兩個循環(huán)一百次 枝哄,總的差不多是百萬循環(huán)了肄梨,js一次性就加載,是需要十秒挠锥,這個時候瀏覽器是一直白屏的众羡,需要等待差不多九秒,頁面才出來東西

image.png

看看使用了 requestAnimationFrame 優(yōu)化之后 前后對比蓖租,速度不是一般的快.

實際上就是 瀏覽器分開渲染羊壹,n毫秒內(nèi)渲染前面幾個div盒子。一直在渲染齐婴,直到渲染完畢。相當是把十秒鐘拆分成每一秒渲染前多少個div情妖,以此類推。這樣用戶一進來就能看到前半段的東西诱担,剩余的瀏覽器會慢慢加載毡证,并不會影響前面的顯示,這樣一樣來就能解決這種性能的問題蔫仙,也不會影響用戶體驗。


image.png

完整的代碼示例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>defer</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .box {
            width: 100vw;
            height: 100vh;
            display: flex;
            flex-wrap: wrap;
        }

        .block {
            width: 400px;
            margin: 20px;
            height: 400px;
            border: 1px solid red;
            display: flex;
            flex-wrap: wrap;
        }

        .item {
            width: 6px;
            height: 6px;
            background: #000;
            margin: 1px;
        }
    </style>
</head>

<body>
    <div id="app" class="box">
        <template v-for="(item,index) in 1000">
             <!-- 默認顯示優(yōu)化后的代碼 -->
            <!-- 使用沒有用requestAnimationFrame優(yōu)化之前的渲染代碼可以將v-if="defer(index)" 刪掉即可 -->
            <div class="block" v-if="defer(index)">
                <div class="item" v-for="(sub,index) in 1000"></div>
            </div>
        </template>
    </div>
</body>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.2.6/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data() {
            return {
                frameCount: 0,
            }
        },
        mounted() {
            const refreshFrameCount = (maxFrameCount) => {
                requestAnimationFrame(() => {
                    this.frameCount++
                    if (this.frameCount < maxFrameCount) {
                        refreshFrameCount(maxFrameCount)
                    }
                })
            }
            refreshFrameCount(500)
        },
        methods: {
            defer(showInFrameCount) {
                return this.frameCount >= showInFrameCount
            }
        }
    })
</script>

</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恤煞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涎嚼,更是在濱河造成了極大的恐慌阱州,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苔货,死亡現(xiàn)場離奇詭異立哑,居然都是意外死亡夜惭,警方通過查閱死者的電腦和手機铛绰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敢会,“玉大人,你說我怎么就攤上這事这嚣。” “怎么了姐帚?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我唯蝶,道長,這世上最難降的妖魔是什么遗嗽? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮涂滴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘柔纵。我一直安慰自己,他們只是感情好搁料,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布系羞。 她就那樣靜靜地躺著郭计,像睡著了一般椒振。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上澎迎,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天庐杨,我揣著相機與錄音,去河邊找鬼灵份。 笑死,一個胖子當著我的面吹牛填渠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播氛什,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼匪凉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了洒缀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤萨脑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后渤早,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡鹊杖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年扛芽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片川尖。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖被芳,靈堂內(nèi)的尸體忽然破棺而出馍悟,到底是詐尸還是另有隱情畔濒,我是刑警寧澤锣咒,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站宠哄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏毛嫉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一暴区、第九天 我趴在偏房一處隱蔽的房頂上張望辛臊。 院中可真熱鬧仙粱,春花似錦、人聲如沸伐割。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至硬霍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唯卖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工抽减, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胯甩。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓堪嫂,卻偏偏與公主長得像偎箫,于是被迫代替她去往敵國和親皆串。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355