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

问题描述 投票:2回答:2

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

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

javascript event-loop
2个回答
0
投票

当有人单击该链接时,该“更改颜色”事件将添加到消息队列中。

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


0
投票

尽管这是2年前的问题,但由于还没有答案,我将根据我的理解尝试回答这个问题。这是我目前对javascript的理解,因为我刚刚开始编码半年,所以它可能并不准确。如果有错误,请指出。

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

首先,我想谈谈v8引擎。 V8是javascript引擎之一,javascript引擎主要由浏览器供应商提供。第一个javascript引擎是由发明javascript的同一个人创建的。另外,在视频中,他提到setTimeout没有在v8中实现,V8正是用于理解javascript的chrome。因此,我会说Javascript只是一堆字母,但只有javascript引擎,如V8:它理解javascript的思考方式。 [旁注:node.js是基于V8引擎实现的,我将根据node.js解释你的问题。]

其次,应澄清api这个词。我不喜欢谈论定义,所以我将陈述自己的理解:api只是一个让程序员更容易使用的界面。它隐藏了用户[使用api的开发人员]的困难作品。当我们谈论web-api时,它可以是任何客户端api,例如youtube api,当然,对于服务器端,也有宁静的api。如果你去看看node.js github,你会看到setTimeout是用qavascript语言在lib/times.js中实现的。总而言之,他在视频中谈论的web-api只是一个用javascript创建的界面。

第三,声明javascript is single-threaded不是100%真实。 Javascript在后台运行多个线程。当然,如果你看一下事件循环图,并想一想队列和事件循环是如何工作的,你可能会注意到单个线程是不可能的。只有多个线程,javascript才能异步运行。

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

Q1:

web api调用将在何处执行?

A1:

Web-api只是被称为Javascript函数或youtube api等

Q2:

它在哪里坐5秒钟?

AA:

你的电脑,但不同的线程。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.