欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

引言

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

虛擬dom的介紹

介紹

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

如下是對(duì)一段虛擬dom模擬真實(shí)dom的例子

真實(shí)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)勢(shì)

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

缺點(diǎn)

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

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

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

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)換真實(shí)dom設(shè)計(jì)*/
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é)

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

相關(guān)文章

  • 通過(guò)高德地圖API獲得某條道路上的所有坐標(biāo)用于描繪道路的方法

    通過(guò)高德地圖API獲得某條道路上的所有坐標(biāo)用于描繪道路的方法

    這篇文章主要介紹了通過(guò)高德地圖API獲得某條道路上的所有坐標(biāo)用于描繪道路的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 關(guān)于ES6的六個(gè)小特性(二)

    關(guān)于ES6的六個(gè)小特性(二)

    ES6提供了大量新的好的東西,在過(guò)去的一年內(nèi),瀏覽器提供商做了大量的辛勤工作將新的語(yǔ)言特性更新到他們的瀏覽器中。盡管有重大的更新,很多小的語(yǔ)言更新另我眼前一亮,下面這篇文章主要介紹了關(guān)于ES6的六個(gè)小特性,需要的朋友可以參考下。
    2017-02-02
  • 淺談JavaScript 代碼整潔之道

    淺談JavaScript 代碼整潔之道

    這篇文章主要介紹了淺談JavaScript 代碼整潔之道,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • 淺談JavaScript中的parseInt()的妙用

    淺談JavaScript中的parseInt()的妙用

    本文主要介紹了JavaScript中的parseInt()的妙用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • TypeScript中類型映射的使用

    TypeScript中類型映射的使用

    TypeScript中的映射類型和數(shù)學(xué)中的映射類似,能夠?qū)⒁粋€(gè)集合的元素轉(zhuǎn)換為新集合的元素,本文就來(lái)介紹一下TypeScript中類型映射的使用,感興趣的可以了解一下
    2023-10-10
  • 利用r.js打包模塊化的javascript文件方法示例

    利用r.js打包模塊化的javascript文件方法示例

    這篇文章主要給大家介紹了利用r.js打包模塊化的javascript文件的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)跟著小編一起看看吧。
    2017-06-06
  • 網(wǎng)頁(yè)掛馬方式整理及詳細(xì)介紹

    網(wǎng)頁(yè)掛馬方式整理及詳細(xì)介紹

    這篇文章主要介紹了網(wǎng)頁(yè)掛馬方式整理及詳細(xì)介紹的相關(guān)資料,這里整理了不少方式,大家可以看下如何實(shí)現(xiàn)的,需要的朋友可以參考下
    2016-11-11
  • JavaScript實(shí)現(xiàn)谷歌瀏覽器插件開(kāi)發(fā)的方法詳解

    JavaScript實(shí)現(xiàn)谷歌瀏覽器插件開(kāi)發(fā)的方法詳解

    對(duì)于瀏覽器插件相信大家都不陌生,誰(shuí)的瀏覽器不裝幾個(gè)好用的插件呢,更是有油猴這個(gè)強(qiáng)大的神器。所以本文就來(lái)用JavaScript開(kāi)發(fā)一個(gè)谷歌瀏覽器插件,感興趣的小伙伴可以了解一下
    2022-11-11
  • Javascript異步編程之你真的懂Promise嗎

    Javascript異步編程之你真的懂Promise嗎

    這篇文章主要介紹了Javascript異步編程之Promise,想了解異步編程和Promise的同學(xué),可以參考下
    2021-04-04
  • 跟我學(xué)習(xí)javascript的基本類型和引用類型

    跟我學(xué)習(xí)javascript的基本類型和引用類型

    跟我學(xué)習(xí)javascript的基本類型和引用類型,利用圖解的方式,告訴大家javascript的基本類型和引用類型的區(qū)別和聯(lián)系,感興趣的小伙伴們可以參考一下
    2015-11-11

最新評(píng)論