如果与同步函数一起使用,deferred 会阻塞 UI 吗?

Will deferred block the UI if used with synchronous function?

我刚了解到 JQuery 延迟对象,它们对于链接异步调用非常方便。

知道sychronous calls也可能被deferred处理,我想知道deferred的目的是在解决每个deferred之后把手还给UI还是有限制将它们链接在一起?

显然,这个问题对于异步调用来说是无关紧要的。我真正想了解的是延迟对象在处理同步调用时对 UI 的行为。

是的。同步调用将阻塞 UI 线程。

没有 promise 可以改变同步调用所花费的时间或使同步调用不会阻塞浏览器 UI。因此,如果同步函数调用需要 15 秒才能完成,那么无论是否使用 promises,浏览器 UI 都将被阻塞这 15 秒。

当使用非jQuery、符合标准的承诺库(如 Bluebird)时,即使承诺是同步解决的,.then() 处理程序也总是被异步调用。这为您提供了调用 .then() 处理程序时的时间一致性,无论它是同步解析还是异步解析。 jQuery 并不总是以这种方式符合标准(尽管它显然正在解决这个问题)。虽然这不会改变 15 秒同步函数仍会阻塞 UI 15 秒,但使用同步操作的承诺有时会改变代码执行的顺序而不是不使用承诺(因为它是异步的)模型,即使某些代码是同步的)。

Javascript 在 UI 线程上运行,因此同步函数将占用该资源。如果你想尝试一些解决这个问题的方法,你可以看看这个 site has to offer. There are many other resources you could visit by using Google.