我正在Async Update Queue阅读vue官方文档,并对此感到困惑:
每当观察到数据更改时,它将打开队列和缓冲区 在同一事件循环中发生的所有数据更改
same event loop
是什么意思,同时会有多个事件循环?它还说队列将被刷新in the next event loop “tick”
,tick
在这里意味着什么?如果没有下一个事件循环或下一个事件循环从不打勾怎么办?
答案 0 :(得分:2)
让我尝试回答这个问题,作为我的理解。
同一个事件循环意味着什么,同时会有多个事件循环?
不是将任何vue属性/方法/变量中的每个更改应用于视图,而是在queue中保存所有这些更改,并在以后刷新这些更改。在pushing队列中的更改的过程中,通过不对注释here进行的每次更改重新呈现进行优化:
/**
* Push a watcher into the watcher queue.
* Jobs with duplicate IDs will be skipped unless it's
* pushed when the queue is being flushed.
*/
export function queueWatcher (watcher: Watcher) {
...
...
队列将在下一个事件循环“tick”中刷新,这里的tick是什么意思?
内部Vue尝试本机Promise.then和MutationObserver进行异步排队,然后回退到setTimeout(fn,0)。 Here您可以看到第一个偏好是本地Promise.then后MutationObserver native Promise is not available,最差fallback to setTimeout。