2010-04-07 54 views
30

在壓縮之前是否有一些有效的縮小目的?如果壓縮文件首先被縮小,那麼壓縮文件似乎不太可能更小。在gzipping之前縮小JavaScript有沒有好處?

我問,因爲診斷縮小代碼中的生產問題要困難得多,而且我想知道人們是否將自己置於毫無目的的情況下。

+2

這真的很容易檢查...並且您應該使用您的實際文件;或不要擔心它,只是gzip – 2010-04-07 03:54:23

+0

我剛剛在我有這裏的文件上試過這個。這是160kb解壓縮,56kb包裝。使用相同的設置進行了壓縮,解壓後的一個變爲28kb,並且打包的一個23kb。 – nickf 2010-04-07 04:02:31

+0

@Steve,看看Compressor Rater,你可以將你的代碼與各種流行的縮小工具進行比較,無論是否帶有額外的gzip壓縮效果:http://compressorrater.thruhere.net/ – CMS 2010-04-07 04:28:07

回答

21

是的,這肯定有好處。

縮小是有損壓縮,而縮小是無損的。 Ergo,通過縮小您刪除不需要的數據(如註釋和長變量名),這將始終幫助您縮小文件。即使使用gzip,在大多數情況下仍然會有所不同。

例子:

function foo(this_is_my_variable){ 
    var this_is_my_other_variable = 0; 
    this_is_my_other_variable = this_is_my_other_variable + this_is_my_variable; 
    return this_is_my_other_variable; 
} 

這可能是精縮到:

function foo(a){ 
    var b = 0; 
    b = b +a; 
    return b; 
} 

或者,如果minifier是聰明的:

function foo(a){ 
    return a; 
} 

所有代碼都給出了相同的結果,但尺寸差別很大。

+2

gzip也會使重複的「this_is_my_variable」更短。你的三個例子gzip爲98,70和51字節。 – Thilo 2010-04-07 03:57:12

+0

@Thilo:雖然不小於單個字符變量.. – nickf 2010-04-07 04:00:14

+3

確實,縮小器通過切換註釋來幫助您。並不是真的,縮短長變量名稱是有幫助的,因爲gzip的縮小已經處理得很好(只有在這種情況下縮小的東西纔是字典大小。) – vladr 2010-04-07 04:00:44

3

也許吧。除了刪除空格之外,縮小JavaScript可能會導致相同文本的重複次數增加,這可能意味着使用gzip進行稍微更高的壓縮。幸運的是,由於命令行工具在* nix和available for Windows中通用,使用相同的壓縮算法(雖然格式不完全相同),所以前後很容易做到。

1

當我在gzip之前縮小時,我總是看到最終字節數明顯減少。

我有一個20分鐘的hack作業php腳本,它與yui壓縮器接口,以及googles關閉編譯器。它顯示了我之前和之後的字節,包括gzip之後,對我來說很容易檢查。

22

至於原始文件的大小,這裏是一個樣本(jQuery的1.4.2):

$ curl http://code.jquery.com/jquery-1.4.2.js | gzip > jquery.gz 
$ curl http://code.jquery.com/jquery-1.4.2.min.js | gzip > jquery-min.gz 

$ ls -la jquery* 
-rw-r--r-- 1 me staff 24545 Apr 7 12:02 jquery-min.gz 
-rw-r--r-- 1 me staff 45978 Apr 7 12:02 jquery.gz 

所以縮小的版本的一半大小。

2

它也可以幫助加快JavaScript代碼在瀏覽器中的解析。根據文件的大小,瀏覽器可能會花費大量的時間解析和標記文件,這將通過縮小來減少。

當然,只有基準測試和分析才能告訴您這是否會對您的特定情況有利。

我發現的最好作品是我在我的網站上保留了所有.js文件的縮小和非縮小版本,只需使用配置開關即可在兩者之間切換。這樣,正常的生產可以使用縮小版本,然後如果我必須調試某些東西,只需翻轉開關,而非縮小版本就可以提供。 (構建過程確保縮小和非縮小版本當然是同步的)

+0

您不應該在生產網站上進行真正的調試。 – Ben 2014-08-04 15:33:54

相關問題