JS前端開(kāi)發(fā)模擬虛擬dom轉(zhuǎn)真實(shí)dom詳解
引言
經(jīng)常使用Vue或React的小伙伴肯定對(duì)虛擬dom這個(gè)詞不陌生,虛擬dom的設(shè)計(jì)是推進(jìn)前端框架發(fā)展的一大變革。今天帶大家簡(jiǎn)單模擬下虛擬dom轉(zhuǎn)換真實(shí)dom的js設(shè)計(jì)。廢話不說(shuō)了,上車吧。
虛擬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í)也能讓各位在面試中如魚得水,碼上拈來(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)文章
使用JS實(shí)現(xiàn)圖片展示瀑布流效果的實(shí)例代碼
下面小編就為大家?guī)?lái)一篇使用JS實(shí)現(xiàn)圖片展示瀑布流效果的實(shí)例代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
深入分析javascript中的錯(cuò)誤處理機(jī)制
這篇文章主要介紹了深入分析javascript中的錯(cuò)誤處理機(jī)制的相關(guān)資料,需要的朋友可以參考下2016-07-07
JavaScript極簡(jiǎn)入門教程(三):數(shù)組
這篇文章主要介紹了JavaScript極簡(jiǎn)入門教程(二):數(shù)組,本文主要講解了數(shù)組的創(chuàng)建和length屬性的介紹,其它方法屬性都沒(méi)有介紹,需要的朋友可以參考下2014-10-10
JavaScript 設(shè)計(jì)模式 富有表現(xiàn)力的Javascript(一)
javascript設(shè)計(jì)模式是圖靈出版,學(xué)習(xí)中力求每個(gè)章節(jié)都細(xì)看。2010-05-05
顏色選擇器 Color Picker,IE,Firefox,Opera,Safar
顏色選擇器 Color Picker,需要的朋友可以參考下。2010-11-11

