序章
JavaScriptファイルの圧縮にはGoogleClosureCompilerを頻繁に使用しています。今、それは私のコードをかなりうまく圧縮しているようです。
this
今、私はオブジェクトをローカル変数に格納する習慣をつけようとしています。なぜならthis
、難読化することはできないからですが、ローカル変数は確かに難読化することができます。ただし、Google ClosureCompilerはこれを認識せず、代わりにローカル変数のすべてのインスタンスを削除して、に置き換えますthis
。
最適化について...
私は、コードを書くときに事前最適化を避けるべきであることをよく知っています。this
ただし、キャッシュを使用すると明確になるため、キャッシュは許容できると思います(this
多くのコンテキストを持つことができ、別の名前で参照するとあいまいさが軽減されるため)。
例
以下のコードはかなり基本的なものであり、記述が不十分である可能性があることを理解しています。ただし、コードは私が直面している問題を正確に示しています。
圧縮前の元のソースファイルは次のとおりです。
(function() {
var that = this;
that.a = 3;
that.b = 4;
this.c = 5;
return that;
}());
これが圧縮されたソースファイルです。this
toの割り当てthat
が削除されていることに注意してください。
(function(){this.a=3;this.b=4;this.c=5;return this})();
that
理想的には、割り当てが何らかの形で、おそらくこれに似た形で残ることを期待します。
(function(){var t=this;t.a=3;t.b=4;t.c=5;return t})();
さて、上記のコードはほとんどバイトを節約しませんが、(私がよく行うように)はるかに大きなスクリプトで作業する場合、節約は間違いなく合計されます。
質問
つまり、ClosureCompilerがthat
上記のスクリプトの変数を削除しないようにするにはどうすればよいですか?