主题
框架相关
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
简洁 、轻快 、舒服