1. new Vue() 之后。 Vue 会调用 _init 函数进行初始化,也就是这里的 init 过程,它会初始化生命周
期、事件、 props、 methods、 data、 computed 与 watch 等。其中最重要的是通过
Object.defineProperty 设置 setter 与 getter 函数,用来实现「 响应式」以及「 依赖收集」
2. mounted 初始化之后调用 $mount 会挂载组件,如果是运行时编译,即不存在 render function 但是存在
template 的情况,需要进行「 编译」步骤。
3. compile
(1) parse
parse 会用正则等方式解析 template 模板中的指令、class、style 等数据,形成 AST
(2) optimize
optimize 的主要作用是标记 static 静态节点,这是 Vue 在编译过程中的一处优化,后面当 update 更新
界面时,会有一个 patch 的过程, diff 算法会直接跳过静态节点,从而减少了比较的过程,优化
了 patch 的性能。
(3) generate
generate 是将 AST 转化成 render function 字符串的过程
 
4. render function
读取所需对象的值,所以会触发 getter 函数进行「 依赖收
集」,「 依赖收集」的目的是将观察者 Watcher 对象存放到当前闭包中的订阅者 Dep 的 subs 中。
在修改对象的值的时候,会触发对应的 setter, setter 通知之前「 依赖收集」得到的 Dep 中的每一个
Watcher,告诉它们自己的值改变了,需要重新渲染视图。这时候这些 Watcher 就会开始调用 update 来
更新视图,当然这中间还有一个 patch 的过程以及使用队列来异步更新的策略
5. Virtual DOM
Virtual DOM 其实就是一棵以 JavaScript 对
象( VNode 节点)作为基础的树,用对象属性来描述节点,实际上它只是一层对真实 DOM 的抽象。
最终可以通过一系列操作使这棵树映射到真实环境上。
比如说下面这样一个例子:
{    tag: 'div',                 /*说明这是一个 div 标签*/
    children: [                 /*存放该标签的子节点*/
        {
            tag: 'a',           /*说明这是一个 a 标签*/
            text: 'click me'    /*标签的内容*/
        }
    ] }
 
渲染后可以得到
<div>
    <a>click me</a>
</div>
6. 更新视图
我们会将
新的 VNode 与旧的 VNode 一起传入 patch 进行比较,经过 diff 算法得出它们的「 差异」。最后我
们只需要将这些「 差异」的对应 DOM 进行修改即可。
 

 
 
 
 

最新文章

  1. JUnit 4 单元测试
  2. CSS 布局入门
  3. epoll
  4. oracle 中的dual表简介与用法
  5. 利用Linq + Jquery + Ajax 异步分页的实现
  6. win32多线程程序设计笔记(第二章)
  7. hadoop编程技巧(3)---定义自己的区划类别Partitioner
  8. Java的URL来下载网页源码
  9. 【数论】洛谷P1414又是毕业季II
  10. jQuery的学习笔记4
  11. LeetCode算法题-Repeated Substring Pattern(Java实现)
  12. iOS------教你如何APP怎么加急审核
  13. zabbix 配置维护
  14. 小程序中的block
  15. 超链接 a的小手
  16. spring的applicationContext.xml中的DBCP配置如下:
  17. windows下测试flask的例子tuorial报错flask KeyError: &#39;DATABASE&#39;
  18. (最小生成树)Eddy&#39;s picture -- hdu -- 1162
  19. linux系统kill一些类名称相同的进程
  20. 算法笔记_074:子集和问题(Java)

热门文章

  1. SpringBoot:配置文件及自动配置原理
  2. mui初级入门教程(六)— 模板页面实现原理及多端适配指南
  3. Linux驱动开发4——并发和竞态
  4. kafka 配置权限
  5. 测开之路九十九:js函数、事件、window窗体对象
  6. 《Python Data Structures》Week5 Dictionary 课堂笔记
  7. beyond compare 4.2.9桌面右键集成的问题修复
  8. spring mvc 接受数组
  9. python+selenium下拉列表option对象操作方法一
  10. 15 (H5*) JS第5天 对象