頁面如何渲染上萬條數(shù)據(jù)而不卡住頁面

如何渲染幾萬條數(shù)據(jù)不卡住頁面?也就是說不能一次性將幾萬條數(shù)據(jù)都渲染出來对蒲,而是應該一次渲染一部分DOM钩蚊,需要用到requestAnimationFrame贡翘、createDocumentFragment兩個api。

1砰逻、window.requestAnimationFrame()

window.requestAnimationFrame()告訴瀏覽器——你希望執(zhí)行一個動畫鸣驱,并且要求瀏覽器在下次重繪之前調(diào)用指定的回調(diào)函數(shù)更新動畫。該方法需要傳入一個回調(diào)函數(shù)作為參數(shù)蝠咆,該回調(diào)函數(shù)會在瀏覽器下一次重繪之前執(zhí)行丐巫。

語法

window.requestAnimationFrame(callback);

參數(shù)

callback

下一次重繪之前更新動畫幀所調(diào)用的函數(shù)(即上面所說的回調(diào)函數(shù))。該回調(diào)函數(shù)會被傳入DOMHighResTimeStamp參數(shù)勺美,該參數(shù)與performance.now()的返回值相同递胧,它表示requestAnimationFrame() 開始去執(zhí)行回調(diào)函數(shù)的時刻。

返回值

一個 long 整數(shù)赡茸,請求 ID 缎脾,是回調(diào)列表中唯一的標識。是個非零值占卧,沒別的意義遗菠。你可以傳這個值給 window.cancelAnimationFrame() 以取消回調(diào)函數(shù)。

參考:MDN 其他詳細介紹請?zhí)D(zhuǎn)MDN

2华蜒、document.createDocumentFragment()

語法

let fragment = document.createDocumentFragment();

描述

[DocumentFragments](https://developer.mozilla.org/en-US/docs/DOM/DocumentFragment "DOM/DocumentFragments") 是DOM節(jié)點辙纬。它們不是主DOM樹的一部分。通常的用例是創(chuàng)建文檔片段叭喜,將元素附加到文檔片段贺拣,然后將文檔片段附加到DOM樹。在DOM樹中捂蕴,文檔片段被其所有的子元素所代替譬涡。

因為文檔片段存在于內(nèi)存中,并不在DOM樹中啥辨,所以將子元素插入到文檔片段時不會引起頁面回流(對元素位置和幾何上的計算)涡匀。因此,使用文檔片段通常會帶來更好的性能溉知。

模擬代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<ul>控件</ul>
<script>
    setTimeout(() => {
        // 插入十萬條數(shù)據(jù)
        const total = 100000
        // 一次插入 20 條陨瘩,如果覺得性能不好就減少
        const once = 20
        // 渲染數(shù)據(jù)總共需要幾次
        const loopCount = total / once
        let countOfRender = 0
        let ul = document.querySelector("ul");
        function add() {
            // 優(yōu)化性能,插入不會造成回流
            const fragment = document.createDocumentFragment();
            for (let i = 0; i < once; i++) {
                const li = document.createElement("li");
                li.innerText = Math.floor(Math.random() * total);
                fragment.appendChild(li);
            }
            ul.appendChild(fragment);
            countOfRender += 1;
            loop();
        }
        function loop() {
            if (countOfRender < loopCount) {
                window.requestAnimationFrame(add);
            }
        }
        loop();
    }, 0);
</script>
</body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末级乍,一起剝皮案震驚了整個濱河市舌劳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卡者,老刑警劉巖蒿囤,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異崇决,居然都是意外死亡材诽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門恒傻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脸侥,“玉大人,你說我怎么就攤上這事盈厘≌稣恚” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵沸手,是天一觀的道長外遇。 經(jīng)常有香客問我,道長契吉,這世上最難降的妖魔是什么跳仿? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮捐晶,結(jié)果婚禮上菲语,老公的妹妹穿的比我還像新娘。我一直安慰自己惑灵,他們只是感情好山上,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著英支,像睡著了一般佩憾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上干花,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天鸯屿,我揣著相機與錄音,去河邊找鬼把敢。 笑死寄摆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的修赞。 我是一名探鬼主播婶恼,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柏副!你這毒婦竟也來了勾邦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤割择,失蹤者是張志新(化名)和其女友劉穎眷篇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荔泳,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡蕉饼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年虐杯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昧港。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡擎椰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出创肥,到底是詐尸還是另有隱情达舒,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布叹侄,位于F島的核電站巩搏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏趾代。R本人自食惡果不足惜贯底,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望稽坤。 院中可真熱鬧丈甸,春花似錦、人聲如沸尿褪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杖玲。三九已至顿仇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間摆马,已是汗流浹背臼闻。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留囤采,地道東北人述呐。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像蕉毯,于是被迫代替她去往敵國和親乓搬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 之前通過深入學習DOM的相關(guān)知識代虾,看了慕課網(wǎng)DOM探索之基礎詳解篇這個視頻(在最近看第三遍的時候进肯,準備記錄一點東西...
    微醺歲月閱讀 4,488評論 2 62
  • 【轉(zhuǎn)載】CSDN - 張林blog http://blog.csdn.net/XIAOZHUXMEN/articl...
    竿牘閱讀 3,490評論 1 14
  • 結(jié)合網(wǎng)上和個人總結(jié),僅供參考棉磨。 1江掩、HTML&CSS: 1、DOM結(jié)構(gòu) —— 兩個節(jié)點之間可能存在哪些關(guān)系以及如何...
    FredericaJ閱讀 3,937評論 3 7
  • 前端性能優(yōu)化資料整理 頁面性能差的直接后果是用戶需要等待,而等待环形,尤其是不確定要多長時間的等待會給用戶帶來焦慮策泣,為...
    飄零之雪閱讀 820評論 2 3
  • 今天,家里來了一個小客人——讀二年級的靜靜同學斟赚,當時我正在玩電腦着降。她很想要玩些什么差油,可是家里又沒有什么玩具拗军。她很膽...
    不二_sunshine閱讀 258評論 0 0