簡體   English   中英

Javascript壓縮和對象屬性問題

[英]Javascript compression and the object properties issue

主要的JavaScript壓縮器和縮放器不處理對象屬性名稱。 (Google Closure,YUI ......)

我注意到結果大小(gzip並且沒有gzip)有很大差異,這取決於我們決定為腳本選擇哪種方式或模式。

例如,為我們的項目選擇原型模式很可能會生成更大的結果文件(未壓縮,壓縮和壓縮)。

這里有兩個代碼完全相同的代碼:

使用Google Closure編譯器壓縮。

只需查看生成的壓縮代碼,結果非常明顯:


原型模式


var MyBluePrint = function(){this.name =“demo”; this.someFunction = function(){alert(“some function”)}; this.someOtherFunction = function(){alert(“some other function”)}; this.showMyName = function(){alert(this.name)}; this.someFunction(); this.someOtherFunction(); this.showMyName()}; new MyBluePrint;


沒有模式


var MyBluePrint = function(){alert(“some function”); alert(“some other function”); alert(“demo”)}; new MyBluePrint;



使用對象屬性的任何內容都不會被壓縮。 如:

//function declarations
this.someFunction = function(){ ... }

//objects
var demo = {
    isActive: 'aaaa'.
    name: 'aaaa'
}

在創建我們的項目時,我們應該真正考慮這個問題嗎? 這不是第一次,而不是讓對象充滿屬性我決定使用常規變量只是因為壓縮長屬性名被多次使用。

Closure-Compiler使用ADVANCED_OPTIMIZATIONS可以完全重命名屬性名稱。 此外,為了獲得Closure-compiler的全部功能,您需要告訴編譯器MyBluePrint是使用@constructor注釋的構造函數。 而且,你所謂的“原型模式”實際上是使用實例方法 - 而不是原型。

這是更新的比較:

在許多情況下,Closure編譯器可以完全內聯方法,使輸出大小差異幾乎可以忽略不計。 如果可以使用帶有ADVANCED_OPTIMIZATIONS Closure編譯器,則應選擇提供最佳可維護性的代碼模式,並讓編譯器處理優化。

然而,所有這些比較基本上都沒有意義。 要進行實際的GZIP壓縮比較,您需要一個大的代碼庫。 小代碼片段不提供准確的表示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM