Javascript事件循环:web api在哪里执行?

时间:2016-08-01 18:11:32

标签: javascript event-loop

在阅读JS事件循环时,我很好奇web api的执行情况。例如,在此image中,粉红色框没有名称(只是说“特定于实现”),让我想知道 这些web api的执行情况。调用堆栈,事件循环,消息队列都有名称。我也见过Philip Roberts talk关于事件循环,他只是将它称为“Web API”。

因此,当在调用堆栈中到达web api时,它会在调用堆栈的其余部分运行时关闭并执行。但是这个web api调用会在哪里执行?例如,如果设定的时间超过5秒,那么它在5秒钟内的位置是什么时候?

2 个答案:

答案 0 :(得分:0)

当有人点击该链接时,“changeColor”事件将添加到消息队列中。

如果消息队列为空,则将在下一个时钟执行。如果队列中已有其他事件,那么将在执行“changeColor”之前执行这些事件。

答案 1 :(得分:0)

即使这是2年前的问题,由于尚无答案,我将根据自己的理解尝试回答这个问题。目前这就是我对javascript的理解,因为我刚开始编写半年代码,所以它在任何地方都可能不准确。如果有错误,请指出。

此问题的简单答案是:它仍在您的计算机上运行,​​但与执行堆栈不在同一线程中。

首先,我想谈谈v8引擎。 V8是javascript引擎之一,而javascript引擎主要由浏览器供应商提供。最早的javascript引擎是由发明javascript的人创建的。另外,在视频中,他提到setTimeout并未在v8中实现,V8只是chrome用于理解javascript的工具。因此,我会说Javascript只是一堆字母,但仅适用于JavaScript引擎(例如V8):它了解javascript的想法。 [旁注:node.js是基于V8引擎实现的,我将基于node.js来解释您的问题。]

第二,应弄清api一词。我不想谈论定义,因此我要表达自己的理解:api只是一个使程序员更轻松的接口。它向用户(正在使用api的开发人员)隐藏了困难的工作。当我们谈论web-api时,它可以是任何客户端api,例如youtube api,对于服务器端,也有宁静的api。如果您去检查node.js github,您将看到setTimeout是用JavaScript语言在lib/times.js中实现的。总之,他在视频中讲话的web-api只是使用javascript创建的界面。

第三,语句javascript is single-threaded不是100%正确。 Javascript在后台运行多个线程。当然,如果您查看事件循环图,并考虑队列和事件循环的工作方式,您可能会注意到,只有一个线程是不可能的。只有具有多个线程,javascript才能异步运行事物。

结论:V8没有实现setTimeoutDOM,所以我想引擎本身不了解setTimeout。虽然setTimeoutDOM等是在javascript之外实现的。 然后,当您使用javascript调用setTimeout时,它不是由引擎直接编译的,而是会调用用javascript编写的另一个函数。而且该函数的主体可以由引擎在另一个线程中编译。

第一季度:

  

该Web api调用将在哪里执行?

A1:

  

Web-api只是像Javascript函数或youtube api等被调用

第二季度:

  

它在哪里坐了5秒钟?

A2:

  

您的计算机,但线程不同。