用于同源 CPU 密集型 iframe 的单独事件循环

Eya*_*lAr 11 javascript iframe sandbox same-origin-policy

假设我有一个 CPU 密集型 iframe。
它与父页面在同一个域中,因此跨域不适用,因此它共享父页面的事件循环。

是否可以为 iframe 设置一个单独的 JS 上下文(包括一个单独的事件循环),这样它就不会阻塞父级的 UI?

设置标签的sandbox属性iframe并不能解决这个问题,尽管文档声明 iframe 将被视为来自“唯一来源”。

这个问题是假设的/概念性的。我没有一个真正的用例。只是好奇。
我在徘徊像 JSFiddle 这样的网站如何运行用户的代码,显然它从来自不同域的 iframe 运行(在 JSFiddle 的情况下是 jshell.net)。

Pas*_*mer 1

JavaScript 是单线程的。在其他线程中执行任务的一种方式是网络工作者。但是他们无法访问 DOM。

如果您有一项非常密集的任务会阻塞您的 UI,您可以将该任务分成多个块,并在块之间设置超时。超时不会阻止其他代码的执行。因此,如果您足够聪明,则可以使用此技术为 UI 响应创建时间窗口。

这个问题(和答案)处理一个非常相似的问题。