Iframe是否创建单独的执行上下文?

时间:2019-01-10 17:12:18

标签: javascript

我正在用js编写一个html解析器,该解析器可以处理和操纵许多节点。

我想分摊开销,以免导致UI冻结。

我考虑过使用Web Worker,但是它没有DOM访问权限,所以目前我在循环中使用setTimeout(0)来冻结UI,但是我考虑过创建多个空白iframe并使用其窗口上下文来执行此任务。

我的问题是,是否真的将其视为独立的执行上下文并且与主上下文并行运行,否则它仍将冻结主UI?

2 个答案:

答案 0 :(得分:1)

是的,iframe中的JavaScript在其自己的线程中运行,它不会阻止父窗口。它主要类似于单独的窗口或选项卡,主要区别在于它是在父框架中呈现的,并且可以使用window.parent引用父框架。

答案 1 :(得分:0)

这实际上取决于浏览器。例如,由于计算开销,移动浏览器不太可能将不同的嵌入式 iframe 放在单独的线程/进程中。

但是从 2021 年初开始,现在有了(名称怪异的)Origin-Agent-Cluster 标头,它允许您明确地为 iframe 请求专用资源。它目前在 Chrome (88+) 上得到支持,并得到了 Mozilla 和 Safari 的好评。

<块引用>

Origin-Agent-Cluster 是一个新的 HTTP 响应头,它指示浏览器防止同站跨源页面之间的同步脚本访问。浏览器也可能使用 Origin-Agent-Cluster 作为提示,表明您的源应该获得自己的、独立的资源,例如专用进程。

<块引用>

[...] 例如,如果 https://customerservicewidget.example.com 期望使用大量资源进行视频聊天,并且将嵌入到整个 https://*.example.com 的各种来源,维护该小部件的团队可以使用 Origin -Agent-Cluster 标头以尝试降低它们对嵌入器的性能影响。

<块引用>

要使用 Origin-Agent-Cluster 标头,请将您的 Web 服务器配置为发送以下 HTTP 响应标头:Origin-Agent-Cluster: ?1 ?1 的值是布尔真值的结构化标头语法。< /p>

此处有更多详细信息:https://github.com/sudarshan0091/filesplit