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

nextTick实现原理

答题思路:

  1. 此题实际考查vue异步更新策略
  2. 说出vue是怎么通过异步、批量的方式更新以提高性能的
  3. 最后把源码中实现说一下

回答范例:

  1. vue有个批量、异步更新策略,数据变化时,vue开启一个队列,并缓冲在同一事件循环中发生的所有数据变更。如果同一个 watcher 被多次触发,只会被推入到队列中一次。然后在下一个的事件循环“tick”中,Vue 刷新队列并执行实际 (已去重的) 工作。Vue 在内部对异步队列尝试使用原生的 Promise.then、MutationObserver 和 setImmediate,如果执行环境不支持,则会采用 setTimeout(fn, 0) 代替。

    官方文档在这里

  2. 源码中,修改一个数据,组件对应的watcher会尝试入队:

并使用nextTick方法添加一个flushSchedulerQueue回调

nextTick(flushSchedulerQueue)

flushSchedulerQueue被加入callbacks数组

callbacks.push(() => {if (cb) {try {cb.call(ctx) // cb就是加入的回调} catch (e) {handleError(e, ctx, 'nextTick')}} 
})

然后以异步方式启动

if (!pending) {pending = truetimerFunc()
}

timerFunc的异步主要利用Promise等微任务方式实现

let timerFuncif (typeof Promise !== 'undefined' && isNative(Promise)) {const p = Promise.resolve()// timerFunc利用p.then向微任务队列添加一个flushCallbacks// 会异步调用flushCallbackstimerFunc = () => {p.then(flushCallbacks)}isUsingMicroTask = true
}

flushCallbacks遍历callbacks,执行里面所有回调

function flushCallbacks () {pending = falseconst copies = callbacks.slice(0)callbacks.length = 0for (let i = 0; i < copies.length; i++) {copies[i]()}
}

其中就有前面加入的flushSchedulerQueue,它主要用于执行queue中所有watcher的run方法,从而使组件们更新

for (index = 0; index < queue.length; index++) {watcher = queue[index]watcher.run()
}

相关文章:

nextTick实现原理

答题思路&#xff1a; 此题实际考查vue异步更新策略说出vue是怎么通过异步、批量的方式更新以提高性能的最后把源码中实现说一下 回答范例&#xff1a; vue有个批量、异步更新策略&#xff0c;数据变化时&#xff0c;vue开启一个队列&#xff0c;并缓冲在同一事件循环中发生的…...

CentOS 7中安装ZooKeeper

文章目录 下载解压安装环境变量配置文件启动设置开机自启动开放端口 CentOS 7.6 ZooKeeper 3.5.7 本文介绍了如何在CentOS 7系统中安装单机版的ZooKeeper。 下载 点击官网下载 解压安装 # 解压 tar -xzvf apache-zookeeper-3.5.7-bin.tar.gz sudo mv apache-zookeeper-3.5.…...

推荐《幽游白书》

《幽游白书》是日本漫画家富坚义博于1990年12月3日—1994年7月25日于集英社旗下杂志《周刊少年Jump》上连载的少年漫画作品&#xff0c;全175话&#xff08;含外传一话&#xff09;。现时发行的单行本共计19册&#xff0c;电子版由漫番漫画、哔哩哔哩漫画发布 [1-2] 。 本作最…...

Linux MMC子系统 - 1.eMMC简介

By: Ailson Jack Date: 2023.10.21 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/160.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…...

聊聊Android线程优化这件事

一、背景 在日常开发APP的过程中&#xff0c;难免需要使用第二方库和第三方库来帮助开发者快速实现一些功能&#xff0c;提高开发效率。但是&#xff0c;这些库也可能会给线程带来一定的压力&#xff0c;主要表现在以下几个方面&#xff1a; 线程数量增多&#xff1a;一些库可…...

Linux性能优化--实用工具:性能工具助手

8.0 概述 本章介绍一些在Linux系统上可用的实用程序&#xff0c;它们能够加强性能工具的有效性和可用性。实用工具本身不是性能工具&#xff0c;但是当它们与性能工具一起使用时&#xff0c;它们可以帮助完成如下功能&#xff1a;自动执行繁琐的任务、分析性能统计数据&#x…...

[PyTorch]即插即用的热力图生成

先上张效果图&#xff0c;本来打算移植霹雳老师的使用Pytorch实现Grad-CAM并绘制热力图。但是看了下代码&#xff0c;需要骨干网络按照标准写法&#xff08;即将特征层封装为features数组&#xff09;&#xff0c;而我写的网络图省事并没有进行封装&#xff0c;改造网络的代价又…...

golang笔记18--go并发多线程

golang笔记18--go并发多线程 介绍核心用法MutexRWMutexWaitGroupCondOncemapPoolContextselect 注意事项参考文档 介绍 大家都知道go语言近年来越来越火了&#xff0c;其中有一个要点是go语言在并发场景有很高的性能&#xff0c;比如可以通过启动很多个 goroutine 来执行并发任…...

使用OkHttp和Java来下载

以下是一个使用OkHttp和Java来下载内容的下载器程序&#xff0c;同时使用了jshk.com.cn/get_proxy来获取代理服务器。请注意&#xff0c;为了简化代码&#xff0c;我们将忽略一些异常处理和安全性检查。 import java.io.File;import java.io.FileOutputStream;import java.io.I…...

HttpServlet源码分析及HttpServletRequest接口

2023.10.20 HttpServlet HttpServlet类是专门为HTTP协议准备的。比GenericServlet更加适合HTTP协议下的开发。 http包下都有哪些类和接口呢&#xff1f;&#xff08;jakarta.servlet.http.*&#xff09; jakarta.servlet.http.HttpServlet &#xff08;HTTP协议专用的Servlet…...

CENTOS 7基于ISO文件进行安装新软件

众所周知&#xff0c;YUM是CENTOS7的安装程序。 普通情况下&#xff0c;连网之后 &#xff0c;用yum install 就可以安装。 但当网络环境经常出现连接失败的情况&#xff0c;默认情况下的行为就走不通了。 为解决这个问题&#xff0c;可以考虑如下三个方案 方案一&#xff1a;Y…...

模拟器-雷电-使用adb push或adb pull操作文件

一、环境 windows 10 雷电模拟器4.0.83 二、问题 有时候我们会需要往模拟器拷贝文件或者复制文件到我的电脑 三、方法 1、获取root权限 adb root adb remount 有可能遇到【daemon not running; starting now at tcp:5037】的报错 查看端口占用进程&#xff1a;netstat -…...

【前端设计模式】之命令模式

引言 命令设计模式是一种行为型设计模式&#xff0c;它允许你将命令封装到一个对象中&#xff0c;从而使你可以参数化不同的请求&#xff0c;以及存储、排队、重播和撤销请求。这种设计模式在处理用户界面操作、远程网络请求或其他需要异步执行的操作时非常有用。在前端开发中…...

用c++写一个高精度计算的乘法运算

这段代码是一个用C编写的程序&#xff0c;它实现了两个大整数的乘法运算。 #include<iostream> #include<cstdio> #include<cstring> using namespace std;int main(){char a1[101]"222",b1[101]"2";int a[101],b[101],c[10001],lena,l…...

UE5 ChaosVehicles载具 实现大漂移 (连载四)

载具设置成前驱模式 前轮摩擦力倍增x5 后轮摩擦力倍增x0.5...

基于Arrow的轻量线程池

基于Arrow的轻量线程池 大家好&#xff0c;我是光城&#xff0c;最近花了几周业余时间&#xff0c;开发出这款轻量线程池&#xff0c;代码也全部开源啦&#xff0c;欢迎大家star。 本线程池的设计与实现会有涉及非常多的知识&#xff0c;这些内容也都会以视频的方式分享在知识星…...

泛微OA E-Office V10 OfficeServer 任意文件上传漏洞复现

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 漏洞简介 泛微e-ofice是一款标准化的协同0A办公软件&#xff0c;泛微 …...

spring-cloud-starter-gateway踩坑

1.bean of type org.springframework.http.codec.ServerCodecConfigurer that could not be found. 需要将项目中用到的spring-boot-starter-web依赖给去掉 去掉以下的 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-bo…...

视频SDK开发,多平台SDK快速接入

随着科技的不断发展&#xff0c;视频已经成为了企业业务中不可或缺的一部分。无论是在线教育、企业培训还是产品展示&#xff0c;视频都发挥着至关重要的作用。为了满足企业对视频应用的需求&#xff0c;美摄视频SDK应运而生&#xff0c;为企业提供了一站式的视频解决方案。 一…...

面试官:如何理解CDN?说说实现原理?

一、是什么 CDN (全称 Content Delivery Network)&#xff0c;即内容分发网络 构建在现有网络基础之上的智能虚拟网络&#xff0c;依靠部署在各地的边缘服务器&#xff0c;通过中心平台的负载均衡、内容分发、调度等功能模块&#xff0c;使用户就近获取所需内容&#xff0c;降…...

OpenMV的PWM控制舵机,你踩过这几个坑吗?关于Timer、引脚和占空比的避坑指南

OpenMV的PWM控制舵机&#xff1a;从Timer配置到实战避坑全解析 在机器人控制和自动化项目中&#xff0c;精确的舵机控制往往是实现精准动作的关键。OpenMV作为一款集成了图像处理能力的微控制器&#xff0c;其PWM输出功能为开发者提供了直接控制舵机的便捷途径。然而&#xff0…...

Modbus RTU主站轮询128个从站太慢?实测优化策略与并发请求的真相

Modbus RTU主站轮询128个从站太慢&#xff1f;实测优化策略与并发请求的真相 在工业自动化现场&#xff0c;当Modbus RTU网络规模扩大到128个从站时&#xff0c;许多工程师都会遇到一个共同难题&#xff1a;轮询周期过长导致数据更新延迟。某汽车生产线曾因传感器数据延迟2秒导…...

哔哩下载姬:B站视频批量下载与媒体处理的高效解决方案

哔哩下载姬&#xff1a;B站视频批量下载与媒体处理的高效解决方案 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#…...

LM文生图WebUI源码浅析:Gradio封装逻辑与参数映射关系

LM文生图WebUI源码浅析&#xff1a;Gradio封装逻辑与参数映射关系 1. 平台架构概述 LM文生图镜像基于Tongyi-MAI/Z-Image底座构建&#xff0c;采用Gradio框架封装Web界面&#xff0c;实现了从文本描述到高质量图像生成的完整流程。该系统特别适合角色设计、时尚人像等场景&am…...

Phi-mini-MoE-instruct惊艳效果:中英混合提问+跨语言答案生成实录

Phi-mini-MoE-instruct惊艳效果&#xff1a;中英混合提问跨语言答案生成实录 1. 模型能力全景展示 Phi-mini-MoE-instruct作为一款轻量级混合专家&#xff08;MoE&#xff09;指令型小语言模型&#xff0c;在多个基准测试中展现出超越同级模型的卓越性能&#xff1a; 代码能…...

Open Interpreter股票API接入:金融数据写库实战步骤

Open Interpreter股票API接入&#xff1a;金融数据写库实战步骤 1. 项目概述与环境准备 今天我们来探索一个非常实用的技术场景&#xff1a;如何使用Open Interpreter接入股票API&#xff0c;并将获取的金融数据自动写入数据库。这个方案特别适合需要定期收集和分析股票数据的…...

跟北航何静学AI科研,科研小白也能弯道超车

北京航空航天大学90后副教授何静全程讲授&#xff0c;北京大学出版社主办&#xff0c;“从AIGC到OpenClaw&#xff1a;赋能论文撰写、课题申报和智能体构建工作坊&#xff08;第1期&#xff09;”。本课程将于2026年5月16日至17日举办&#xff0c;采用边讲边操作的方式&#xf…...

DeepPCB:如何用1500对工业级图像彻底解决PCB缺陷检测难题?

DeepPCB&#xff1a;如何用1500对工业级图像彻底解决PCB缺陷检测难题&#xff1f; 【免费下载链接】DeepPCB A PCB defect dataset. 项目地址: https://gitcode.com/gh_mirrors/de/DeepPCB 还在为PCB缺陷检测项目找不到高质量训练数据而烦恼吗&#xff1f;还在担心你的深…...

Cadence IC618实战:手把手教你搭建MOS共源放大器并完成DC/AC仿真(附SMIC 0.18um PDK)

Cadence IC618实战&#xff1a;从零构建MOS共源放大器与仿真全流程解析 在模拟IC设计领域&#xff0c;共源放大器作为最基础的增益单元&#xff0c;其设计质量直接影响整个信号链路的性能。本文将基于Cadence IC618平台和SMIC 0.18μm PDK&#xff0c;完整演示从环境配置到高级…...

【2026年华为留学生暑期实习-非AI方向(通软嵌软测试算法数据科学)-4月23日-第一题- 给软件版本号排序】(题目+思路+JavaC++Python解析+在线测试)

题目内容 给出一系列软件版本号,请以升序对其排序。 主版本号是由“.”分割的多组数字组成,另外在正式的 releasereleaserelease 版本之前还存在 betabeta...