为什么会有nextTick这个东西的存在?
因为 vue 采用的异步更新策略,当监听到数据发生变化的时候不会立即去更新DOM,
而是开启一个任务队列,并缓存在同一事件循环中发生的所有数据变更;
这种做法带来的好处就是可以将多次数据更新合并成一次,减少操作DOM的次数,
如果不采用这种方法,假设数据改变100次就要去更新100次DOM,而频繁的DOM更新是很耗性能的;
与的区别
定义与理解
此方法是在的原型链上挂载上去的,只有一句话指向,第一个参数指的是要回调的函数,第二个参数为当前的实例对象
在内部对异步队列尝试使用原生的 、 和 ,如果执行环境不支持,则会采用 代替。
宏任务耗费的时间是大于微任务的,所以在浏览器支持的情况下,优先使用微任务。如果浏览器不支持微任务,使用宏任务;但是,各种宏任务之间也有效率的不同,需要根据浏览器的支持情况,使用不同的宏任务。
源码解读
源码位置 core/util/next-tick
以上代码中, 会优先使用微任务,即会优先检测当前浏览器是否支持原生 ,如果不支持的话再去检测是否支持原生的 ,如果还不支持,则表明当前浏览器不支持微任务,那么就使用宏任务。对于宏任务会优先检测是否支持原生 ,如果不支持的话就使用 。
执行回调队列
核心源码解
总结
通过以上就是对 的源码分析,我们了解到数据的变化到 的重新渲染是一个异步过程,发生在下一个 tick。当我们在实际开发中,比如从服务端接口去获取数据的时候,数据做了修改,如果我们的某些方法去依赖了数据修改后的 DOM 变化,我们就必须在 后执行
领取专属 10元无门槛券
私享最新 技术干货