Vue 源码-事件循环

作者: Viewwei | 来源:发表于2021-02-22 23:41 被阅读0次
  • 概念解释


    WX20210222-221235@2x.png
  • 什么叫做事件循环
    浏览器为了协调事件处理,脚本执行,网络请求和渲染等工作而制定的工作机制.在事件循环中有两个非常重要的概念,即宏任务和微任务
  • 宏任务: 代表一个个离散,独立的工作单元.浏览器完成一个宏任务,在执行下一个宏任务之前会对页面重新渲染.包括文档创建,解析 html,执行主线程 js 代码.宏任务包括:定时器,主程序执行
  • 微任务:微任务是更小的任务,是在当前宏任务执行结束后立即执行的任务.如果宏任务后面跟着微任务,浏览器会在微任务清空之后重新渲染.微任务包括:promise,nextTick MutationObserver,async

Vue中具体实现

nextTick(flushSchedulerQueue)


image.png

在Vue 源码中查看事件循环是如何实现的

  1. 从上一篇文章可知,界面的更新是通过src/core/observer/watcher.js中的 update 方法来更新界面的


    src/core/observer/watcher.js
  2. 在下图描绘的就是queueWatcher函数内部实现情况.标注1判断当前是否在冲刷界面,如果没有的化,那么队列中添加watcher 对象,标注 2 表示把flushSchedulerQueue函数传递到nextTick函数中,这个地方需要认真看清楚


    image.png
  3. 下图描述的是nextTick函数内部实现情况,调用nextTick函数的时候,需要把上面的传递过来的flushSchedulerQueue函数保存到callbacks数组中.标注2的目的主要是添加微任务到队列中.


    src/core/observer/scheduler.js
  4. 下图timerFunc函数的实现.timerFunc函数是把flushCallbacks添加到微任务中.当宏任务执行完毕,清空微任务队列


    image.png
  5. 下图是flushCallbacks实现


    src/core/util/next-tick.js
  6. flushCallbacks函数,标注 1 复制 callbacks 函数,标注2 表示copiesi其实调用的flushSchedulerQueue
    src/core/util/next-tick.js
  7. 下图是 flushSchedulerQueue函数的实现.queue 队列中的 watcher 函数调用 run 函数实现更新


    image.png
  8. 调用 watcher 函数中的 run 函数,run 函数会调用 get()函数来实现更新


    src/core/observer/watcher.js
  9. watcher 函数中的 get 函数会调用 getter()函数,getter 函数其实就是 updateComponent 完成更新


    src/core/observer/watcher.js

    10 getter== updateComponent


    image.png

相关文章

  • Vue 源码-事件循环

    概念解释WX20210222-221235@2x.png 什么叫做事件循环浏览器为了协调事件处理,脚本执行,网络请...

  • 05Vue源码剖析2

    Vue 源码剖析2 异步更新队列 Vue 高效的秘诀是一套批量、异步的更新策略 概念解释 事件循环 Event L...

  • RunLoop

    1.源码阅读 1.1事件循环:do...while循环部分 kCFRunLoopBeforeTimers:即将处理...

  • 2019-04-02

    课表安排 vue环境安装 vue绑定事件 vue计算属性 vue判断与循环 CDN实战DEMO vue脚手架的搭建...

  • vue基础

    一,vue基础 数据绑定列表循环 事件处理 在script标签中 //实例化vue var app=new Vue...

  • Vue中事件发射emit以及事件响应on的实现

    事件机制是Vue中重要的通信机制,这里看下源码简单说明下Vue事件emit和on的实现: $on和$emit函数的...

  • Vue源码探究-事件系统

    Vue源码探究-事件系统 本篇代码位于vue/src/core/instance/events.js 紧跟着生命周...

  • Vue 学习笔记

    [TOC] Vue 学习笔记 Vue 源码解析 - 主线流程 Vue 源码解析 - 模板编译 Vue 源码解析 -...

  • Vue 源码解析 - 模板编译

    [TOC] Vue 学习笔记 Vue 源码解析 - 主线流程 Vue 源码解析 - 模板编译 Vue 源码解析 -...

  • Vue 源码解析 - 主线流程

    [TOC] Vue 学习笔记 Vue 源码解析 - 主线流程 Vue 源码解析 - 模板编译 Vue 源码解析 -...

网友评论

    本文标题:Vue 源码-事件循环

    本文链接:https://www.haomeiwen.com/subject/ftclfltx.html