当前位置: 首页 > 网络应用技术

QIANXI VUE源代码-42点阶段 - $ nexttick&asynchronous队列更新

时间:2023-03-08 22:18:24 网络应用技术

  作为上一篇文章的第一部分的第一篇文章主要完成了以下工作:

  因为即使属性被用来等待直到使用,也值得,所以让我们以后再谈谈。然后,小构图将讨论将更新作为参数传输到该方法。

  方法位置:

  方法参数:例如要更新

  方法:在队列中,它将被忽略,但是当队列刷新时,细节如下:

  判断标识符是第一个执行,但是执行执行后,将其放置为。这确保在此事件的周期中的下一个周期中仅添加一个任务;通常据说将其合并和更新,然后将下一个事件循环完全更新。收集以在当前循环中更新的队列,而不是立即执行。

  在前三个步骤之后,全局变量成为一个全局变量。如果仍然需要,它仍然会被调用。我目前该怎么办?

  因为这是一个周期,所以该同步代码被连续调用。对于浏览器的下一个事件,已经有一项任务是在浏览器周期中刷新队列。只需将其添加到队列中。

  方法位置:

  方法参数:无

  方法功能:

  旅行,逐一致电(如果有),然后再次致电该值;

  调用重置和标识符;

  触发和组件的生命周期钩

  //在刷新队列之前对队列进行排序(升级),该队列可以保证:// 1.订单更新订单从父级到子级别,因为始终在子元组件之前创建父组件。(Watcher(Watcher)。在代码中编写的代码称为用户)//在渲染观察者之前,它被执行,因为用户观察者首先渲染观察者的创建。队列顺序

  queue.sort((a,b)=> a.id -b.id)

  //请勿缓存队列//使用数组长度的简介是动态更新值。有什么好处?//因为执行当前观察者时,//队列可能会通过推动更多观察者(index = 0; index; queue.length; index ++){watcher = queue [index] //使用VM时执行之前的挂钩。$ WATCH //或观看选项,您可以选择选项。如果(watcher.before){watch.before()} //清除缓存ID = WATCH.ID具有[ID] = null //执行观察器.run(),最后触发更新功能,例如,呈现updateComponent watcher.run()}

  //在重置/手表的前面复制活动子列表的活动子清单。

  resetschedulerstate()//这里将重置等待false

  //调用组件的更新和激活的挂钩callactivatedHooks(ActivatedQueue)CallupDatedHooks(UpdateDqueue)}}}

  2.1.2 watcher.prototype.run此方法在上面调用。主要功能是调用创建期间通过的回调函数:

  方法位置:

  方法参数:

  方法功能:

  为什么?这是事件周期的概念。浏览器指出,收到通知后,从任务队列中取出任务,然后执行称为一号的完整过程。

  据估计,许多人会看到一个经典的访谈问题:谈话的原则。据估计,许多人知道如何将回调功能放在下一个降级过程中。它是首选。如果不使用它,则未尝试前两个,如果未尝试使用前两个,则没有前面,则不会使用;

  那么这些逻辑在哪里处理?

  2.1.1 TimerFunc方法位置:

  方法参数:无

  方法:异步任务通过将放置在下一个事件周期中。解决此问题时,请有一个优先级。给予微任务优先级。

  2.2.2 flushcallbacks方法位置:

  方法参数:无

  方法:消耗队列,分配中的功能,然后清除队列;

  库存是上述功能。实际上,这是不准确的。它存储一个包装的软件包。这种包装过程发生:

  这个小的构图讲述了如何组织队列更新,主要基于以下方法:

  原始:https://juejin.cn/post/7101656752818487304