Javascript 如何使UI线程持续运行

Javascript 如何使UI线程持续运行,javascript,asynchronous,dom-events,Javascript,Asynchronous,Dom Events,据我所知,因为JavaScript是单线程的,像 setTimeout(0, function() { alert("Hello"); }); 不会阻塞UI线程,将等待UI线程出现中断,以便它可以“跳入”并运行。这是一句老话 “无事可做时,请检查[callback]队列。但仅限于 无事可做时检查队列。“ 我想说的是,有人能给我举个例子吗,浏览器总是有事情要做,因此回调队列中的异步方法永远不会执行?还是我对事件循环的理解完全扭曲了?正如您所指出的,回调是在浏览器无事可做时完成的。如果从不运行回调

据我所知,因为JavaScript是单线程的,像

setTimeout(0, function() { alert("Hello"); });
不会阻塞UI线程,将等待UI线程出现中断,以便它可以“跳入”并运行。这是一句老话

“无事可做时,请检查[callback]队列。但仅限于 无事可做时检查队列。“


我想说的是,有人能给我举个例子吗,浏览器总是有事情要做,因此回调队列中的异步方法永远不会执行?还是我对事件循环的理解完全扭曲了?

正如您所指出的,回调是在浏览器无事可做时完成的。如果从不运行回调,用户会认为浏览器没有响应。这是一种可能的情况,但不太可能被视为正常情况


在假设超时回调将发生的情况下实现代码是非常好的。您想要做的是创建一个能够容忍回调发生时间差异的实现。差异可能与处理其他回调和事件所花费的最长时间有关。

正如您所指出的,回调是在浏览器无事可做时完成的。如果从不运行回调,用户会认为浏览器没有响应。这是一种可能的情况,但不太可能被视为正常情况


在假设超时回调将发生的情况下实现代码是非常好的。您想要做的是创建一个能够容忍回调发生时间差异的实现。差异与处理其他回调和事件所花费的最长时间有关。

while(true);//哈哈,现在没有其他线程可以跳转了更改到另一个选项卡。您的示例代码已损坏。你把论点的顺序颠倒了。此外,最小超时时间因浏览器而异。FireFox使用最小4ms的iirc。也就是说,它们还有一个非标准的
setImmediate()
函数,该函数将回调排队以尽快执行。无论如何,如果某个对象无限期地阻塞(),那么您将遇到更大的问题…
while(true);//哈哈,现在没有其他线程可以跳转了更改到另一个选项卡。您的示例代码已损坏。你把论点的顺序颠倒了。此外,最小超时时间因浏览器而异。FireFox使用最小4ms的iirc。也就是说,它们还有一个非标准的
setImmediate()
函数,该函数将回调排队以尽快执行。无论如何,如果有什么东西无限期地阻塞(),你会遇到更大的问题。。。