1. 流程图

Vue源码-首次渲染过程 - 图1

2. 首次渲染过程概述

  1. Vue 初始化,添加实例成员、静态成员,并在原型上挂载patch方法和$mount方法。
  2. 初始化结束,调用new Vue()。在new Vue()的过程中,调用this.init()方法, 给vue的实例挂载各种功能。
  3. 在 this.init() 内部最终会调用 entry-runtime-with-compiler.js中的 vm.$mount(),用于获取render函数。
  4. $mount 获取 render 过程: 如果用户没有传入render,会将template编译为render,如果template也没有,则将el中的内容作为模版,通过 compileToFunctions() 生成render。
  5. 接下来调用 runtime/index.js 中的 $mount, 重新获取 el 并调用 mountComponent() 方. mountComponent 用于触发 beforeMount,定义 updateComponent,创建watcher实例,触发mounted,并最终返回vm实例。
  6. 创建完watcher的实例后会调用一次 watcher.get() 方法,该方法会调用updateComponent(),updateComponent()又会调用 vm.render() 以及vm.update(),vm._update()会调用vm.patch()挂载真实dom,并将真实dom记录于vm.$el中。