三大框架
对框架的态度
框架有很多,但是他们的核心目的是一样的,帮助开发者高效进行web应用开发。 对于未来的前端开发,我们现在用的所有框架都有可能会过时,但是框架沉淀下来的思想会继续指导着我们的前端开发。所以,大可不必自乱阵脚,打好基础才是王道。
框架
在前端MVVM 模式下,不同框架的目标都是一致的,就是利用数据驱动页面。 关键是数据发生变化后,我们怎么去通知页面更新。各大框架在这个步骤上,各显神通。
VUE
VUE1.x
Vue 1 的解决方案,就是使用响应式(Object.defineProperty),初始化的时候,Watcher 监听了数据的每个属性,这样数据发生变化的时候,我们就能精确地知道数据的哪个 key 变了,去针对性修改对应的 DOM 即可。
当你把一个普通的 JavaScript 对象传入 Vue 实例作为 data 选项,Vue 将遍历此对象所有的 property,并使用 Object.defineProperty 把这些 property 全部转为 getter/setter。注意:存在于 data 中的 property 才是响应式的
Vue 1 的问题在于响应式数据过多,这样会带来内存占用过多的问题。 所以 Vue 2 大胆引入虚拟 DOM 来解决响应式数据过多的问题。
VUE2.x
什么是虚拟dom?
虚拟 DOM是一个JavaScript 对象,用来描述整个 DOM 树。
这个对象就像数据和实际 DOM 的一个缓存层,通过管理这个对象的变化,来减少对实际 DOM 的操作。
虚拟 DOM这个对象完整地描述了 DOM 的树形结构,这样数据有变化的时候,我们生成一份新的虚拟 DOM 数据,然后再对之前的虚拟 DOM 进行计算,算出需要修改的 DOM,再去页面进行操作。
响应式数据是主动推送变化,虚拟 DOM 是被动计算数据的 Diff,一个推一个拉,它们看起来是两个方向的技术,但被 Vue 2 很好地融合在一起,采用的方式就是组件级别的划分。
总结
对于 Vue 2 来说,组件之间的变化,可以通过响应式来通知更新。组件内部的数据变化,则通过虚拟 DOM 去更新页面。这样就把响应式的监听器,控制在了组件级别,而虚拟 DOM 的量级,也控制在了组件的大小。
说人话,引入虚拟Dom后,一个组件一个Watcher,组件内部虚拟Dom,组件的量级不会大到diff时间超过16.6ms。 即组件之间的数据更新,是通过响应式去通知,组件内部没有响应式的wathcer,而是通过虚拟Dom更新。