【发布时间】:2019-01-10 17:12:17
【问题描述】:
我正在用 js 编写一个 html 解析器,它处理和操作很多节点。
我想分摊开销,以免导致 UI 冻结。
我考虑过使用 web Worker,但它没有 DOM 访问权限,所以目前我在循环中使用setTimeout(0) 来不冻结 UI,但我考虑创建多个空白 iframe 并使用它们的窗口上下文做这个任务。
我的问题是它是否真的被认为是一个单独的执行上下文并与主执行上下文并行运行,或者它仍然会冻结主 UI?
【问题讨论】:
-
如果您使用 iframe 作为单独的执行上下文,则必须使用消息在上下文之间进行通信。为什么不对 worker 做同样的事情,只在主线程中留下 DOM 特定的代码?
-
@MTCoster 因为空白 iframe(无 src)内的代码可以访问主 dom
-
我没有意识到这一点。但问题仍然存在,为什么不能将特定于 DOM 的代码与处理器密集型代码分开并使用消息将它们连接起来?
-
@MTCoster 我可以,但是如果 iframe 拥有与 web worker 相同的好处,那么使用 iframe 会容易得多。
-
@StriplingWarrior 不完全是,如果我在 iframe 中运行负载密集型代码,它仍然无法回答我的问题,主 UI 是否会继续并行加载
标签: javascript