美文网首页web前端
什么是Virtual DOM?

什么是Virtual DOM?

作者: 姜治宇 | 来源:发表于2020-03-20 12:18 被阅读0次

Virtual DOM——虚拟节点,听名字挺牛的,其实很简单,它其实就是个js对象,这个对象把真实dom节点做了描述,用装逼点的字眼说,也就是对DOM进行了抽象,所以叫虚拟节点。还是不明白?得,直接上代码:

//创建vnode
function Vnode(tag,data,text){
    this.tag = tag
    this.data = data
    this.text = text
}

//<a href="http://www.baidu.com" target="_bank">百度一下</a>

var tagA = new Vnode('a',{href:'http://www.baidu.com',target:'_bank'},'百度一下')

console.log(tagA)
/* Vnode {
    tag: 'a',
    data: { href: 'http://www.baidu.com', target: '_bank' },
    text: '百度一下'
   }
*/

再把虚拟节点跟真实的dom做一个映射即可:

    function Vnode(tag,data,text){
        this.tag = tag
        this.data = data || ''
        this.text = text || ''
    }
    Vnode.prototype.patch = function(){
        var node = document.createElement(this.tag)
        for(var key in this.data){
            node.setAttribute(key,this.data[key])
        }

        var textNode = document.createTextNode(this.text)
        node.appendChild(textNode)
        return node
    }

这样做有啥好处呢?
众所周知,前端的性能瓶颈都集中在dom操作上,dom的开销是最大的,要想让网页变得嗖嗖的,就要最大化利用dom,切忌频繁创建销毁dom。怎么做呢?
我们可以在更新页面时,先不操作dom,先来对比一下:
新状态和旧状态下的virtual dom有哪些改变?
通过对比,我们只更新局部差异的那一部分dom元素即可,其他地方不动,这样就会大大节省dom的开销了。

相关文章

网友评论

    本文标题:什么是Virtual DOM?

    本文链接:https://www.haomeiwen.com/subject/hxsfehtx.html