主题
框架相关
1. 数据双向绑定原理: 常见数据绑定的方案
Object.defineProperty(vue) :劫持数据的getter和setter- 脏值检测 (
angularjs): 通过特定事件进⾏轮循 发布/订阅模式:通过消息发布并将消息进⾏订阅
2. VDOM: 三个 part
- 虚拟节点类,将真实
DOM节点用js对象的形式进⾏展示, 并提供render方法,将虚拟节点渲染成真实DOM - 节点
diff比较:对虚拟节点进⾏js层面的计算, 并将不同的操作都记录到patch对象 re-render:解析patch对象, 进⾏re-render
补充 1: VDOM 的必要性?
- 创建真实
DOM的代价高:真实的DOM节点node实现的属性很多, 而vnode仅仅实现⼀些必要的属性,相比起来,创建⼀个vnode的成本比较低。 - 触发多次浏览器重绘及回流:使用
vnode,相当于加了⼀个缓冲,让⼀次数据变动所带来的所有node变化, 先在vnode中进⾏修改,然后diff之后对所有产生差异的节点集中⼀次对DOM tree进⾏修改,以减少浏览器的重绘及回流。
补充 2:vue 为什么采用 vdom?
引⼊
Virtual DOM在性能方面的考量仅仅是⼀方面。
性能受场景的影响是非常大的,不同的场景可能造成不同实现方案之间成倍的性能差距,所以依赖细粒度绑定及
Virtual DOM哪个的性能更好还真不是⼀个容易下定论的问题。Vue之所以引⼊了Virtual DOM,更重要的原因是为了解耦HTML依赖, 这带来两个非常重要的好处是:- 不再依赖
HTML解析器进⾏模版解析, 可以进⾏更多的AOT⼯作提高运⾏时效率:通过模版AOT编译,Vue的运⾏时体积可以进⼀步压缩, 运⾏时效率可以进⼀步提升; - 可以渲染到
DOM以外的平台, 实现SSR、同构渲染这些高级特性,Weex等框架应用的就是这⼀特性。
- 不再依赖
综上, Virtual DOM 在性能上的收益并不是最主要的,更重要的是它使得 Vue 具备了现代框架应有的高级特性。
3. vue 和 react 区别
- 相同点:都⽀持
ssr,都有vdom, 组件化开发, 实现webComponents规范,数据驱动等 - 不同点:
vue是双向数据流 ( 当然为了实现单数据流⽅便管理组件状态,vuex便出现了 ),react是单向数据流 。vue的vdom是追踪每个组件的依赖关系,不会渲染整个组件树,react每当应该状态被改变时,全部子组件都会re-render
4. 为什么用 vue
简洁 、轻快 、舒服
