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

在对JavaScript事件的循环机理原理的深入分析中

时间:2023-03-07 17:30:41 网络应用技术

  拆卸意识到了承诺及其周围文本中宏观和微观的知识点。实际上,这与事件周期机制密切相关。这篇文章还将与所有人联系。

  它是一种单一的语言,它是众所周知的。为什么它从多线程语言中从根本上改变了?

  Ruan Yifeng的前任文章提到了原因,并将其提到了:从出生开始,这是一个线程。原因可能不是使浏览器过于复杂,因为多线程需要共享资源,并可能会互相修改结果。对于一种网络脚本语言,这太复杂了。速度,它同意成为单个线程语言。

  只需谈论一个场景:如果两个线程同时运行一个,一个修改和一个删除,哪个是基准测试?为了避免此场景,JS是一个线程。

  H5提出的标准允许创建多个线程,但是子线程完全由主线程控制,因此它仍然是一个线程本身。

  那么,单个线程语言引起了什么问题?执行单个线程处理任务?:

  让你好='Hello'

  让世界='世界'

  console.log(Hello +',' + World)上述代码,在JS引擎编译后,所有任务代码将放在主线程中。当主线程开始执行时,将按顺序实现这些任务按顺序订购,打印后,主线程将自动退出。

  一切都很美丽?但是现实是复杂而残酷的吗??♀?,不可能一步一步地保持。如果单个任务执行时间太长并且随后的任务被阻塞,该怎么办?

  单线程意味着所有任务都需要排队。如果以前的任务执行时间太长,则必须等待后一个任务,例如IO线程(请求数据),您必须等待结果出来,并且然后执行它。

  但这是不必要的。我们可以在等待中挂起任务,并继续执行后续任务。

  因此,任务可以分为两种类型:一种是同步任务;一个是异步任务。简便任务:所有在主线程上都执行,并使用执行堆栈管理同步任务。AsynChronousTask:完成异步操作,首先输入任务队列,并等待主线程执行堆栈空,并执行堆栈空,并阅读任务队列中的异步任务。

  分析上述代码是否与我们通过Loupe工具所说的相同。

  代码执行顺序与以前的结论完美匹配?

  主线程从任务队列中读取的主线程的原因是恒定周期性。为了更好地理解菲利普·罗伯茨(Philip Roberts)演讲中的事件循环的讲话“帮助,我陷入了事件循环”)

  如上图所示,主线程正在运行,并且代码在堆栈和堆栈中调用。当满足触发条件时,指定的回调功能或事件将输入团队。执行堆栈中的代码后,它将在任务队列中读取事件,因此它将是如此。

  您还可以从图中获取一个信息点:任务队列中不仅有一种任务。它包含诸如输入事件(鼠标滚动,单击),微任务,文件读写,websocket,计时器等。它们,输入事件,文件读取和写作以及Websocket是异步的请求,等待I/O设备要完成。定时器如何在指定的时间之后指定代码?micro -task是什么?

  计时器主要来自两个函数。两者之间的区别是执行次数,前者一次执行,后者被重复执行。举例来说,基本用法如下。

  这很简单,上述代码将在1000mS之后输出。我想知道您是否有任何疑问?如上所述,按顺序读取和执行任务队列的任务在指定的时间内调用?阅读信息后,我发现设计延迟队列的概念是根据启动时间和延迟时间计算的延迟队列中的任务。如果任务到期,则完成任务将首先执行,并将执行下一个周期。使用计时器有一些预防措施?如果主线程任务执行太长,则会影响计时器任务的执行。

  作为上述代码,尽管该函数设置了一个延迟的回调函数,但必须在执行5,000个周期后调用回调。面板的执行延迟,如下图所示。

  如果计时器已嵌套呼叫,则系统将设置最短的时间间隔

  在中间,计时器使用超过5次,并且将确定当前方法阻止。如果时间间隔较小,则将间隔时间设置为MS.AS,如下所示。

  没有激活页面,计时器的最小间隔为MS。如果“选项卡”页面不是当前激活标签,则计时器的最小时间间隔是优化加载损耗并减少功耗。

  延迟页面的最大值是存储延迟值,因此只能存储最大值。这是因为最高的二进制是符号,因为某些存在。

  了解微任务,必须不理解宏任务?。如下所示,它是与宏任务和微型任务相关的技术。

  

  宏任务:新任务被添加到任务队列的尾巴,当圆形系统执行任务时,将执行回调函数。MICRO-Mission:当前宏任务在执行之前执行回调函数宏任务。

  可以看出,可以看到执行时间:每个宏任务都与Micro -Task队列相关。可以得出结论的执行顺序:首先执行宏任务,然后在当前宏任务下执行Micro -Task。如果Micro Task生成新的Micro -Task,请继续执行微任务。执行微任务后,继续循环。

  实践是测试真相的唯一标准。举一个示例?

  JavaScript(事件循环)机制中的事件循环是事件LoopjavaScript操作机制。

  视频给GIF

  作者:Jinxing的版权属于作者。

  链接:https://juejin.cn/post/7000392227893542919