2012-02-27 25 views
5

縮小版中發生了什麼評論 JavaScript文件?瀏覽器如何知道評論的結尾是什麼時候一切都被壓縮爲一行?就拿這個小例子,我有這樣的谷歌的跟蹤代碼:縮小JavaScript中的評論會發生什麼?

//Google tracking 
var _gaq = _gaq || []; 
_gaq.push(['_setAccount', '123456']); 

縮小的版本拉一切都變成一條線

// Google tracking var _gaq = _gaq || []; _gaq.push(['_setAccount', '123456']); 

有多個語句,但是當我檢查的JavaScript代碼在編輯器中,它看起來像是一個巨大的評論(或多或少)。有沒有一個隱藏的字符告訴瀏覽器何時結束註釋,或者這個代碼是否被執行?

+2

您使用的是什麼縮小器?縮小器應該儘可能多地消除字符,尤其是*諸如評論之類的東西。 (以及你的案例中的空間。) – pimvdb 2012-02-27 15:53:34

+0

你用什麼來縮小腳本? – JaredPar 2012-02-27 15:53:44

+2

取決於縮小器,但我會認爲一個好的縮小器會完全排除註釋。 – jondavidjohn 2012-02-27 15:53:54

回答

3

縮小鏡去掉註釋或插入換行符。例如,Closure Compiler's FAQ說:

我可以一起使用關閉編譯器與其他JavaScript minifiers?

是的。 Closure Compiler讀取任何有效的JavaScript並生成有效的JavaScript,因此您可以在通過不同的縮小器運行文件之前或之後將Closure Compiler應用於JavaScript文件。

記住關閉編譯器和其它minifiers可能有關於傳入碼的預期。例如,刪除註釋的縮小器可能會移除其他工具所需的許可證或註釋信息。

有時你真的需要評論,在這種情況下,他們把換行符。

我有版權聲明或開源許可證文本必須出現在我的源代碼中。我如何讓Closure編譯器將這些文本剝離出來?

關閉編譯器支持JSDoc @license標籤。將@license標記添加到任何JSDoc註釋以在編譯器輸出中保留註釋。有關更多信息,請參閱爲Closure編譯器註釋JavaScript。

由於某些解釋器的源代碼解析器在真正長的行上崩潰或執行得非常慢,因此縮小器也會偶爾斷行。

https://bugzilla.mozilla.org/show_bug.cgi?id=634444

之前,因爲我們正在處理的塊,有一個錯誤消息如何能一行包括很多的限制。但是現在錯誤信息包含整條線。 如果你有很長的線路和很多的錯誤,這是一個高內存使用,尤其是因爲我們調用js_DeflateString()錯誤消息字符串,導致它的兩個副本(一個由jschar s,另一個由char S)。

在相關網站上,包含122,895個字符的行發生了大量錯誤,導致超過1G的char s(每個char!3個字節)被放入錯誤消息中。

3

JavaScript單行註釋以到達的第一個換行符結束。刪除換行符之前,縮小器將刪除註釋,以便它不會破壞您的代碼。

舉個例子,如果你粘貼

//GOOGLE TRACKING 
var _gaq = _gaq || []; 
_gaq.push(['_setAccount', '123456']); 

Closure Compiler用簡單的優化你

var _gaq=_gaq||[];_gaq.push(["_setAccount","123456"]); 

憑藉先進的優化你:

var a=a||[];a.push(["_setAccount","123456"]); 

的意見是兩者都刪除。

+0

我敢打賭,客戶端的某個人試圖通過手工「縮小」代碼,並以此結束。謝謝您的幫助。 – Rondel 2012-02-27 16:19:46