最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS前端開發(fā)模擬虛擬dom轉(zhuǎn)真實dom詳解

 更新時間:2023年01月10日 10:06:40   作者:前端蘭博  
這篇文章主要為大家介紹了JS前端開發(fā)模擬虛擬dom轉(zhuǎn)真實dom詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

經(jīng)常使用Vue或React的小伙伴肯定對虛擬dom這個詞不陌生,虛擬dom的設(shè)計是推進前端框架發(fā)展的一大變革。今天帶大家簡單模擬下虛擬dom轉(zhuǎn)換真實dom的js設(shè)計。廢話不說了,上車吧。

虛擬dom的介紹

介紹

虛擬dom本質(zhì)是一段js代碼,用來模擬dom樹的結(jié)果。

如下是對一段虛擬dom模擬真實dom的例子

真實dom

<div class="box">
    <p name="dog">xiao ming</p>
  </div>

虛擬dom

 let vnode = {
  tag:"div",
  attrs:{
    class:["box"]
  },
  childrens:[
    {
      tag:"p",
      attrs:{
        name:"dog"
      },
      childrens:[
        {
          tag:'text',
          content:"xiao ming"
        }
      ]
    }
  ]
}

優(yōu)勢

  • 跨平臺
  • 虛擬dom配合diff算法在快速更新dom的同時,可以減少頁面的重拍與重繪
  • 虛擬dom解放了前端程序員的思想,徹底拋棄了早期大量操作dom的工作,而是將工作重點放在了數(shù)據(jù)和邏輯的設(shè)計。從此不再被后端程序員嘲笑為切圖崽

缺點

頁面有大量dom時,性能可能沒有原生dom效率高。(原因:虛擬dom本質(zhì)還是用js描述dom樹,所以當(dāng)頁面dom比較多時,js操作與diff算法需要耗費額外的性能較大)

虛擬dom轉(zhuǎn)換真實dom

終于來到了今天的主角,通過設(shè)計虛擬dom轉(zhuǎn)換真實dom的過程,可以更加清晰其工作原理和設(shè)計過程,同時也能讓各位在面試中如魚得水,碼上拈來。

const vnode = {
  tag: 'DIV',
  attrs: {
      id: 'app'
  },
  children: [{
          tag: 'SPAN',
          children: [{
              tag: 'A',
              children: []
          }]
      },
      {
          tag: 'SPAN',
          children: [{
                  tag: 'A',
                  children: []
              },
              {
                  tag: 'A',
                  children: []
              }
          ]
      }
  ]
}
/*虛擬dom轉(zhuǎn)換真實dom設(shè)計*/
function render(vnode) {
  //核心遞歸函數(shù)
  const main = (node,parent=null) => {
    let ele
    ele = document.createElement(node.tag.toLowerCase())
    //添加屬性
    if(node.attrs) {
      for(let key in node.attrs) {
        ele.setAttribute(key,node.attrs[key])
      }
    }
    //添加孩子,遞歸
    if(node.children && node.children.length) {
      for(let val of node.children) {
        main(val,ele)
      }
    }
    if(parent) {
      parent.appendChild(ele)     
    }else{
      parent = ele
    }
    return parent
  }
  let dom = main(vnode)
  return dom
}
render(vnode)

效果

總結(jié)

以上是我對虛擬dom的簡單總結(jié)和虛擬dom轉(zhuǎn)換方法的設(shè)計,更多關(guān)于JS模擬虛擬dom轉(zhuǎn)真實dom的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

米易县| 滦平县| 永川市| 东兰县| 吴川市| 承德县| 济宁市| 安吉县| 新丰县| 应用必备| 牡丹江市| 泾源县| 阳山县| 深州市| 肥东县| 伊春市| 双柏县| 萨迦县| 开远市| 镇原县| 靖边县| 镇坪县| 聂拉木县| 华池县| 施甸县| 嘉黎县| 海原县| 定西市| 海南省| 金溪县| 鄂尔多斯市| 通江县| 宜春市| 太谷县| 平果县| 禄丰县| 林州市| 昌吉市| 襄樊市| 吉安县| 元朗区|