前一段时间看了一下笔者写的这个,写的还是很好地,记录一下。

1.总体流程

初始化及挂载

在 new Vue() 之后。 Vue 会调用 _init 函数进行初始化,也就是这里的 init 过程,它会初始化生命周
期、事件、 props、 methods、 data、 computed 与 watch 等。其中重要的是通过
Object.defineProperty 设置 setter 与 getter 函数,用来实现「 响应式」以及「 依赖收集」。

初始化之后调用 $mount 会挂载组件,如果是运行时编译,即不存在 render function 但是存在
template 的情况,需要进行「 编译」步骤。

编译

compile编译可以分成 parse、 optimize 与 generate 三个阶段,终需要得到 render function。

parse:用正则解析template模板中的指令、class、style等数据,形成AST(抽象语法树)。

optimize :用来标记静态节点,将来更新视图的时候,通过diff算法会跳过静态节点,达到优化的一个目的。

generate:将AST转化成render function字符串,得到结果是 render 的字符串以及 staticRenderFns 字符串。

响应式

当 render function 被渲染的时候,因为会读取所需对象的值,所以会触发 getter 函数进行「 依赖收
集」,「 依赖收集」的目的是将观察者 Watcher 对象存放到当前闭包中的订阅者 Dep 的 subs 中。

形成如下所示的这样一个关系。

在修改对象的值的时候,会触发对应的 setter, setter 通知之前「 依赖收集」得到的 Dep 中的每一个
Watcher,告诉它们自己的值改变了,需要重新渲染视图。这时候这些 Watcher 就会开始调用 update 来
更新视图。

Virtual DOM

Virtual DOM 其实就是一棵以 JavaScript 对
象( VNode 节点)作为基础的树,用对象属性来描述节点,实际上它只是一层对真实 DOM 的抽象。

更新视图

patch()方法对比新VNode和旧VNode,通过diff算法得到差异,进行对应修改。

转载于:https://www.cnblogs.com/sxdjy/p/10365548.html

Vue.js 运行机制全局概览浅读相关推荐

  1. Vue.js 运行机制全局概览

    Vue.js 运行机制全局概览 全局概览 Vue.js 运行机制全局概览 这一节笔者将为大家介绍一下 Vue.js 内部的整个流程,希望能让大家对全局有一个整体的印象,然后我们再来逐个模块进行讲解.从 ...

  2. Vue.js 运行原理解析、vue源码剖析

    Vue.js 运行机制全局概览 全局概览 这一节笔者将为大家介绍一下 Vue.js 内部的整个流程,希望能让大家对全局有一个整体的印象,然后我们再来逐个模块进行讲解.从来没有了解过 Vue.js 实现 ...

  3. 浅谈 js运行机制 、宏观任务、微观任务

    **今天我们谈一下我对js 运行机制 和宏观任务.微观任务的理解** js运行机制有同步运行和异步运行 js是单线程运行模式在进入任务当中如果是同步任务 那么就直接被主线程运行 如果是异步任务 那么就 ...

  4. 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理

    最近发现有不少介绍JS单线程运行机制的文章,但是发现很多都仅仅是介绍某一部分的知识,而且各个地方的说法还不统一,容易造成困惑. 因此准备梳理这块知识点,结合已有的认知,基于网上的大量参考资料,从浏览器 ...

  5. js中当等于最小值是让代码不执行_从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理...

    前言 见解有限,如有描述不当之处,请帮忙及时指出,如有错误,会及时修正. ----------超长文+多图预警,需要花费不少时间.---------- 如果看完本文后,还对进程线程傻傻分不清,不清楚浏 ...

  6. web前端培训JS 运行机制的梳理

    展现形式:由于是属于系统梳理型,就没有由浅入深了,而是从头到尾的梳理知识体系, 重点是将关键节点的知识点串联起来,而不是仅仅剖析某一部分知识. 内容是:从浏览器进程,再到浏览器内核运行,再到JS引擎单 ...

  7. JS 运行机制最全面的一次梳理

    前端Q 我是winty,专注分享前端知识和各类前端资源,乐于分享各种有趣的事,关注我,一起做个有趣的人- 公众号 点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 最近发现有不少介绍JS单 ...

  8. js 多个定时器_从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理(二)

    作者:撒网要见鱼   https://segmentfault.com/a/1190000012925872 本文接上篇 <从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理(一)> ...

  9. 初识JS_API基础Day4——笔记整理+JS运行机制+1课后作业+蓝瘦香菇...

    一. 常用的键盘事件 1. 键盘事件 2. 键盘事件对象 二. BOM 1 . 什么是BOM 2 . window对象的常见事件 页面(窗口)加载事件(2种) 第1种 window.onload 是窗 ...

最新文章

  1. 至强® 平台配备先进遥测技术让您的数据中心更智能
  2. wxwidgets mysql_wxWidgets导入Excel文件详细教程
  3. 厉害!国内大学生计算机编程第一人,一人挑战一个队,百度最年轻 T10,现创业自动驾驶...
  4. Lingo 0-1规划
  5. 图形处理(四)基于梯度场的网格编辑-Siggraph 2004
  6. 【今晚7点半】:华为云在数字人领域的技术探索与实践
  7. 大数据学习(2-1)-Hadoop安装教程-单机模式和伪分布模式(Ubuntu14.04LTS)
  8. [ZJOI2005]午餐 贪心+dp
  9. cisco 2610 2950 单臂路由得一些心得
  10. redis 启动无输出_Git Bash 中执行交互式命令无响应
  11. [LeetCode] Intersection of Two Arrays 两个数组相交
  12. windows下定时任务设置
  13. ubuntu16.04 修改本机密码
  14. 智能门锁主流品牌有哪些?选购门锁时要注重产品的哪些特性?
  15. 深度学习面试题常见问答
  16. 全网最简单Win10桌面美化教程,只需4步!!
  17. Create React App无eject配置(react-app-rewired 和 customize-cra)
  18. php 微信公共平台开发
  19. 京东充值系统现漏洞 被恶意盗刷
  20. 如何把多个js函数绑定到事件上面

热门文章

  1. MySQL之父Michael Wideneus:有自己的电脑,我可以做任何事情
  2. Linux 配置LNMP服务器 并配置虚拟主机
  3. Kubernetes 网络改进的三项实践分享
  4. mogodb集群配置笔记
  5. Linux高级管理之ACL(访问控制列表)实战应用
  6. Android studio 中使用xUtils报错
  7. 机器学习(Machine Learning)
  8. ScrollView常用属性汇总
  9. 重设域控还原模式密码
  10. python3中报错的解决方法(长期更新)