2010-10-09 73 views
12

是否可以在浏览器中并行运行JavaScript代码?我愿意牺牲一些浏览器支持(IE,Opera,其他)来获得一些优势。并行JavaScript代码

+1

呃,如果你愿意牺牲兼容性,为什么你不能在你的程序中执行比JavaScript更快并且运行的程序呢? – 2010-10-15 16:51:35

+1

@Ira:你有什么想法? – 2010-10-15 17:38:59

+0

我开始回应您的评论,并决定将其作为答案。 – 2010-10-15 18:00:05

回答

12

如果你没有操作DOM,你可以使用webworkers ......还有一些其他的限制,但检查出来@http://ejohn.org/blog/web-workers/

+0

嗯。虽然我与“canvas”元素进行交互,但看起来很完美。可能不会这样做,我正确吗? – 2010-10-09 19:59:59

+0

我相信更新canvas节点与DOM交互相同。但它从未受伤测试。 – 2010-10-09 20:01:16

+4

您可以使用您的网络工作人员发送控制消息,然后解释这些控制消息以更改DOM,但没有直接访问权限。 – JKirchartz 2010-10-09 20:16:34

2

也许会更好地重新编写你的JavaScript的东西,一般运行得更快,而不是试图通过并行来加速Javascript。 (我希望你会发现分叉并行JavaScript活动的成本也很高,并且可能会消除任何可能的并行增益;这是并行编程的常见问题)。

Javascript在大多数浏览器中被解释为IIRC,它在它的顶部是动态的,这意味着它运行缓慢。

我在印象之下可以编写Java代码并在浏览器插件下运行它。 Java是类型安全的,JIT编译为机器代码。我期望用Javascript完成的大型计算在Java中运行速度会快很多。我并不特别提示Java;任何你可以插入的编译语言都可以。

作为替代方案,Google提供了Closure, a JavaScript compiler。这是声称是一个编译器,但看起来像一个优化器给我,我不知道太多它“优化”。但是,也许你可以使用它。我希望Closure编译器能够嵌入到Chrome中(但我不知道这个事实),也许只是运行Chrome会让你的JavaScript编译器“免费”。

编辑:在阅读关于什么关闭做,作为编译器家伙我没有太多印象。它看起来很重要的一点就是减少代码的大小,这样可以最大限度地缩短下载时间,但不一定会提高性能他们在函数内联中做的一件好事。我怀疑这将有助于切换到真正的编译语言。编辑2:在Chrome中运行JavaScript时,“Closure”编译器与引擎不同的是,其编译器与引擎不同。我被告知,但不知道这个事实,Chrome引擎有一个真正的编译器。

+0

它将JavaScript编译为JavaScript,并一路优化(内联函数等)。请参阅[常见问题](http://code.google.com/closure/compiler/faq.html#how-different)。我担心你对JavaScript的性能与Java的比较做出了巨大的假设 - 例如,WebKit的JavaScript引擎使用JIT编译器 - 以及Java是否适合OP的用例。 – s4y 2010-10-15 18:53:50

+1

Java不会*在浏览器中运行得更快,然后运行JavaScript。编写代码(对于Web应用程序)不仅速度慢而且笨拙,而且会严重限制与DOM的交互,除非整个页面是小程序。任何大型计算*都可以在Java中完成,但是我没有任何大的计算。我想平行对[我正在研究的宠物项目](http://joshuakehn.com/blog/static/sort.html)上的操作,其目标是不需要浏览器插件或其他外部库。 – 2010-10-15 19:08:55

+0

@Sidnicious:是的,我发现它是JavaScript - > JavaScript,我为什么称它为“优化器”。我确实建议存在真正的编译器(可能在Chrome下);很高兴听到有另一个来自WebKit。话虽如此,Java的数据模型和访问恕我直言比真正的机器更接近于JavaScript,如果Java/JIT与Sun/IBM团队编译的实际相同的计算比Webkit或任何其他“编译”JavaScript运行速度慢,我会非常惊讶。 OP没有具体说明他在做什么,只是速度很慢,并且假设它是计算的默认值。 – 2010-10-15 20:14:30

6

Parallel.js有在Javascript多线程处理一个很好的API。它可以在网页浏览器和节点中运行。