2020-04-11

vue diff算法分析

diff存在的意义

1.对服务端和浏览器端统一一层虚拟dom,这样无论是服务器预编译runTime还是
在浏览器运行都会形成统一,各部分之间相互隔离。例如

const vnode={
    tagName:'div',
    attrs:{
         'data-name':'test'
     },
     context:'${Vue}',
     data:'a.b',
}

2.性能优化。性能优化的来源渲染和预编译的ast 语法转换。在服务器dev环境时,通过编译模板形成模板渲染函数,渲染时只需要调用对应的渲染函数,减少渲染,同时形成函数缓存,不用每次计算。

<div>{{a*b+2*c}}</div>
const render = (a,b,v) =>{
                 return a*b+2*c;
           }

vue diff算法核心 比较是old 和新的 虚拟dom 对象层次递归比较的,

1.相识性

const sameVnode=>(a, b) {
        return (
            // key来源于v-for或者自定的:key属性
            a.key === b.key &&
            a.tag === b.tag &&
            a.isComment === b.isComment &&
            isDef(a.data) === isDef(b.data) &&
            sameInputType(a, b)
        )
    }

相似就不更新,不相似就update

2.比较过程

1. old 序列为 ABCD 新序列为 ABD

          直接删除C节点

2. old 序列为 BACD 新序列为 ABD

           vue保留B react干掉B
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、数据库视图 (一)什么是视图? 视图是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。是由行和列组成的数据,...
    从来不是我_4320阅读 221评论 0 0
  • 1.显示目录结构信息 tree /oldboy --- 显示指定目录中的所有数据和所有结构信息tree -L ...
    ThreeH17阅读 302评论 0 0
  • 1 前言 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问...
    min成功阅读 424评论 0 0
  • 小时后曾经看过老版《三国演义》,时间过久记不清晰了。于2019年发现其豆瓣评分9.4,可见经久不衰,所以重新捡起看...
    投资的艺术阅读 136评论 0 1
  • 为了方便读者阅读我为《整理的艺术》一套4本书写的系列书评,我会将每篇书评按发表顺序收录在目录里。单篇书评顺序我会标...
    安雅敏敏阅读 1,518评论 7 40