美文网首页
vue 2x源码分析(三)---虚拟dom

vue 2x源码分析(三)---虚拟dom

作者: azothaw | 来源:发表于2016-10-23 15:41 被阅读789次

    以前用jq,我们都是直接操作dom,为什么要使用虚拟dom,虚拟dom的优势是什么,虚拟dom是如何实现的,vue里面的虚拟dom是怎么样的?

    what

    虚拟dom是在js里面模拟dom

    why

    原生dom操作在dom数过多,或者绑定事件过多的时候都会出现性能问题,dom直接操作很慢,后来react首先使用了虚拟dom,它用js模拟vnode树,在重新渲染的时候比对两颗dom树,只做最小范围的渲染,从而提高了性能。

    how

    创建一个dom需要知道dom元素的标签名,属性键值对,绑定事件,子节点。

    //vdom/create-element.js
    function _createElement ( 
     context: Component, 
     tag?: string | Class<Component> | Function | Object, 
     data?: VNodeData, 
     children?: VNodeChildren | void
    )
    
    • helpers 处理方法参数
      • index.js
      • merge-hook 合并节点钩子
      • normalize-children 处理子节点
      • update-listeners 更新监听器
    • patch 对比两个vnode,渲染页面
    function sameVnode (vnode1, vnode2) { 
     return (    vnode1.key === vnode2.key &&    vnode1.tag === vnode2.tag &&    vnode1.isComment === vnode2.isComment &&    !vnode1.data === !vnode2.data  )
    }
    function createKeyToOldIdx (children, beginIdx, endIdx) {
      let i, key  const map = {}  for (i = beginIdx; i <= endIdx; ++i) {    key = children[i].key    if (isDef(key)) map[key] = i  }  return map
    }
    ...
    

    只介绍了vue中虚拟dom的核心代码

    相关文章

      网友评论

          本文标题:vue 2x源码分析(三)---虚拟dom

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