从模板到虚拟Dom 再到 DOM树
是什么
1,虚拟dom:js直接操作dom的代价是相对昂贵的,每次操作dom都会让浏览器茶农头开始执行一遍流程,
每次更新执行一次,假若我某一次操作导致页面有10个节点更新,js直接操作dom就是10次浏览器计算,
而虚拟dom则会将10次更新对比旧代码保存在一个js对象(虚拟dom)中,然后一次性更新到Dom树上,这样就节省了大量无用的计算
而且,单个节点更新虚拟dom要比实际操作dom更新要快得多.
2,AST:vue模板想要转换成虚拟dom,就需要处理模板上插值,指令,而AST便是为了描述vue模板而生的,他可以通过对象来描述模板结构有什么,
需要执行什么,最后使用对应render函数生成新的虚拟dom,AST本身是不会变的,他只会在模板编译阶段出现,而后续的数据更新时不会变更AST,
变更只有AST上代表变量的值,然后经过render生成新的虚拟Dom
3,diff算法:所谓diff算法其实就是新虚拟dom与旧虚拟dom的对比算法
1)同层级对比,若相同再开始深度对比
2)深度对比优先,直到该分支的节全部对比完毕在移动位置对比其他分支
3)对比方式
a,此节点是否被移除 -> 添加新的节点
b,节点一样,属性是否被改变 -> 旧属性改为新属性
c,节点一样,文本内容被改变-> 旧内容改为新内容
d,节点要被整个替换 -> 结构完全不相同 移除整个替换
原文地址:https://www.cnblogs.com/zsckl/p/15238383.html
- 情感分析的新方法,使用word2vec对微博文本进行情感分析和分类
- 垂直属性
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)
- 13(02)总结StringBuffer,StringBuilder,数组高级,Arrays,Integer,Character
- Mybatis-Generator生成Mapper文件中<if test="criteria.valid">的问题解答
- Java开源博客My-Blog之mysql容器重复初始化的严重bug修复过程
- 负margin的原理以及应用
- 关于exp/imp的总结学习(r4笔记第26天)
- 除了写烂的手写数据分类,你会不会做自定义图像数据集的识别?!
- shell脚本中字符串的常见操作及"command not found"报错处理(附源码)
- 绝对定位下的盒模型
- 运行shell脚本时报错"[[ : not found"解决方法
- 关于表联结方法(二) (r4笔记第23天)
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(一)设计一套好的RESTful API
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法