vue(js)线程干扰,vue生命周期干扰

news2024/12/27 11:01:32

前言

js的事件循环机制对于我们理解阅读代码的执行顺序是必不可少的知识点。在 vue 中虚拟 DOM 对比之后的重渲染便是参考这种机制
Event Loop
在这里插入图片描述

js 是单线程语言,干完一件事之后才能干下一件事
js 执行的代码可分为同步和异步,同步代码执行完毕再执行异步任务

异步任务分为宏任务和微任务

执行同步代码
执行微任务队列
执行宏任务队列
重复 2 => 3 过程,直到没有任务队列

微任务

promise 就是典型的微任务

const p1 = new Promise((resolve, reject) => {
  console.log(2)
  resolve()
})
p1.then(() => {
  console.log(3)
})
console.log(4)

上面的执行结果是
复制代码1 2 4 3

promise 入参的函数属于同步环境,故2在4前面。promise 的 .then .catch .finally 的函数,就是要执行的微任务
微任务有

MutationObserver // 检测 DOM,DOM3
Object.observe // 已经废弃 Object.defineProperty 和 Proxy 都是同步的
process.nextTick // node.js 独有,node.js中优先级高于 promise

宏任务

setInterval 和 setTimeout 是两个常见的任务
javascript复制代码console.log(1)
setTimeout(() => {
  console.log(2)
})
console.log(3)

上面的执行结果
复制代码1 3 2

当 setTimeout 执行完毕的时候,会把 () => { console.log(2) } 作为宏任务放入宏任务队列
再来看个例子,setTimeout 的执行可能和预设的时间不一致


console.time('setT')
console.time('hihi')

setTimeout(() => {
  console.timeEnd('setT') // setT: 492.93115234375 ms
}, 100)

for(let i = 0; i < len; i++) {
}

console.timeEnd('hihi') // hihi: 491.435791015625 ms

宏任务有

setTimeout 
setInterval
setImmediate // node.js 独有,优先级低于 setTimeout

vue 中的应用
vue 更新 DOM 是异步更新的,更新的内容会形成一个队列,这个队列是去重的
ini复制代码const count = ref(1);
watchEffect(() => {
    console.log(count.value);
});
const add = () => {
    count.value++;
    count.value++;
};

当触发 add 方法之后会调用两次 count 的叠加,但是 watchEffect 只会监听到一次变化,这就是去重的异步更新队列

$nextTick

const count = ref(1);
watchEffect(() => {
    console.log(count.value);
});
const add = () => {
    count.value++;
    count.value++;
    nextTick(() => {
        console.log('nextTick')
    })
};

在上面的基础上添加 nextTick 方法,执行回调的时机在于 DOM 更新之后,也可以理解成 updated 生命周期钩子之后
借助 nextTick 的特性,可以合理的完成需要依赖 DOM 的操作

总结

宏任务和微任务形成的队列一次循环便是事件循环
vue 的 $nextTick 机制可以理解成事件循环和防抖的结合

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/682869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正式接入ChatGPT, 捷码智能助手重磅来袭!

捷码平台最新介绍 ChatGPT给各行各业带来的深远影响&#xff0c;绝对不止一款升级版的客服机器人那么简单。 以微软为例&#xff0c;早在3月17日&#xff0c;继把GPT4引入搜索引擎后&#xff0c;微软又重磅推出了由AI驱动的Microsoft 365 Copilot&#xff0c;它能自动生成电子…

python+pytest自动化测试函数测试类测试方法的封装

今天呢&#xff0c;想和大家聊聊pythonpytest接口自动化中将代码进行封装&#xff0c;只有将测试代码进行封装&#xff0c;才能被测试框架识别执行。 例如单个接口的请求代码如下&#xff1a; import requests headers {"user-agent": "Mozilla/5.0 (Windows…

如何高效优雅地管理接口文档

目录 前言 什么是Apifox 为什么选Apifox Apifox初体验 安装注册 接口文档管理 在线接口文档 接口调试 数据模型 环境管理 Mock功能 测试用例 测试套件 参数化 持续集成 团队管理 生成代码 前言 管理接口文档是一个重要的任务&#xff0c;它能够帮助团队成员更…

直接插入排序到底有多“直男”

作者主页&#xff1a;paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《算法详解》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心…

JavaScript中的垃圾回收和内存泄漏

垃圾回收 JavaScript 中的内存管理是自动执行的&#xff0c;而且是不可见的。我们创建基本类型、对象、函数……所有这些都需要内存。 当不再需要某样东西时会发生什么? JavaScript 引擎是如何发现并清理它? 垃圾回收有两种方法&#xff1a;标记清除、引用计数。引用计数不…

95后很狂阿里P7晒出工资单:狠补了两眼泪汪汪,真香...

最近一哥们跟我聊天装逼&#xff0c;说他最近从阿里跳槽了&#xff0c;我问他跳出来拿了多少&#xff1f;哥们表示很得意&#xff0c;说跳槽到新公司一个月后发了工资&#xff0c;月入5万多&#xff0c;表示很满足&#xff01;这样的高薪资着实让人羡慕&#xff0c;我猜这是税后…

便携式AIS接收机dAI01

1.设备简介 AIS是指船舶自动识别系统&#xff08;Automatic Identification System&#xff09;&#xff0c;船舶上有AIS收发机&#xff0c;AIS收发机会把船舶通过GPS定位获取到的本船的位置、速度等动态信息和船舶自己的船号、长宽等静态信息广播发射出去&#xff0c;其他用户…

雷达人体感应器成品,家居办公场景探测联动,智能化雷达感知技术应用

随着智能数据和人工智能的日益普及&#xff0c;越来越多的智能硬件设备得以推广和应用到日常生活中。 智能人体存在感应器是这一类智能硬件设备中非常有代表性的一种&#xff0c;它可以被应用在家居、办公等场景中&#xff0c;在很大程度上&#xff0c;它为我们的生活提供了很…

Liunx 安装、卸载Mysql,远程连接

Liunx 安装、卸载Mysql 一、 卸载mysql 查看mysql安装情况 rpm -qa | grep -i mysql删除上图中所有信息 rpm -ev mysql-community-release-el7-5.noarch --nodeps再次查询&#xff0c;没有数据&#xff0c;则为删除干净 find / -name mysqlrm -rf /var/lib/mysql 将机器上…

Java版企业工程管理系统源代码Spring Boot + 二次开发 + 前后端分离

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…

使用python编程数学建模-常见excel数据使用python以行的方式按需读取

读取原始数据 首先导入pandas库   接着使用pandas库里面的read_csv方法来读取我们的文件&#xff0c;由于数据文件和程序文件是在统一目录下&#xff0c;因此无需使用绝对路径 import pandas as pd data1 pd.read_csv("data1.csv")读取数据的前20行数据 这里我们…

RTC time和Local time区别以及Linux 设置时区和修改时间

RTC time和Local time 在Linux系统中存在两个时钟时间&#xff0c;分别是 硬件时钟RTC&#xff08;Real Time Clock&#xff09; 系统时钟&#xff08;System Clock&#xff09;硬件时钟是指的在主板上的时钟设备&#xff0c;也就是通常可以在BIOS画面设置的时钟&#xff0c;即…

魏副业而战:怎么提升自己做项目的能力?

我是魏哥&#xff0c;与其在家躺平&#xff0c;不如魏副业而战&#xff01; 昨天分享了老李做的拉新项目&#xff0c;很多小伙伴留言。 有人说&#xff0c;制作100个视频蛮难的&#xff1b; 有人说&#xff0c;发布100个视频最后留下4个&#xff0c;这对人的考验蛮大的&…

JDK8新特性之lambda表达式

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于lambda表达式的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.是什么 二.为什么要用 三.底层…

【资料分享】Xilinx Zynq-7010/7020工业核心板规格书(双核ARM Cortex-A9 + FPGA,主频766MHz)

1 核心板简介 创龙科技SOM-TLZ7x是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC工业核心板&#xff0c;处理器集成PS端双核ARM Cortex-A9 PL端Artix-7架构28nm可编程逻辑资源&#xff0c;通过工业级B2B连接器引出千兆网口、USB、CAN、UA…

Linux发展史和Linux系统安装

Linux发展史和Linux系统安装 Linux发展史Linux前身-UnixLinux诞生开源文化Linux系统特点Linux分支 Linux系统的安装安装方式虚拟机软件虚拟机的安装VMware Workstation的安装Virtual Box的安装 Linux版本的选择新建虚拟机选择镜像文件安装使用VMware Workstation Linux操作系统…

【总结】yarn ResourceManager 宕机重启总是失败解决排查

目录 Yarn ResourceManager 莫名奇妙宕机重启Yarn ResourceManager 报错1重启Yarn ResourceManager 报错2成功解决 Yarn ResourceManager 莫名奇妙宕机 接到同事反馈&#xff0c;说yarn RM 端口总是访问超时。但是查看日志&#xff0c;又没有发现任务蛛丝马迹&#xff0c;且RM…

ChatGPT扇动翅膀后带来的蝴蝶效应

对于蝴蝶效应最常见的阐述是&#xff1a;“一只南美洲亚马逊河流域热带雨林中的蝴蝶&#xff0c;偶尔扇动几下翅膀&#xff0c;可以在两周以后引起美国得克萨斯州的一场龙卷风。” 简介肯尼亚essay 正文论文代写之都为什么是肯尼亚?蝴蝶效应 简介 在印象中贫穷且落后的东非国家…

小航助学2023年6月GESP_C++一级试卷(含题库答题软件账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 删除编辑附件图文 答案:A 第1题以下不属于计算机输出设备的有&#xff08; &#xff09;。 A、麦克风B、音箱C、打印机D、显示器 答…

【Kubernetes部署篇】Kubeadm方式搭建K8s集群 1.27.0版本

文章目录 一、集群规划及架构二、系统初始化准备(所有节点同步操作)三、安装并配置cri-dockerd插件四、安装kubeadm(所有节点同步操作)五、初始化集群六、Node节点添加到集群七、安装网络组件Calico八、测试CoreDNS解析可用性 一、集群规划及架构 官方文档&#xff1a; 二进制…