Vue本质上是使用HTMl的字符串作为模板的,将字符串模板转为AST(抽象语法树),再转为虚拟DOM:
模板 => AST
AST => 虚拟DOM
虚拟DOM => 真实DOM
其中,最消耗性能的是字符串解析: 模板 转为 AST
图解Vue在数据发生改变的时候,都进行了那些操作:
1、在页面中展示的Html标签是真实的DOM,在内存中有一个虚拟DOM与之对应;虚拟DOm和页面的Dom是一一对应的关系
2、首先,由AST和数据生成一个新的虚拟DOM(render),每次改变一个数据的时候,都会生成一个新的虚拟DOM(新数据的虚拟DOM,只要数据改变,就会生成一个新的虚拟DOM);
3、然后把新的虚拟DOM和页面中的虚拟DOM进行比较(此处使用了diff算法),如果发现和页面的虚拟DOM有不同,就把不同的数据更新到页面的虚拟DOM上;(update)
4、伴随着更新的操作, 页面上的虚拟DOM也会更新到真实DOM中去,就完成了数据的渲染和更新操作!