使用谎言 setTimeout 或者 setInterval 拍摄流动?
我读了这篇文章
http://ejohn.org/blog/how-javascript-timers-work/
如何
和
和其他异步任务,如按下按钮,让我感到困惑。
我知道 JS 是一个线程的,即 AFAIK, 所有回调功能 /事件处理程序 a.k.a. event/ 将按顺序排队和制作。 但是,查看下面的图像,我从上面的文章中取出:
每个街区都是一些工作,而且 - 粗略 10 小姐。 - 定时器工作。 我知道它的回调函数在队列中进行后续执行,但是如何在已经执行某些东西时导致事件发生的情况?
这是因为
开始使用单独的流进行内部计数时间并运行事件结束?
请注意,我不会在这里发言,以执行回调; 相反,我正试图了解如何
可以阅读时间并开始完成。 我知道他的回调不会被称为未以前指定的时间参数,但可能稍后,但这是因为它的回调在执行环境中找到一些时间来检查是否以行中执行某些东西。
类似于此问题,为什么浏览器接受新的点击注册,而且 - 假设循环在点击用户时落后于场景?
如果您说浏览器支持不同的东西的不同流,我们可以打电话 JS 在浏览器中单线程?
http://ejohn.org/blog/how-javascript-timers-work/
如何
setTimeout
和
setInterval
和其他异步任务,如按下按钮,让我感到困惑。
我知道 JS 是一个线程的,即 AFAIK, 所有回调功能 /事件处理程序 a.k.a. event/ 将按顺序排队和制作。 但是,查看下面的图像,我从上面的文章中取出:
每个街区都是一些工作,而且 - 粗略 10 小姐。 - 定时器工作。 我知道它的回调函数在队列中进行后续执行,但是如何在已经执行某些东西时导致事件发生的情况?
这是因为
setTimeout//
开始使用单独的流进行内部计数时间并运行事件结束?
请注意,我不会在这里发言,以执行回调; 相反,我正试图了解如何
setTimeout
可以阅读时间并开始完成。 我知道他的回调不会被称为未以前指定的时间参数,但可能稍后,但这是因为它的回调在执行环境中找到一些时间来检查是否以行中执行某些东西。
类似于此问题,为什么浏览器接受新的点击注册,而且 - 假设循环在点击用户时落后于场景?
如果您说浏览器支持不同的东西的不同流,我们可以打电话 JS 在浏览器中单线程?
没有找到相关结果
已邀请:
3 个回复
石油百科
赞同来自:
https://developer.mozilla.org/ ... usage
, 但每个工人也是单线的/. 但Javascript不是唯一发挥作用的唯一作用 API 环境。 这些功能 , 作为
,
和
, 实施重要 /或至少在一个线程外 JavaScript/, 他们的回调由诸如浏览器的媒体发起。 它是将这些回调在队列中的环境,它应该由单线程引擎执行 JavaScript. 这就是浏览器如何拍摄新的单击事件以启动,即使它仍然执行其他代码 JavaScript. 完全是因为这个原因 JavaScript 它被认为是一个事件。
江南孤鹜
赞同来自:
然而,许多事情在背景中采取行动,并且它们改变自己的孤立介质,后来可能以数据碎片的形式发送到主环境。 反向呼叫队列 XMLHttpRequest, 定时器和Web工作者完成这一切。 他们都有可能同时工作 /在几个 CPUs/, 但它们都以一致的方式与主要媒体互动。
八刀丁二
赞同来自:
此外,不需要额外的流来节省全球时间,因为它已经交付 OS 或实施媒介。
例如,采取这个简单的脚本 PhantomJS:
导致以下结果是什么:
begin
end longRunningTask 5025
end timer 1s 5029
end timer 10s 10001
EXIT
仅当控制返回到事件周期时才会触发第二个定时器。