繁体   English   中英

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

[英]Does Iframe Creates separate execution context?

我正在用 js 编写一个 html 解析器,它处理和操作很多节点。

我想分摊开销,这样我就不会导致 UI 冻结。

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

我的问题是它是否真的被认为是一个单独的执行上下文并与主上下文并行运行,或者它仍然会冻结主 UI?

这实际上取决于浏览器。 例如,由于计算开销,移动浏览器不太可能将不同的嵌入式 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 标头来尝试降低它们对嵌入器的性能影响。

要使用起源代理群集头,配置Web服务器发送以下HTTP响应头: Origin-Agent-Cluster: ?1的值?1是结构化头语法一个true值。

更多细节在这里: https : //web.dev/origin-agent-cluster/

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM