虛擬DOM之documentFragment

前言

在編程的過程中,存在著真實(shí)dom,和虛擬dom,簡(jiǎn)單的理解寫在html文件中的 標(biāo)簽都可以理解為真實(shí)dom,通過JavaScript動(dòng)態(tài)創(chuàng)建的dom,然后再添加到頁面中去就是虛擬dom,不管是真實(shí)dom還是虛擬dom,在JavaScript中一個(gè)dom對(duì)象包含著很多的數(shù)據(jù),因此過分多次的操作dom會(huì)使頁面的性能大大降低,因此在前端代碼的優(yōu)化中就有說到----->減少對(duì)dom的直接操作,因此JavaScript 中出現(xiàn)了一個(gè)函數(shù) documentFragment
不多說直接上代碼解釋:

傳統(tǒng)意義上的虛擬dom創(chuàng)建

1.假設(shè)我們需要?jiǎng)討B(tài)創(chuàng)建五個(gè) li 標(biāo)簽

<body>
<ul></ul>
<script>
    for(let i = 0; i < 5; i++){
        let text = document.createElement('li')
        text.innerText = i
        document.querySelector('ul').appendChild(text)
    }
</script>
</body>

效果圖:


image.png

此時(shí)我們不難發(fā)現(xiàn)這段代碼對(duì)dom進(jìn)行了5次操作,才將5個(gè)li添加到了ul 中,如果要是一百個(gè)一萬個(gè)是不是就會(huì)大大影響頁面性能,因此衍生出了documentFragment

通過documentFragment創(chuàng)建

<body>
    <ul></ul>
    <script>
        let fragment = document.createDocumentFragment()
      // 此時(shí)創(chuàng)建的是一個(gè)空的文檔碎片
        for(let i = 0; i < 5; i++){
            let text = document.createElement('li')
            text.innerText = i
            fragment.appendChild(text)
        }
        // 轉(zhuǎn)換偽數(shù)組
        // let newArr = Array.prototype.slice.call(fragment.childNodes,1)
        let newArr = Array.from(fragment.childNodes)
        console.log(fragment.childNodes);
        console.log(newArr);
        document.querySelector('ul').appendChild(fragment)
    </script>
</body>

效果圖:


image.png

createDocumentFragment()方法,是用來創(chuàng)建一個(gè)虛擬的節(jié)點(diǎn)對(duì)象,或者說,是用來創(chuàng)建文檔碎片節(jié)點(diǎn)。它可以包含各種類型的節(jié)點(diǎn),在創(chuàng)建之初是空的。

不難發(fā)現(xiàn)這種寫法,我們只對(duì)dom進(jìn)行了 一次操作,所存在的思想是,將虛擬dom(沒掛載頁面之前是保存在內(nèi)存中)先放在文檔碎片中,最后把文檔碎片添加到頁面中,此時(shí)只對(duì)dom進(jìn)行了一次操作,大大的提升的頁面的性能

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容