vue之异步更新队列

1.什么是异步更新队列

Vue 的异步更新队列是一种性能优化策略。当响应式数据发生变化时,Vue 并不会立即触发组件更新,而是将对应的 Watcher 对象 放入一个队列中。在同一个事件循环 中发生的所有数据变更,其对应的 Watcher 都会被去重后缓存到这个队列里。在当前循环的同步任务执行完毕后,Vue 会在 微任务阶段 一次性清空队列,执行所有 Watcher 的更新操作。

2.过程

在对data的数据进行赋值操作时,会触发data对应的watcher,并把watcher中的更新函数推送到待执行的任务队列。vue是基于promise进行微任务的调用,微任务在当前宏任务结束后、下一个宏任务开始前执行,保证了视图更新的及时性,优于 setTimeout (宏任务)。另外在推送过程中,如果对同一个数据进行多次更改,只会推送和更新一次,因为vue内部会基于map表进行去重操作,这有些类似于惰性策略,以保证更新时的性能和减少不必要的重复调用,调用完成后会执行nextTick钩子,以让用户访问到新的节点数据。

3.日常场景应用

javascript 复制代码
const vm = {
	el: '#app',
	data: {
		msg: 'hello'
	}
}
vm.msg = 'world'
vm.$el.textContent === 'world' // false
Vue.nextTick(() => {
vm.$el.textContent === 'world' // true
})

4.总结

如上所示,数据的异步更新是依赖于JS的EventLoop和微任务机制,它通过解耦数据变更与视图更新,并利用去重和批量处理机制,最大限度地减少了直接操作 DOM 的次数,在保证响应性的同时,实现了极高的渲染性能。

相关推荐
Z兽兽5 小时前
React@18+Vite项目配置env文件
前端·react.js·前端框架
SuniaWang5 小时前
《Spring AI + 大模型全栈实战》学习手册系列 · 专题六:《Vue3 前端开发实战:打造企业级 RAG 问答界面》
java·前端·人工智能·spring boot·后端·spring·架构
A_nanda5 小时前
根据AI提示排查vue前端项目
前端·javascript·vue.js
happymaker06266 小时前
web前端学习日记——DAY05(定位、浮动、视频音频播放)
前端·学习·音视频
~无忧花开~6 小时前
React状态管理完全指南
开发语言·前端·javascript·react.js·前端框架
LegendNoTitle6 小时前
计算机三级等级考试 网络技术 选择题考点详细梳理
服务器·前端·经验分享·笔记·php
@大迁世界7 小时前
1.什么是 ReactJS?
前端·javascript·react.js·前端框架·ecmascript
BJ-Giser7 小时前
Cesium 基于EZ-Tree的植被效果
前端·可视化·cesium
王码码20358 小时前
Flutter for OpenHarmony:Flutter 三方库 algoliasearch 毫秒级云端搜索体验(云原生搜索引擎)
android·前端·git·flutter·搜索引擎·云原生·harmonyos
发现一只大呆瓜8 小时前
深入浅出 AST:解密 Vite、Babel编译的底层“黑盒”
前端·面试·vite