我目前正在考虑使用 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 之间分配工作负载(请注意,上面的代码只是为了更好地描述我正在做的事情,它不是工作代码)。
所以我在想即使使用 FRAMEs FireFox 仍然只有一个 JS 引擎?这个假设是否正确? (使我的研究变得愚蠢),其他浏览器是否不同?
快速谷歌一下,我得到了这篇文章:http://codediaries.blogspot.com/2009/12/real-javascript-multithreading-using.html
然而,这里实现的性能改进很可能只是并行 http 请求,而不是处理能力。
感谢您的见解。
吉多
请您参考如下方法:
查看 HTML5 Web Workers查看 JavaScript 线程应该是什么样子的标准。这在 Firefox 3.5、Safari 4 和 Chrome 3 中实现,但在 IE 中没有实现。如果您愿意为 IE 用户和旧版浏览器需要一个插件,请查看 Google Gears WorkerPool .