Skip to content

框架相关

1. 数据双向绑定原理: 常见数据绑定的方案

  • Object.defineProperty ( vue ) :劫持数据的 gettersetter
  • 脏值检测 ( 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 是单向数据流 。 vuevdom 是追踪每个组件的依赖关系,不会渲染整个组件树, react 每当应该状态被改变时,全部子组件都会 re-render

4. 为什么用 vue

简洁 、轻快 、舒服