使用iframe进行多线程处理

6
我正在尝试使用iframe模拟多线程,但我遇到了一个情况,我不知道它是否实际上利用了iframe进程(线程)本身。
例如,如果我调用一个在iframe内部的方法,它会使用由iframe创建的线程运行,还是使用主父窗口线程运行?
如果是后者,那么有没有可能改变作用域,让iframe调用该方法(这样程序将使用与父窗口不同的线程)?
编辑:也许我应该更清楚地说明,但我不想使用WebWorkers,因为我无法访问DOM元素。
2个回答

4
如果您想运行一些后台任务,只需使用WebWorkers即可。
通常情况下,您不需要多线程JS代码。相反,应该使用事件循环。

我同意关于事件循环的说法,线程并没有增加处理能力,它们只是将代码执行进行分割的一种手段。可以搜索了解一下node.js如何使用事件而非线程来发挥其强大的能力。 - Kevin Hakanson
@KevinHakanson 是的,我同意。但线程的主要用途是在后台运行长时间的计算。您不能使用事件循环来处理长时间运行的计算,您需要将它们放入新进程中。在浏览器中,我们无法创建进程,因此我们使用Web Worker。 - Raynos
我的应用程序比仅仅进行计算要复杂一些。我希望能够在父窗口中有多个线程处理SVG元素(缩放、平移、旋转等)。 - fogy
@Raynos 因为应用程序所做的是从数据库获取一系列绘制的 SVG 元素,并将它们应用于 SVG 文档(使用 Raphael.js)。当 SVG 路径复杂且数量较大时,它需要很长时间。我只想减少加载时间。 - fogy
在JavaScript代码中,除非必要,否则不需要使用线程。目前,DOM、画布和AudioContext仅在主线程中可用。花哨的图形和音频是相互竞争的。用户可以原谅显示器上出现故障的帧,但不能容忍音频故障。而在虚拟现实中,故障的帧是不可接受的。如果浏览器是一个人,它永远无法一边走路一边嚼口香糖。 - Samuel Danielson

1

请查看 MDN 文档中的 使用 Web Workers

Worker 接口会生成真正的操作系统级线程,如果不小心处理并发,可能会在代码中产生有趣的影响。然而,在 Web Workers 的情况下,与其他线程的精心控制的通信点意味着实际上很难引起并发问题。没有访问非线程安全组件或 DOM,并且必须通过序列化对象传递特定数据进入和退出线程。因此,您必须非常努力地才能在代码中引起问题。

John Resig 在 2009 年撰写了关于这个主题的 JavaScript Web Workers 计算。但是,根据 When can I use,直到 IE10 才支持,因此可能不符合您的需求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接