是IFRAME可能的JavaScript多线程

时间:2009-12-31 02:41:14

标签: javascript multithreading

我目前正在尝试使用IFRAME来实现一个非常简单的多线程引擎。但是我的初步结果表明,在线程中运行比在单个线程中运行要慢。

我的测试是:

单线程

var start = new Date().getTime();
for (var i = 0; i < 300; i++) { /* Do costly processor operations */ }
debug('Took: ' + new Date().getTime() - start);

多线程

var start = new Date().getTime();
// In thread 1
for (var i = 0; i < 100; i++) { /* Do costly processor operations */ }
// In thread 2
for (var i = 100; i < 200; i++) { /* Do costly processor operations */ }
// In thread 3
for (var i = 200; i < 300; i++) { /* Do costly processor operations */ }
// In a callback in the original FRAME (thread)
debug('Took: ' + new Date().getTime() - start);

可以看出,我只是在IFRAME之间分配工作量(上面的注释代码只是为了更好地描述我正在做的事情,它不是工作代码)。

所以我认为即使使用FRAME FireFox仍然只有一个JS引擎?这个假设是否正确? (使我的研究变得愚蠢),其他浏览器是否有所不同?

快速谷歌我得到了这篇文章:http://codediaries.blogspot.com/2009/12/real-javascript-multithreading-using.html

然而,这里实现的性能改进很可能只是执行并行的http请求而不是处理能力。

感谢您的见解。

5 个答案:

答案 0 :(得分:3)

查看HTML5 Web Workers标准,了解JavaScript线程的外观。这是在Firefox 3.5,Safari 4和Chrome 3中实现的,但不是IE。如果您愿意为IE用户和旧浏览器要求插件,请查看Google Gears WorkerPool

答案 1 :(得分:0)

不,Javascript通常不支持多线程。大多数解释器都没有内置的任何多线程功能(就像PHP一样),可能是出于可移植性的原因。

但是,由于Rhino引擎完全用Java编写,因此may be able to tap into the Thread class,但这只有在您使用服务器端Javascript时才可行。

答案 2 :(得分:0)

我决定采用依赖浏览器的解决方案。基本上我会使用Workers(如果可用),然后Gears(如果可用)。最后只是单线程。

全部谢谢

答案 3 :(得分:0)

在某些情况下,

setTimeout 调用可能是一个很好的解决方案。

这取决于你所谓的线程。不,这不会将任何负载传播到其他核心,但它是多线程的,因为进程的线程被放弃到代码中的另一个进程。将繁重的周期分成块,你可以让渲染引擎和其他事件进入。

答案 4 :(得分:-1)

您可以尝试在setTimeout调用中包装您的操作。