vue3源码分析 -- runtime

vue源码分析 1. 获取vue源码地址 项目地址:https://github.com/vuejs/vue 迁出项目: git clone https://github.com/vuejs/vue.git 当前版本号:2.6.10 2. 文件目录 3. 调试环境搭建 (1)、安装rollup: npm i -g rollup (2)、修改dev脚本,添加sourcemap,package.json... 阅读详情

runtime运行时,主要在packages/runtime-core目录下,核心提供了h、render等函数。在理解它们之前,我们需要了解下HTML DOM 树和虚拟 DOM等概念

HTML DOM 树

通过节点构成的一个树形结构,我们称为HTML DOM节点树。DOM 文档里面做了详细解释,这里就不再展开讲解,通过以下例子来简单理解:

<div> 
    <h1>hello h1</h1> 
    <!-- 这里是注释 --> 
    hello div 
</div>

浏览器运行上述代码时,它会生成一个对应的DOM 树来展示:

在这里插入图片描述

虚拟DOM

虚拟 DOM 是一种编程概念,意为将目标所需的 UI 通过数据结构“虚拟”地表示出来,保存在内存中,然后将真实的 DOM 与之保持同步,详细解释可见 Vue文档

通过以下这个例子来说明:

可以看出虚拟 DOM 类似把真实 DOM 转换成一个 VNode 对象,该对象存在节点的类型type、子节点信息children等属性,而子节点有可能是字符串,也可能是包含其他子节点的数组

// 真实 DOM 
<div>text</div>

// 虚拟 DOM 表示
const vnode = {
    type: 'div', // 父节点类型 div
    children: 'text' // 子节点内容 text
}

// 真实 DOM
<div>
    <h1>hello h1</h1>
    <!-- TODO: comment -->
    hello div
</div>

// 虚拟 DOM 表示 
const vnode = {
    type: 'div', // 父节点类型 div
    children: [ // 多个子节点
        {
            type: 'h1', // 子节点类型 h1
            children: 'hello h1' // 子节点内容 hello h1       
        },
        {
            type: Comment, // 子节点类型 Comment
            children: 'TODO: comment' // 子节点内容 TODO: comment       
        },
        'hello div'   // 子节点内容 hello div
    ]
}

而在runtime运行时,渲染器render会遍历整个虚拟 DOM 树,并据此构建真实的 DOM 树,这个过程把它叫做挂载mount

当这个VNode对象发生变化时,那么我们会对比旧的 VNode和新的 VNode之间的区别,找出它们之间的区别,并应用这其中的变化到真实的 DOM 上,这个过程被称为更新patch

h

Vue中转换为VNode对象就是通过h函数来完成的,通过调试来看下h函数的返回值:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="../../dist/vue.global.js"></script>
  </head>
  <body>
    <div id="app"></div>
    <script>
      const { h } = Vue

      debugger
      const vnode = h(
        'div',
        {
          class: 'test'
        },
        'hello render'
      )
      console.log(vnode)
    </script>
  </body>
</html>

h函数定义在packages/runtime-core/src/h.ts文件中,它接收三个参数:

  • type: string | Component:既可以是一个字符串(用于原生元素),也可以是一个 Vue 组件定义
  • props?: object | null:要传递的 prop
  • children?: Children | Slot | Slots:子节点

该 vnode 如下:

在这里插入图片描述

最终VNode对象通过render函数渲染为真实 DOM,该render函数定义在packages/runtime-core/src/renderer.ts文件中,实际执行的是createRenderer方法,它接收两个参数:

  • vnode虚拟节点树,或者叫做虚拟 DOM 树
  • container承载的容器,真实节点渲染的位置
舵机操作手册 微型伺服马达原理与控制(中鸣) 1、微型伺服马达内部结构一个微型伺服马达内部包括了一个小型直流马达;一组变速齿轮组;一个反馈可调电位器;及一块电子控制板。其中,高速转动的直流马达提供了原始动力,带动变速(减速)齿轮组,使之产生高扭力的输出,齿轮组的变速比愈大,伺服马达的输出扭力也愈大,也就是说越能承受更大的重量,但转动的速度也愈低。 2、微行伺服马达的工作原理一个微型伺服马达是一个典型闭环反馈系统,其原理可由下图表示: 减速齿轮组由马达驱动,其终端(输出端)带动一个线性的比例电位器作位置检测,该电位器把 阅读详情

相关推荐

ai获客系统功能代码

AI 获客系统是一个复杂的体系,以下为你提供一个简化的 Python 示例,聚焦于客户行为分析与销售线索筛选功能,模拟实现从多渠道收集数据后的初步处理流程。假设已有从官网、线上商城等渠道收集到的客户数据,以字典列表形式存储,每个字典包含客户基本信息及购买行为数据。通过分析客户购买频率与金额,筛选出高价值销售线索。python上述代码仅为基础示例,实际 AI 获客系统还涉及更复杂的数据采集、清洗、存储,以及运用机器学习算法进行深度客户洞察等功能。

weixin_ggwwsscc的博客 894

vue的runtime

文章目录前言一、runtime二、compiler总结 前言 我在当初学习vue的时候,就有一个问题,那就是什么是runtime?在看学习视频的时候,就总能听到什么runtime版本,compiler版本,巴拉巴拉的。。。 今天我就好好的查了一下,到底什么是runtime,什么是compiler! 在此记录一下! 一、runtime 首先,runtime翻译过来就是运行时,在我找到的许多资料里显示,runtime版本没有编译器,不能使用template,只能使用render函数来渲染。但是有一件事是,我

追风筝的人 2154

Cartographer纯定位实战:从仿真到真机部署的避坑指南

本文详细介绍了将Cartographer算法应用于机器人纯定位模式的完整实战流程。通过对比传统AMCL方案的不足,阐述了Cartographer基于子图匹配实现高精度、高鲁棒性定位的优势。内容涵盖从仿真环境测试到真机部署的核心步骤,包括关键配置文件修改、源码调整以及参数调优,旨在帮助开发者避开常见陷阱,成功实现稳定可靠的机器人定位系统。

weixin_29063681的博客 251

Runtime 核心原理,Vue3真正的烫手山芋

vue中的runtime模块是做什么?怎么做的?作为伟大的程序猿怎么能仅仅是会用呢?这篇文章我们来探讨一下Vue的runtime核心原理和实现思路

weixin_61372907的博客 1043

Python实现支付宝转账接口

由于工作需要使用python开发一个自动转账接口,记录一下开发过程。 首先需要在蚂蚁金服上申请开通开发者账户,有了开发者账户就可以使用沙箱进行开发了。 在开发之前我们需要在沙箱应用中填写密钥,密钥的获取可以使用阿里提供的工具包自动生成。 前期准备工作完成了,接下来是编写代码部分。主要用到了python-alipay-sdk库,使用pip安装即可,如果安装的过程中遇到问题推荐使用Anaconda...

FanMLei的博客 8516

ZYNQ出现问题及解决办法汇总(一直更新)

问题目录使用软件及开发板版本一,vitis在build project时卡住。二,Could not find FPGA device on the board for connection 'Local'三,FPGA configuration failed:DONE PIN is not high四,Could not find ARM device on the board for connection 'Local' 使用软件及开发板版本 开发板:MZ7XA-7020 软件:vitis2020.2(

qq_45057368的博客 1万+

vue源码笔记之——运行时runtime

解释:如果shapFlag本身值为8,type为1的话,那么转换为二进制(js都是32位)那就是。解释:如果shapFlag本身值为8,type为1的话,那么转换为二进制(js都是32位)那就是。结果为: 00000000 00000000 00000000 00000000。结果为: 00000000 00000000 00000000 00001001。按位进行运算,如果两个都为为1那就是1,否则为0,所以结果为。按位进行运算,如果有一个为1那就是1,所以结果为。

程序媛的梦工厂 350

034、特定场景优化(一):小目标检测的改进策略合集

本文针对工业场景中的小目标检测难题,提出了一套实战优化方案。首先从数据层面建议保持高分辨率输入(1024-1280像素)或采用切块训练策略,并适当放大标注区域。在网络结构上,提出减少下采样次数、增加高分辨率检测头、引入空间注意力机制等改进。损失函数方面推荐使用NWD匹配和QFL损失提升小目标敏感度。部署环节强调NMS优化、分辨率对齐和量化处理技巧。最后总结核心经验:优先优化数据质量而非模型结构,标注一致性比算法更重要,同时需为实际部署预留性能余量。硬件升级有时比算法调优更经济有效。

xiaoyaohou11的博客 652

Vue: Runtime-Compiler和Runtime-only的区别

Vue main.js中render函数直接渲染与组件渲染 区别。要了解runtime-compiler 与 runtime-only的区别,首先需要知道Vue程序的运行过程,和理解createElement函数。

雨落宿命敲的博客 2021

车载监控系统升级指南:如何用XS9950A替换TP9950实现高清视频解码(附配置代码)

本文提供了从TP9950升级至XS9950A车载视频解码芯片的完整实战指南。详细解析了硬件设计调整、PCB布局要点,并重点分享了通过I2C配置寄存器实现高清HDCCTV视频解码与同轴音频集成的软件驱动代码与调试技巧,助力工程师平滑完成系统升级。

weixin_29268637的博客 375

搞定ESD(二):ESD干扰机理分析

大家好,我是记得诚。上文介绍了ESD的基本知识,对ESD的测试标准进行了解析,包括静电发生器的介绍,实验布置要求,静电放电实验的实施及判定等内容。本文主要介绍ESD的干扰机理。

记得诚 4301

Vue中 runtime-compiler 和 runtime-only 两种构建模式

一、介绍 在使用 vue-cli 脚手架构建项目时,会遇到一个构建选项 Vue build,有两个选项,Runtime + Compiler和Runtime-only: · Runtime + Compiler: recommended for most users (运行程序+编译器:推荐给大多数用户) · Runtime-only: about 6KB lighter min+gzip, but templates (or any Vue-specificHTML) are ONLY allowed i

weixin_44100002的博客 1921

基于Spring Boot + Vue 3的前后端分离教材订购系统设计与实现

随着高校信息化建设的不断深入,传统手工管理教材的方式已无法满足高效、准确、透明的需求。文章将详细阐述系统的需求分析、架构设计、数据库设计、核心功能模块的实现(包括用户认证、教材管理、购物车、订单管理等),并提供关键代码片段。一个集中化、在线化的教材订购系统可以有效地解决这些问题,实现教材信息的统一管理、学生在线选书、订单自动汇总、财务清晰对账,极大地提升了管理效率和服务质量。系统采用了先进的前后端分离架构,实现了用户管理、教材管理、购物车、订单管理等核心功能,具有良好的可扩展性和可维护性。

2201_76125393的博客 330

vue3源码分析——实现createRenderer,增加runtime-test

本期主要实现了`createRenderer函数`,`改造createApp`等函数,通过这些函数,可以看到vu3在设计方面的用心良苦,尽量让vue3满足更多的人。增加了`runtime-test`,方便用于测试dom环境下面的情况!

twinkle的博客 1272

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

揭秘,Vue3 compile 和 runtime 结合的 patch 过程(源码分析)

前言在上一篇文章《从编译过程,理解 Vue3 静态节点提升过程(源码分析)》中,我们分析了在编译过程静态节点的提升。并且,在文章的结尾也说了,下一篇文章将会介绍 patch 过程。说起「...

Crazymryan的博客 710

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Vue3 核心模块源码解析(中)

【Vue3 核心模块源码解析(上)】讲到了 Vue2 与 Vue3的一些区别,Vue3 新特性的使用,以及略微带了一点源码。那么这篇文章就要从`Vue3 模块源码解析` 与 `Vue3 执行逻辑解析`这两个方面去给大家剖析 Vue3 的深层次,一起学习起来吧!

程邓楠的博客 2135

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Vue 3 源码导读

5号凌晨,尤雨溪公布了 Vue 3 源代码。 话不多说,我们趁热对 Vue 3 源码进行一些简要的分析。 如果你还没有阅读过 Composition API RFC,可能无法完全看懂下面的内容。 兼容性 目前打包后的代码是 ES2015+,不支持 IE 11。 对 TypeScript 的使用 目前的代码 98% 以上使用 TypeScript 编写。 如果你还没有学习 TypeScript,请...

weixin_45566319的博客 324

【源码&库】在调用 createApp 时,Vue 为我们做了那些工作?

我们通过阅读Vue3的源码,了解了Vue3的createApp函数的实现,createApp函数是Vue3的入口函数,通过createApp函数我们可以创建一个应用;createApp的实现是借助了函数,的实现就是包装了;函数是一个工厂函数,通过函数我们可以创建一个渲染器;函数接收一个options对象,这个options对象中包含了一些渲染器的配置,比如insertcreateText等;这些配置是在中实现的,中的createApp函数会将这些配置透传递给函数,然后。

qq_33733799的博客 583

第一节: Vue3 源码分析概述

vue3源码分析概览, 介绍源码工程的目录结构, 工程的启动, 以及源码调试,并且介绍了Vue3 runtime 运行时, reactivity 响应式, compile 编辑器三大系统, 为后续源码分析做准备

我们专注于分享最实用的编程技术和干货,帮助你提升编程能力,感谢您的支持和关注! 4101

vue3 源码学习

3. VNode渲染(patch): packages/runtime-core/src/renderer.ts 中的 patch 函数,重点看“元素节点”的创建、更新逻辑(忽略复杂的组件/插槽逻辑,先抓主线)- 编译的3个阶段:解析(parse,模板转AST)→ 转换(transform,AST转可执行逻辑)→ 生成(generate,AST转渲染函数字符串)3. 借助辅助资料:遇到卡壳时,参考Vue官方文档的“深入响应式原理”“编译器原理”章节,或靠谱的源码解析文章(如Vue团队成员的分享)

WF_YL的博客 778

带你了解 vue-next(Vue 3.0)之 初入茅庐

这几天,陆续学习了解了关于vue-next(Vue 3.0)(https://github.com/vuejs/vue-next)的一些新特性,尤其是新的 CompositionAPI...

大转转FE 1万+

学习 Vue3 源码 - Dom开发分层思想

1.自顶向下粗略了解思想:整体项目架构2.关键包与职责:compiler-core、compiler-dom、compiler-sfc、reactivity、runtime-core、runtime-dom3.核心过程:编译时 ->运行时 ->响应式数据 ->dom 渲染数据结构与算法:WeakMap、位运算(patch、shape、slot)等。

WF_YL的博客 274

【Vue3】源码解析-Runtime

【Vue3】源码解析-Runtime

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 1627

Vue3 核心模块源码解析

Vue3 模块源码解析 diff算法优化

yolo 3719

Vue 3 魔法揭秘:CSS 解析与 scoped 背后的奇幻之旅

从上文可以发现vue3对css第一次先通过 transformMain 得到xxxx'的方法第二次因为新增了import语句插件又会重新执行,再次执行因为vue已经存在了,则会进入 transformStyle 方法,在里面进行具体解析,包含scoped等各种插件配合使用解析为最终css文件。

qq_44983621的博客 1420
上一篇: vue3源码分析 -- watch
下一篇: Element UI 设置 el-table-column 宽度 width 为百分比无效
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值