2010-10-09 44 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。它可以在網頁瀏覽器和節點中運行。