2012-03-25 4 views
0

私が作成したライブラリを最小限に抑えようとしています。残念ながら、私は数年前にライブラリの開発を開始したため、メソッドやプライベートプロパティを宣言する標準的な方法は使用していません。基本的には、私のコードは次のようになります。パブリックメソッドを保持するJavaScript圧縮ですか?

/** @class Sample abstract class. */ 
myname.space.AbstractClass = function() { 

    /** Sample protected property A 
     * @private 
     */ 
    this.longNameProtectedPropertyA = 10; 

    /** Sample protected property B 
     * @private 
     */ 
    this.longNameProtectedPropertyB = 20; 
} 

/** Sample public method A. 
    * @methodOf myname.space.AbstractClass# 
    */ 
myname.space.AbstractClass.prototype.publicMethodA = function() { 
    return this.longNamePrivatePropertyA; 
} 

/** Sample public method B. 
    * @methodOf myname.space.AbstractClass# 
    */ 
myname.space.AbstractClass.prototype.publicMethodB = function() { 
    return this.longNamePrivatePropertyB; 
} 

/** @class Sample concrete class. 
    * @extends myname.space.AbstractClass 
    */ 
myname.space.ConcreteClass = function() { 

    myname.space.AbstractClass.call(this); 

    /** Sample protected property C. 
     * @protected 
     */ 
    this.longNameProtectedPropertyC = 30; 
} 
myname.space.ConcreteClass.trickyExtend(myname.space.AbstractClass); 

/** Overrides publicMethodB of the base class. 
    * @methodOf myname.space.ConcreteClass# */ 
myname.space.ConcreteClass.prototype.publicMethodB = function() { 
    return this.longNameProtectedPropertyC * this.longNameProtectedPropertyB; 
} 

このような長い例では、私が使用するコーディングスタイルを示してみました。私は今日、それが非標準であることを認識しています。しかし、私の図書館はすでにそのように書かれており、完全に機能しています。

私の問題は、コードを小さくしたいということです。私が必要とするのは、プライベートプロパティの長い名前を圧縮することですが、パブリックメソッドの名前を保持する必要があります。

私はYUIコンプレッサとGoogleのクロージャコンパイラを試しました。私が必要としていたようには機能しませんプライベートプロパティとパブリックメソッドの両方の名前は、難読化されているか、またはいずれも難解でした。

これを行う方法はありますか?何百ものメソッド/プロパティにアノテーションを付けておくと、長い時間を費やす準備ができています。私を助けることができるミニファーはありますか?

答えて

1

あなたは例えば、連想の構文で、最小化する前に、書き換えを試みることができる:

myname.space.AbstractClass.prototype['publicMethodA'] = function() { 
    return this.longNamePrivatePropertyA; 
} 
+0

これは面白いですね!なぜこれが助けになるのか聞いてもらえますか?それは実際に文字列であるので、識別子がミニマイザに隠れるからですか? – Tregoreg

+1

はい、そうです。文字列(およびキーワード)は、私の最小化に影響を受けないままでなければなりません。グローバルメンバが最小化を生き残るようにしたい場合は、それを例えば以下のように記述します。 'ウィンドウ['myname'] ...'。 –

+0

よろしくお願いいたします。私は実験を少ししかやっておらず、実際にはうまくいくようです。クールなことは、これは簡単に正規表現を使って行うことができ、私の時間を節約することです! – Tregoreg

関連する問題