当前位置: 首页 > news >正文

Learning Vue 读书笔记 Chapter 2

2. Vue 基本工作原理

2.1 Virtual DOM

  1. 概念:
    • DOM: DOM以内存中树状数据结构的形式,代表了网页上的HTML(或XML)文档内容。它充当了一个编程接口,将网页与实际的编程代码(如JavaScript)连接起来。
    • Virtual DOM 是浏览器中实际 DOM 的内存虚拟副本,但它更轻量且具有额外的功能。
  2. Virtual DOM 工作原理:
    通过用户界面交互,用户向Vue传达了他们希望元素达到的状态;随后,Vue触发虚拟DOM更新该元素所代表的对象(节点)至期望形态,同时记录这些变更。最终,Vue与实际DOM进行通信,并据此对发生变化的节点执行精确更新。
    在这里插入图片描述
    5.Virtrual DOM vs DOM:
    • DOM 是浏览器解析 HTML 后生成的树形结构,节点是复杂的对象,直接操作性能开销较大。
    • Virtual DOM 是DOM 的轻量级副本,用简单的 JavaScript 对象表示,便于高效计算和更新。

2.2 Options API

  1. 概念: 组件的配置是一个包含所有组件初始配置选项的对象。我们将此参数的结构称为Options API。
  2. vue2: 实例化
import { Vue } from 'vue'
const App = { //component's options }
const app = new Vue(App)
app.mount('#app')
  1. vue3 实例化
import { createApp } from 'vue'
const App = { //component's options }
const app=createApp(App)
app.mount('#app')

接下来主要基于vue3 语法

2.3 模板语法

  1. 在 Options API中,template接受一个包含有效基于HTML代码的单一字符串,该字符串代表了组件的用户界面布局。Vue引擎会解析这一值并将其编译为优化的JavaScript代码,随后相应地渲染出相关的DOM元素。
  2. 对于多层次的HTML模板代码,我们可以使用反引号字符(JavaScript模板字面量),以`符号表示,并保持代码的可读性。
import { createApp } from 'vue' 
const App = { template: ` <h1>This is the app's entrance</h1> <h2>We are exploring template syntax</h2> `,
}
const app = createApp(App) 
app.mount('#app')

2.4 Vue 响应数据工作原理:

  1. data() 是一个返回表示组件本地数据状态的匿名函数。我们称这个返回的对象为数据对象。在初始化组件实例时,Vue引擎会将这个数据对象的每个属性添加到其响应式系统中,以便跟踪其变化并根据需要触发UI模板的重新渲染。
  2. 工作原理:
    在这里插入图片描述

(1)一旦定义了本地数据,在Vue.js 2.0中,内部的Vue引擎会使用JavaScript内置的Object.defineProperty()为每个相关数据建立getter和setter,并启用相关的数据响应性。然而,在Vue.js 3.0中,Vue引擎采用了基于ES5 Proxy的机制以提升性能,使运行时性能翻倍并将所需内存减半。

(2)在建立了响应性机制之后,Vue引擎使用观察者(watcher)对象来跟踪由setter触发的任何数据更新。观察者帮助Vue引擎检测变化,并通过队列系统更新虚拟DOM和实际DOM。

(3)Vue使用队列系统来避免在短时间内对DOM进行低效的多次更新。当相关组件的数据发生变化时,观察者会将自己添加到队列中。Vue引擎按照特定顺序对其进行排序以供消费。在Vue引擎完成消费并将该观察者从队列中清除之前,无论数据发生多少次变化,队列中只存在同一组件的一个观察者。

这一消费过程是通过nextTick() API完成的,它是Vue的一个函数。

(4)最后,在Vue引擎消费并清除所有观察者之后,它会触发每个观察者的run()函数,自动更新组件的实际DOM和虚拟DOM,应用程序随即进行渲染。

相关文章:

Learning Vue 读书笔记 Chapter 2

2. Vue 基本工作原理 2.1 Virtual DOM 概念&#xff1a; DOM: DOM以内存中树状数据结构的形式&#xff0c;代表了网页上的HTML&#xff08;或XML&#xff09;文档内容。它充当了一个编程接口&#xff0c;将网页与实际的编程代码&#xff08;如JavaScript&#xff09;连接起来…...

SpringBoot支持动态更新配置文件参数

前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容&#xff1a;Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。 博主所有博客文件…...

开发技巧,vue 中的动态组件的引用 component + is

在项目中很多时候有切换 tab 的场景&#xff0c;一般来说都是用 v-if 或者 v-show 然后根据各种条件来控制显示隐藏。 其实我们可以使用 vue 中的动态组件&#xff0c;也能实现这个效果 <!-- currentTab 改变时组件也改变 --> <component :is"currentTab"…...

基于SpringBoot+WebSocket的前后端连接,并接入文心一言大模型API

前言&#xff1a; 本片博客只讲述了操作的大致流程&#xff0c;具体实现步骤并不标准&#xff0c;请以参考为准。 本文前提&#xff1a;熟悉使用webSocket 如果大家还不了解什么是WebSocket&#xff0c;可以参考我的这篇博客&#xff1a; rWebSocket 详解&#xff1a;全双工…...

PSD是什么图像格式?如何把PSD转为JPG格式?

在图形设计的世界里&#xff0c;Photoshop 文档&#xff08;PSD&#xff09;格式是 Adobe Photoshop 的原生文件格式&#xff0c;它允许设计师保存图像中的图层、蒙版、透明度和不同色彩模式等信息。对于需要进一步编辑的设计作品来说&#xff0c;PSD 文件提供了极大的灵活性。…...

c语言中mysql_query的概念和使用案例

在 C 语言中&#xff0c;使用 MySQL 数据库需要用到 MySQL C API。mysql_query() 函数是 MySQL C API 中的一个函数&#xff0c;用于执行 SQL 语句。 概念 mysql_query() 函数的原型如下&#xff1a; int mysql_query(MYSQL *mysql, const char *stmt_str)mysql&#xff1a;…...

一次端口监听正常,tcpdump无法监听到指定端口报文问题分析

tcpdump命令&#xff1a; sudo tcpdump -i ens2f0 port 6471 -XXnnvvv 下面是各个部分的详细解释&#xff1a; 1.tcpdump: 这是用于捕获和分析网络数据包的命令行工具。 2.-i ens2f0: 指定监听的网络接口。ens2f0 表示本地网卡&#xff09;&#xff0c;即计算机该指定网络接口捕…...

解决InnoDB: Failing assertion: !lock->recursive

背景&#xff1a; 在arm服务器里运行MySQL5.7.22版本 报错信息 &#xff1a; 2024-11-25T08:07:36.24182508:00 856 [Note] Multi-threaded slave statistics for channel : seconds elapsed 126; events assigned 53431297; worker queues filled over overrun level 0; …...

基于微信小程序的外卖点餐系统设计与实现ssm+论文源码调试讲解

4系统概要设计 4.1概述 本系统后台采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原…...

Helm Chart 实现 Kubernetes 应用的多环境部署与镜像更新

在现代软件开发中,通常需要将应用部署到多个环境(如开发环境、测试环境、生产环境),并且在不同环境中使用不同的配置和镜像版本。Helm Chart 提供了强大的模板化和参数化功能,可以轻松实现多环境部署和镜像更新。本文将详细介绍如何使用 Helm Chart 实现 Kubernetes 应用的…...

“腾讯、钉钉、飞书” 会议开源平替,免费功能强大

在数字化时代&#xff0c;远程办公和线上协作越来越火。然而&#xff0c;市面上的视频会议工具要么贵得离谱&#xff0c;要么功能受限&#xff0c;甚至还有些在数据安全和隐私保护上让人不放心。 今天开源君给大家安利一个超棒的开源项目 - Jitsi Meet&#xff0c;这可是我在网…...

我谈区域偏心率

偏心率的数学定义 禹晶、肖创柏、廖庆敏《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》P312 区域的拟合椭圆看这里。 Rafael Gonzalez的二阶中心矩的表达不说人话。 我认为半长轴和半短轴不等于特征值&#xff0c;而是特征值的根号。…...

思科交换机telnet配置案例

目录 1.telnet简述2.网络拓扑3.设备说明4.网络配置4.1 电脑PC ip设置4.2 网络交换机telnet配置 5.小结 1.telnet简述 Telnet是远程登录服务的一个协议&#xff0c;该协议定义了远程登录用户与服务器交互的方式。它允许用户在一台联网的计算机上登录到一个远程分时系统中&#…...

机器学习:支持向量机

支持向量机&#xff08;Support Vector Machine&#xff09;是一种二类分类模型&#xff0c;其基本模型定义为特征空间上的间隔最大的广义线性分类器&#xff0c;其学习策略便是间隔最大化&#xff0c;最终可转化为一个凸二次规划问题的求解。 假设两类数据可以被 H x : w T x…...

人工智能前沿技术进展与应用前景探究

一、引言 1.1 研究背景与意义 人工智能作为一门极具变革性的前沿技术&#xff0c;正深刻地改变着人类社会的各个层面。从其诞生之初&#xff0c;人工智能便承载着人类对智能机器的无限遐想与探索。自 20 世纪中叶起&#xff0c;人工智能踏上了它的发展征程&#xff0c;历经了…...

(一)HTTP协议 :请求与响应

前言 爬虫需要基础知识&#xff0c;HTTP协议只是个开始&#xff0c;除此之外还有很多&#xff0c;我们慢慢来记录。 今天的HTTP协议&#xff0c;会有助于我们更好的了解网络。 一、什么是HTTP协议 &#xff08;1&#xff09;定义 HTTP&#xff08;超文本传输协议&#xff…...

什么是网络爬虫?Python爬虫到底怎么学?

最近我在研究 Python 网络爬虫&#xff0c;发现这玩意儿真是有趣&#xff0c;干脆和大家聊聊我的心得吧&#xff01;咱们都知道&#xff0c;网络上的信息多得就像大海里的水&#xff0c;而网络爬虫就像一个勤劳的小矿工&#xff0c;能帮我们从这片浩瀚的信息海洋中挖掘出需要的…...

NR_shell运行流程简析

nr_shell 是一套开源 shell 框架&#xff0c;基于框架可创建终端交互功能。 为了记录终端输入指令&#xff0c;以及进行解析处理&#xff0c;nr_shell 提供了一套 cmd 结构体&#xff0c;具体如下&#xff1a;typedef struct static_cmd_function_struct {char cmd[NR_SHELL_CM…...

CSS Fonts(字体)

CSS Fonts(字体) 在网页设计中,字体是传达信息情感和风格的关键元素。CSS(层叠样式表)提供了丰富的字体样式和属性,使得网页设计者能够根据需求选择合适的字体,从而提升用户体验。本文将详细介绍CSS字体相关的知识,包括字体的选择、加载、样式设置等。 字体的选择 选…...

基于Django的Boss直聘IT岗位可视化分析系统的设计与实现

【Django】基于Django的Boss直聘IT岗位可视化分析系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统采用Python作为主要开发语言&#xff0c;利用Django这一高效、安全的W…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...