2012-04-04 12 views
0

私はGoogleクローズコンパイラを実行したJavaScriptファイルを持っていて、それは明らかに長さの観点からは効率的ではないと確信しているonzaに捏造しました。実際には(実際に使用されている文字のために)より効率的な理由があるのでしょうか?Google閉包効率

たとえば、Gzippedの場合、zaonよりも圧縮率が高いと思われますが、ランダムな文字が2つしかない可能性があります。

+2

'on'のは'よりも圧縮性であることが、実際にそうであるza'ので、ハフマン符号化'z'は標準言語での相対頻度が低いため、他の文字よりも長い(より多くのビット)かもしれません。 –

答えて

3

http://closure-compiler.appspot.com/homeで遊んだあと、コンパイラは以前の名前に関係なく変数名の変更を開始するようです。変数名の現在の長さを気にするようには見えませんが、全体のサイズが以前と同じか小さいかを確認します。高度な最適化設定を使用すると、変数がコードからリファクタリングされることがあります。

コンパイラに変数の命名を処理させることで、それらの変数がどれも互いに競合しないことが保証されます。既存の変数名を保持しようとすると、それを別に追跡し、比較するリストを維持する必要があります。

コードを小さくするもう1つの利点は、コードベースを難読化することです。確かに誰かが本当に欲しければそれを理解することができますが、変数名をプログラマティックにすることで意味を理解するのが難しくなります。あなたは本当に私はGoogle Chromeのカナリアのソースマップ機能を検討して勧め組み合わせ&縮小さコードをデバッグしたい場合

http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/

+0

うん、それはサイズと頻度に基づいて(利用可能な名前のプールから)名前を選ぶ。より頻繁に使用される名前が使用されるほど、それに割り当てられる名前はより短くなります。ローカル変数には特別な処理がありますが、基本的な考え方は同じです。 – John

1

それは

またはそれだけのカップルランダムな文字列である(おそらく使用された文字の)実際には、より効率的であり、いくつかの理由がありますか?

かなりです。 AFAIK、Closure Compiler(および他のJS minifier)は、既に名前が付けられているものを見ることなく、全体的に少ない文字を使用するという目的で、変数の名前を体系的に変更します。