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 的次数,在保证响应性的同时,实现了极高的渲染性能。

相关推荐
yinuo14 小时前
前端跨页面通信终极指南:方案拆解、对比分析
前端
北辰alk14 小时前
Vue 模板引擎深度解析:基于 HTML 的声明式渲染
vue.js
北辰alk14 小时前
Vue 自定义指令完全指南:定义与应用场景详解
vue.js
yinuo14 小时前
前端跨页面通讯终极指南⑨:IndexedDB 用法全解析
前端
北辰alk15 小时前
Vue 动态路由完全指南:定义与参数获取详解
vue.js
北辰alk15 小时前
Vue Router 完全指南:作用与组件详解
vue.js
北辰alk15 小时前
Vue 中使用 this 的完整指南与注意事项
vue.js
xkxnq15 小时前
第二阶段:Vue 组件化开发(第 16天)
前端·javascript·vue.js
北辰alk15 小时前
Vue 插槽(Slot)完全指南:组件内容分发的艺术
vue.js
烛阴15 小时前
拒绝配置地狱!5 分钟搭建 Three.js + Parcel 完美开发环境
前端·webgl·three.js