虛擬dom

什么是虛擬DOM

簡單來說,虛擬dom就是一個最少包含tagName attr children 屬性的js對象,是一層對真實dom節(jié)點的抽象,通過js對象(vdom)作為基礎(chǔ)的樹,使用對象的屬性來描述節(jié)點,最后通過一系列的操作反映到真實節(jié)點上。

為什么需要虛擬dom

使用用傳統(tǒng)的原生api或jQuery去操作DOM時,瀏覽器會從構(gòu)建DOM樹開始從頭到尾執(zhí)行一遍流程,當(dāng)我們需要更新多個dom結(jié)點的時候,傳統(tǒng)的操作,會一個一個進行操作,最終 頻繁的dom操作引起的瀏覽器的回流和重繪造成
性能開銷大,虛擬dom出現(xiàn)是在針對性的對需要更新的dom進行修改,會在指定時間內(nèi)對修改的dom進行批量更新,從而減少性能的消耗;

簡單實現(xiàn)虛擬dom
//node 節(jié)點
 var node = {
    tagName: 'div',
    css: {
        width: '100px' ,
        height: '100px' ,
        backgroundColor: 'red'
    },
    events:{
        onClick: ()=> {
            console.log('virtual dom')
        }
    },
    children: [
        {
            tagName: 'span',
            attr: {
                innerText: 'nice'
            }
        }
    ]
 }

      function addAttr(obj, attrs) {
              for(let keyName in attrs) {
                obj[keyName] = attrs[keyName]
              }
      }
     function render(node) {
        const vNode = document.creatElement(node.tagName)
        const {css, attr, events, children} = node
        addAttr(vNode.style, css)
        addAttr(vNode, attr)
        addAttr(vNode, events)
        if(node.children) {
            for(let child of node.children) {
                vNode.append(render(child))
            }
        }

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

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

  • 一、瀏覽器渲染HTML的步驟 HTML被HTML解析器解析成DOM Tree, CSS則被CSS解析器解析成CSS...
    dingFY閱讀 728評論 0 0
  • diff算法 vdom因為是純粹的JS對象,所以操作它會很高效,但是vdom的變更最終會轉(zhuǎn)換成DOM操作,為了實現(xiàn)...
    Upcccz閱讀 1,456評論 0 3
  • 1.為什么需要虛擬DOM DOM是很慢的,其元素非常龐大,頁面的性能問題由JS引起的,大部分都是由DOM操作引起的...
    Ecl_02b8閱讀 2,368評論 1 4
  • 真是DOM 的缺陷: js 操縱Dom 會 影響到整個渲染流水線 我們可以調(diào)用document.body.appe...
    Lyan_2ab3閱讀 820評論 0 1
  • 1、真實DOM的解析流程 瀏覽器渲染引擎工作流程都差不多,大致分為5步 創(chuàng)建DOM樹: 創(chuàng)建StyleRules ...
    懂會悟閱讀 430評論 0 1

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