初始化
1 | var _v = new Vue() |
在new Vue()之后,Vue会调用init函数进行初始化。
初始化包括:生命周期、事件、props、methods、data、computed、watch
其中,最重要的是,通过Object.defineProperty设置 setter与getter函数,用来实现响应式以及依赖收集。
mount()
1 | _v.$mount() |
初始化之后调用 $mount 方法会挂载组件,如果是运行时编译(即不存在render function,但是存在template 的情况)需要进行编译步骤。
compile()
1 | compile() // 编译,包括三步 |
响应式
1 | init的时候通过Object.defineProperty设置setter与getter函数。 |
vertual DOM
render function 会被转化为Javascript对象节点(VNode)。
Virtual DOM其实就是一棵 VNode 作为基础的树,用对象属性来描述节点,实际上它只是一层对真实DOM的抽象。
最终可以通过一系列操作使这棵树映射到真实环境上。
由于Virtual DOM是以JavaScript对象为基础而不依赖真实平台环境,所以使它具有了跨平台的能力,比如说浏览器平台、Weex、Node 等。
数据变化之后会触发setter,然后触发watcher,最后update更新视图。
整个过程具体为:
数据变化 ——> 执行render function得到新的VNode ——> 解析VNode ——> (diff 算法) ——> 更新必要的DOM
独立构建与运行时构建
传送门:https://cn.vuejs.org/v2/guide/installation.html#对不同构建版本的解释
编译器:用来将模板字符串编译成为 JavaScript 渲染函数的代码。
独立构建,包括编译和支持 template 选项。 (同时,也依赖浏览器接口的存在,所以你不能使用它来为服务器端)
运行时构建,不包括模板编译,不支持template选项。运行时构建,可以用render选项,但它只在单文件组件中起作用,因为单文件组件的模板是在构建时预编译到 render 函数中,运行时构建只有独立构建大小的 30%。
完整版:同时包含编译器和运行时的版本。
运行时版本:用来创建 Vue 实例、渲染并处理虚拟 DOM 等的代码。基本上就是除去编译器的其它一切。
如果你使用 webpack,并且喜欢分离 JavaScript 和模板文件,你可以使用 vue-template-loader预编译模板,它也可以在构建过程中把模板文件转换成为 JavaScript 渲染函数。