2011-10-18 53 views
15

我對於設備的HTML頁面有相當大的JavaScript。JavaScript Just In Time編譯

但它有點慢。我嘗試壓縮JavaScript文件,但仍然不盡如人意。

所以我在想,是否有可能將它編譯爲「Just in Time」並將其轉換爲機器碼並使用它? (希望我的理解是正確的)我使用基於WebKit的瀏覽器。

任何人請這樣做,請提供鏈接到「如何」頁面或相同的信息。

+8

JavaScript引擎將始終編譯「及時」;你不能提供二進制JavaScript或類似的東西。但它不應該是一個問題。你確定你不能實現延遲加載,因此只有當你將某些內容滾動到視圖中時纔會加載/提取內容? – pimvdb

+0

@pimvdb現在,您可以使用Emscripten在所有現代瀏覽器中運行預編譯的asm.js代碼。 – niutech

回答

49

Safari和Chrome都已經對Javascript進行了JIT編譯。事實上,唯一的瀏覽器並不是IE8及更早的版本。這是IE8比競爭對手慢得多的主要原因之一。

但是在你的問題的行之間閱讀,我的猜測是你不太瞭解JIT編譯是什麼。 JIT編譯發生在瀏覽器上;你不需要以任何方式改變你的代碼,以便瀏覽器能夠爲你做JIT編譯。

它聽起來像你實際上想的是字節碼編譯,比如Java。這個字節碼實際上是一箇中途編譯的語言,當你運行該程序時,它本身就是JIT編譯的。如果這是你想到的,我可以確認這不適用於基於瀏覽器的Javascript代碼。谷歌一直在使用一種名爲「Native Client」(NaCl)的技術,它可以讓你爲瀏覽器提供編譯代碼,但除了Chrome的開發版本之外,這個功能還沒有提供。

無論如何,編譯可能會讓你的代碼運行得更快,但它並不能解決它爲什麼運行緩慢的根本性問題,這可能是一個更好的解決方案。 (即使編譯後的代碼如果有瓶頸,性能也會很差;編譯本身並不會讓慢代碼變得更好)

如果您想了解腳本運行緩慢的原因,我建議使用性能分析工具,例如這是內置於Firebug或Chrome的開發者工具中的。這將幫助您識別緩慢運行的代碼部分。

您也可以嘗試YSlow工具,該工具還可以提供有關JavaScript性能的有用信息。

你還聲明你壓縮了你的腳本,試圖讓它變得更快。壓縮腳本將幫助它更快地下載(因爲它是一個較小的文件),但它不會爲代碼運行的速度做任何事情。

我希望有幫助。

+0

@pimvdb - 夠公平的;上次我看到它在開發中,但Chrome移動得很快,而我一直沒有跟上。儘管如此,它只能在Chrome瀏覽器中使用,並且這不適合在網絡上一般使用。 – Spudley

+0

對不起,我很困惑的事情。它似乎還沒有。 – pimvdb

+0

@Spudley謝謝你的理解。正如所建議的,我已經開始分析並找出需要時間的地方。由於HTML應用程序是由其他人提供的,因此需要花費大量的時間和精力來改變代碼。 :(因此,我試圖尋找一個快速修復。 同樣在我的理解中,JavaScript主要使用字符串比較來處理很多事情,因此我正在執行「壓縮」或使用「Clouser Compiler」來優化JavaScript。 – hari