首页 > 其他分享 >vue中的nextTick到底是什么!!!

vue中的nextTick到底是什么!!!

时间:2024-08-25 13:52:30浏览次数:10  
标签:nextTick 异步 vue 到底 更新 任务 视图 执行

一、js执行机制

js是单线程语言

单线程:指一个时间只能做一件事,进行一个任务时,不能同时进行其他任务。

疑问:一个时间只能做一件事,不能并行处理,那效率必然很低啊,为什么不能是多线程呢?

原因:是否多线程这个取决于语言的用途,一个很简单的例子,如果同一时间,一个添加了 DOM,一个删除了 DOM, 这个时候语言就不知道是该添还是该删了,所以从应用场景来看 JS 只能是单线程。

但是!单线程就意味着我们所有的任务都需要排队,后面的任务必须等待前面的任务完成才能执行,如果前面的任务耗时很长,一些从用户角度上不需要等待的任务就会一直等待,这个从体验角度上来讲是不可接受的,所以JS中就出现了异步的概念。

注意:我们写完的代码从上至下顺序执行,压入执行栈中,当碰到异步任务(异步任务通常指的是那些不会立即执行完毕的任务,而是在将来的某个时刻完成,像生命周期钩子、定时器、Promise等)时,将异步任务交由浏览器其他线程处理(浏览器是多线程的),任务结束后放入任务队列中。

具体运行机制:

(1)所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。

(2)主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。

(3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。

(4)主线程不断重复上面的第三步

 

 

二、nextTick的本质

nextTick的目的是获取更新后的DOM。

实现很简单,完全是基于语言执行机制实现,直接创建一个异步任务,那么nextTick自然就达到在同步任务后执行的目的。

//nextTick源码
const p = Promise.resolve()
export function nextTick(fn?: () => void): Promise<void> {
  return fn ? p.then(fn) : p
}

三、nextTick是vue的更新策略

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

根据上面的代码,大家猜一猜vue是怎么更新数据的???

猜想一:每改变一次,视图更新一下,一共要更新100000次

猜想二:等全部改变完成,视图更新,一共更新1次

从性能优化的角度来看是猜想二更优,但是这样会带来一个问题,就是数据更改后不会立即触发视图更新,那要在什么时候触发呢?

原来,当响应式数据改变后,会触发函数queueJob,queueJob调用queueFlush,queueFlush开启异步任务(nextTick)处理flushJobs,flushJobs先对队列进行排序,然后执行queue中的job

所以,简单来说,为了提高性能,Vue 批量异步执行数据变化的更新。当响应式数据变化时,Vue 会将更新延迟到下一个事件循环“tick”,并合并在同一个“tick”中的多个数据变化

如果没有 nextTick 更新机制,那么 num 每次更新值都会触发视图更新,有了nextTick机制,只需要更新一次,所以为什么有nextTick存在,相信大家心里已经有答案了。

四、总结

nextTick是vue中的更新策略,也是性能优化手段,基于JS执行机制实现

vue中我们改变数据时不会立即触发视图,如果需要实时获取到最新的DOM,这个时候可以手动调用nextTick!

最后推荐大家去读读官方文档  https://vue3js.cn/global/nextTick.html

标签:nextTick,异步,vue,到底,更新,任务,视图,执行
From: https://blog.csdn.net/m0_75276704/article/details/141460290

相关文章

  • 计算机毕业设计django+vue共享自习室系统【开题+程序+论文】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着社会对终身学习和自我提升需求的日益增长,共享自习室作为一种新兴的学习空间模式,逐渐受到广大学习者的青睐。然而,传统的自习室管理方式......
  • 计算机毕业设计django+vue基于Android的婚物语APP的设计与实现【开题+论文+程序】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,智能手机已成为人们日常生活中不可或缺的一部分,特别是在婚嫁领域,移动应用以其便捷性、实时性和个性化服务的......
  • 基于Node.js+vue外卖系统(程序+论文+开题报告)-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的迅猛发展和智能设备的普及,人们的生活方式正经历着深刻的变革。其中,外卖服务作为互联网+餐饮行业的典型代表,以其便捷性、多样性和高效性迅速......
  • 基于Node.js+vue水产养殖生产管理系统(程序+论文+开题报告)-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着农业现代化进程的加速,水产养殖业作为农业的重要组成部分,正逐步向规模化、智能化、精细化管理转变。然而,传统水产养殖管理模式存在信息孤岛、效率低下、......
  • 基于Node.js+vue人事系统(程序+论文+开题报告)-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着企业规模的扩大与业务复杂度的提升,传统的人事管理方式已难以满足高效、精准的管理需求。人力资源管理作为企业发展的核心驱动力之一,其信息化、智能化水......
  • 基于Node.js+vue数码论坛系统设计与实现(程序+论文+开题报告)-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,数字化生活已成为人们不可或缺的一部分,其中数码产品作为连接现实与虚拟世界的桥梁,其热度与影响力日益增强。众多数码爱好者渴望有......
  • 基于SpringBoot+Vue的宿舍管理系统
    郑重声明:项目经过本地测试,确保可以运行。项目仅供学习和毕业设计参考~1.项目介绍宿舍管理系统,是前后端分离项目。功能包括:权限管理,菜单管理,项目运行宿舍管理,学生管理,班级管理,宿舍楼管理,各项记录(归寝记录,维修记录,请假记录,晚归记录。环境配置:Jdk1.8+IDEA+Mysql5.7技术......
  • Vue Router的使用和路由守卫
    VueRouter是Vue.js的官方路由库,用于在Vue应用中实现单页面应用(SPA)的客户端路由。它使得Vue应用能够在不重新加载页面的情况下实现不同的视图和状态切换。以下是VueRouter的详细介绍,包括基本概念、配置、路由导航以及高级用法。1基本概念路由(Route):路由是......
  • 基于nodejs+vuevivi[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景在当今数字化时代,电子商务平台的蓬勃发展极大地改变了人们的消费习惯,推动了商业模式的创新。随着移动互联网技术的普及,消费者对购物体验的需求日益个性化与......
  • 基于nodejs+vuevegetableMarket[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着城市化进程的加快和消费者健康意识的提升,蔬菜市场作为日常生活中不可或缺的一部分,其运营模式与效率正面临着新的挑战与机遇。传统的蔬菜市场往往存在信......