0

我目前正在使用包含在一大堆網站上的大型Javascript代碼庫(目前大約有150k左右)。隨着更多功能的增加,它的規模不斷擴大,所以我現在正在研究如何縮小尺寸。選擇編譯爲JS語言並將輸出大小作爲優先級

目前可用的選項之一是從純JavaScript切換到編譯到JS庫。這在開發過程中可能會有所幫助,因爲諸如基於類的OOP和編譯時類型檢查等功能將爲我們節省一些工作量。但是,重要的是,這種改變不會增加純粹在JS中工作的代碼庫的大小。我所研究的語言都沒有特別關注輸出尺寸。 Dart看起來像最好的工作,但編譯的輸出是可笑的大。 GWT引入了比解決問題更多的問題,並且輸出結果並不令人愉快。我自己並沒有嘗試Haxe,但有一位同事,他告訴我它的產量非常臃腫。 CoffeeScript似乎是目前最有希望的,因爲輸出是相當標準的Javascript,但它仍然產生比我們目前手寫的更大的JS文件(儘管我只嘗試移植我們的代碼庫的小片段)。

是否有一種編譯生成JS語言,可以生成簡潔的JavaScript並很好地縮小(特別是使用Google Closure),同時使開發過程更簡單?或者,我們是否更擅長用手寫JS?

如果手寫的JS是要走的路,那麼是否有任何工具或技術可以在輸出尺寸上產生特別大的差異?谷歌的封閉庫看起來很有趣,因爲它們和我們自己的代碼在功能上有很多重疊,但好處必須很大,因爲切換到這個過程需要很多工作。

+0

如果您知道一次只能使用代碼段的一部分,並且可以將代碼庫正確地分隔爲必要和可選的代碼,那麼使用PHP之類的代碼可以更好地只連接需要提供的部分。 QueryStrings應該適用於選擇要包含的部分。 – TheZ 2012-08-10 18:26:16

+0

創建CommonJS/AMD模塊化普通JavaScript文件,然後http://requirejs.org進行優化和打包。 – devundef 2012-08-10 18:29:27

+0

我們已經在做這些事情了,一些可選的代碼片段以插件的形式加載(儘管我們使用自己的插件管理器)。不幸的是,我們無法動態構建整個事物,因爲它是第三方網站上的圖書館,而且我們通常不能很好地控制它所服務的服務器端環境。我目前正在使用的150k腳本實際上只是我們圖書館的「核心」組件,因此幾乎所有內容中的幾乎所有內容都將被需要。 – Jim 2012-08-10 18:33:25

回答

2

如果您正在查看非JS語言選項,您應該考慮簡單地在與Closure Compiler的ADVANCED優化兼容的樣式中使用帶註釋的JS。這可能會給你最小的代碼大小,同時仍然能夠利用純JS庫。

對於wilder選項,我聽說過有關JSX和UberScript(類型增強的CoffeeScript)的好東西,它們都產生合理的Closure Compile樣式的javascript。

通過源映射進行源代碼級調試應該使底層JS源代碼的「漂亮」變得不那麼重要。我不知道這兩個項目的源地圖的狀態。 Dart,GWT和Closure Compiler都生成它們。

+0

使用Closure的高級優化工具獲取代碼庫是目前的優先事項 - 無論採用哪條路徑,高級優化兼容性可能都是最低要求。 JSX和UberScript在功能上看起來不錯,但這兩個項目都沒有真正成熟到可以依賴。我想我們最終可能會堅持使用帶註釋的純JS。 我沒有意識到源地圖已經可以使用了,這可能會讓我們的生活在調試輸出時更容易。 – Jim 2012-08-12 12:36:50

+1

Chrome中的源地圖支持非常好,Firefox補丁程序已經恢復正常(實習生已經回到工程師身邊),但是我聽說微軟沒有提供任何信息。 各種文檔和鏈接: https://code.google.com/p/closure-compiler/wiki/SourceMaps – John 2012-08-14 15:40:00