nexttick(nextTick实现原理)
本文目录
nextTick实现原理
因为 vue 采用的异步更新策略,当监听到数据发生变化的时候不会立即去更新DOM, 而是开启一个任务队列,并缓存在同一事件循环中发生的所有数据变更; 这种做法带来的好处就是可以将多次数据更新合并成一次,减少操作DOM的次数, 如果不采用这种方法,假设数据改变100次就要去更新100次DOM,而频繁的DOM更新是很耗性能的; nextTick 接收一个回调函数作为参数,并将这个回调函数延迟到DOM更新后才执行; 使用场景:想要操作 基于最新数据的生成DOM 时,就将这个操作放在 nextTick 的回调中; 将传入的回调函数包装成异步任务,异步任务又分微任务和宏任务,为了尽快执行所以优先选择微任务; nextTick 提供了四种异步方法 Promise.then、MutationObserver、setImmediate、setTimeOut(fn,0)
nextTick的原理
什么是nextTick呢? nextTick,我可以理解为next是下一个的意思,在事件循环中,每进行一次循环操作称为 tick 就是下一个事件循环操作,也就是下一个宏任务 nextTick实现原理 因为目前浏览器平台并没有实现 nextTick 方法,所以 Vue.js 源码中分别用 Promise、setTimeout等方式在 microtask(或是task)中创建一个事件,目的是在当前调用栈执行完毕以后(不一定立即)才会去执行这个事件 我们要知道vue里面有一个虚拟dom,页面上所有的操作都是先改变虚拟dom,最后再把虚拟dom更新到实际的页面dom上,这个时候就会涉及到到一个问题,什么时候才是最后? 这个时候就会涉及到JS事件执行机制中的宏任务和微任务 个人理解的步骤应该是这样的: 1、执行完当前宏任务script,立即执行微任务 2、微任务执行完毕后进行页面渲染 3、页面渲染完毕,开始执行$nextTick
更多文章:
三八妇女节他给妈妈发个9020是什么意思?佳能TS9020打印机5b00错误怎么处理
2024年3月19日 02:25
三星note21ultra拍照(从微距到长焦,三星S21 Ultra拍照一如既往稳)
2024年10月30日 21:50
华为rh5885v3(华为RH5885 V2 RH5885 V3和RH5885H V3的区别)
2024年7月9日 14:57
早期的三星yeppMP3是不是铁三角耳机?三星手机s21怎么连接mp3
2023年5月12日 02:30
索尼a7m4raw格式怎么打开(在ps中如何打开索尼A7M4拍的ARW格式文件)
2024年8月27日 13:45
pro6蓝牙耳机使用说明书(华为pro6蓝牙耳机为什么开不了机)
2024年8月24日 14:00
iphone7烧基带是哪一批(iPhone7基带断了是不是因为系统太高了)
2024年10月1日 12:30
vivox70pro处理器是多少(vivox70pro性能怎么样)
2024年10月28日 07:30
三星i580(三星哪个智能好(1400元以下) i5801好不好)
2023年7月5日 06:30
诺基亚6120c游戏性能(诺基亚6120C自带哪些游戏啊它可下载玩的游戏多嘛这款机子玩游戏的效果如何)
2024年7月19日 00:37
谷歌手机国内好用吗(为何安卓手机在国内和国外截然不同,安卓原生手机在国内能用吗)
2023年7月15日 00:30
华为p7l09是什么型号(华为p7l09和华为p7l07有什么区别)
2024年7月24日 11:50