1.响应式原理
Object.defineProperty()
2.依赖收集原理
getter的时候会去收集依赖,把对应的watcher实例添加到Dep的subs中去, setter的时候,会触发Dep的notify方法,执行Watcher里面的update更新
3.模版编译
模版编辑经历三个阶段:
- parse使用正则处理模版中的变量、指令等,转化成AST
- optimise进行静态节点标记,是为了虚拟dom对比的过程中,如果是静态节点会忽略,提高更新效率
- generate 转成render function
4.diff算法
更新的时候会产生新的VNode,会和之前旧的VNode进行对比,进行patch, 找到新旧VNode的差异,将差异更新到页面上 对比是同层对比,
- 如果老节点不存在,直接插入新节点,如果新节点不存在,直接删除老节点
- 新老节点同时存在,先对比是不是相同节点,通过tag、key、comment、data等
2.1. 如果是相同节点,则进行patchVnode 过程中涉及到一个新老节点都存在,且不是静态节点,会执行updateChildren方法,涉及到双端对比,头对头,尾对尾,头对尾,尾对头
2.2. 如果不是相同节点,则直接删除老节点,增加新节点
5.nextTick原理
由于目前浏览器没有实现nextTick方法,所有vue.js源码中使用Promise、setTimeout、setImmediate等方式在microtask中创建了一个事件,目的是在当前执行栈执行完成后再去执行这个事件
6.vuex原理
Vue.use(vuex) vuex内部提供install方法,并用Vue.mixin方法将vuexInit混进beforeCreate钩子中,通过store挂载到根节点上,这样每个实例都能够通过this.$store访问到Store实例了