数据双向绑定的原理:
vue实现双向数据绑定的原理就是利用了 Object.defineProperty() 这个方法重新定义了对象获取属性值(get)和设置属性值(set)的操作来实现的。
虚拟Dom:
简单来说,虚拟DOM是用Object来代表一颗节点,这个Object叫做VNode,然后使用两个VNode进行对比,根据对比后的结果修改真实DOM。
为什么是两个VNode?因为每次渲染都会生成一个新的VNode,然后和上一次渲染时用的VNode进行对比。然后将这一次新生成的VNode缓存,用来进行下一次对比。
对象开发:
有很多时候我们发现,有些开发人员很多时候将标签的属性写在data里面和用js来生成标签等操作,这是为什么呢?
现代 Web 页面的大多数逻辑的本质就是不停地修改 DOM,但是 DOM 操作太慢了,直接导致整个页面掉帧、卡顿甚至失去响应。然而仔细想一想,很多 DOM 操作是可以打包(多个操作压成一个)和合并(一个连续更新操作只保留最终结果)的,同时 JS 引擎的计算速度要快得多,能不能把 DOM 操作放到 JS 里计算出最终结果来一发终极 DOM 操作?答案——当然可以!所以原因就是他可以提升页面性能,
vue中的对象:
其实vue的操作就是将我们写的template里面的dom,通过rander函数来转化成类似与对象生成标签的写法来比较虚拟dom,所以如果我们直接写成对象树的方法代替我们直接在template里面写标签,将会提升我们页面的很多性能,(个人瞎写的,未了方便以后自己看了能理解)
Vue的一个厉害之处就是利用Virtual DOM模拟DOM对象树来优化DOM操作的一种技术或思路。
Vue源码中虚拟DOM构建经历 template编译成AST语法树 -> 再转换为render函数 最终返回一个VNode(VNode就是Vue的虚拟DOM节点)
在Vue的mount过程中,template会被编译成AST语法树,AST是指抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式。
具体实现代码可以看Vue源码,或者https://segmentfault.com/a/1190000011531094#articleHeader0