2013-05-13 51 views
10

Emscripten可以從C/C++生成比JS代碼更快的代碼,這是否意味着我們應該用C/C++編寫新代碼並編譯它們以便在Web上運行?當asm.js比正常的JS代碼更快時,爲什麼我應該在JS中編寫新代碼?

我閱讀了Emscripten FAQ,它說:「通過所有手段編寫新的JavaScript代碼」,爲什麼?

+2

除非你真的能感覺到你的JS和asm.js之間的區別,否則不要碰C++。 – DCoder 2013-05-13 16:51:52

+0

很少有JavaScript實際上「做得」足以讓任何區別。當然,有一些JavaScript需要一些時間來完成它的工作,並且有一些寫得很糟糕的JavaScript需要很長的時間才能運行。但編譯它並不能真正解決後者。 – 2013-05-13 16:54:21

+0

@allfox你在這裏混合2件事。 1.從C/C++到Javascript的交叉編譯可能會更快,2.通過Javascript使用asm.js幾乎總是會更快。但是你想知道前者還是後者? – abergmeier 2013-05-14 15:31:41

回答

12

asm.js不是執行Javascript代碼的更快方法。這是運行已經降低到機器代碼抽象級別的代碼的一種更快的方式。你似乎大大高估了收益:

  • 如果讓JS開發人員編寫C++,如果是JS,你最終的fugly代碼幾乎一樣快並不像C++可以和其他方面的缺陷了。
  • 許多潛在的瓶頸,如DOM操作和網絡延遲,完全不受您的代碼運行速度的影響。
  • 對於許多程序來說,由於高級優化的加速,加速語言實現的速度變得越來越慢。換句話說,以更快的速度完成工作是件好事,但完全沒有做得更快。

走這條路有顯著缺點還有:

  • 你必須扔掉你的工作代碼,並在語言大部分的團隊贏得了」重新寫(包括缺陷)如果有的話,幾乎也是如此。
  • 截至目前,該技術還處於起步階段。你不會賭你的公司,甚至是重要的產品。即使成功,與JavaScript相比,它始終是一項利基技術。這並不妨礙它的專業工作,但它使許多事情更難。
  • IIUC,你不能直接做大多數JS可以做的事情,除了數據處理之外,你只能調用顯式提供給asm.js模塊的JS函數。也就是說,你總是需要在JavaScript中至少有一堆膠水代碼,並且(如上所述),如果這包括你的瓶頸,你實際上並沒有獲得任何東西。

唯一種代碼,我期望從asm.js獲得足夠的使用是:

  • 現有這是不是已經用JavaScript編寫代碼。爲了節省大部分移植麻煩的唯一原因。
  • 沉重的數字運算不與瀏覽器交互。 (想想:你多久做一次這樣的事情?你真的想要通過使用C/C++編寫它,並用JS連接它的努力嗎?)
  • 從本質上講,抽象asm.js支持,例如發佈機器代碼式指令的編譯器。
+1

我會鼓勵勇敢的嘗試在那裏的任何3d演示代碼中探索js。完全無法理解。 – meawoppl 2014-03-03 05:42:50

相關問題