2012-05-12 9 views
1

Google ClosureYahoo's YUIの両方を使用しようとしましたが、繰り返しの長い行は縮小されません。私は中に追加この修正するには:長い文をどのようにして縮小しますか?

var M = 
{ 
    m1: function(html_id, method_call) 
    { 
     return (document.getElementById(html_id).onclick = method_call); 
    } 
}; 

ので、代わりに

document.getElementById(test).onclik = test; 

を書くの私は

M.m1(test,test); 

を書くことができることはしかし、これは読み、コードを困難にします。私のためにこれを行うことができないオプションがありますか?確かにGoogleやYahooはこれを自動的に行う方法を知っていますか?

+0

これを目で見るだけで、私は.jsのサイズを5〜20%減らすことができ、長い関数名にすることができます。 –

+0

私は分かりません。ドキュメントやgetElementByIdとonclickを最小化することはできません。これらは標準のJavaScript名であり、名前を変更することはできません。最小限に抑えられるように見えるのは、「テスト」だけです。 –

答えて

1

おそらくクロージャーとYUIは、クランチングで「十分に最適」ではありません。インスピレーションのためにjs1k competititionのエントリを見ることができます。

This postは、手動で行うことのできる項目の概要を示します。

Here's an example of a compressor tool最小化時に(例えば、クロージャやYUIよりも)良い仕事をするかもしれません。

+0

ありがとうございました...良い情報...それは、その関数への複数の呼び出しの長さを減らすために、関数を追加するときの "呼び出しを行う"ことができますminifier(私が見た)... –

+0

誰かがこれを書いておくべきです....それはスペースの固体量を節約するだろう...基本的に上記のマニュアルセクションは簡単に自動化することができます。 –

+0

jsファイルが大きすぎるために私が問題を引き起こしたウェブサイトはありませんでした。良いコメント(あなたが知っているようにファイルサイズをさらに大きくする)を持つことは、はるかに重要です。あなたは時期尚早に最適化しているかもしれません。 –

0

長い行が縮小されているわけではありません。問題は、ドキュメントがJS環境でプロパティ名が固定されているホストオブジェクトです。ミニナイザーは、より短い名前の変数の名前を変更することによって機能しますが、 'ドキュメント'や他のホストオブジェクトの名前を変更することはできません。

これらの繰り返し行でコードの大部分が占めている場合は、そのたびに '文書'を直接使用する代わりに、すべての場所で呼び出す関数で機能をラップする必要があります。あなたのコードのいくつかの例は、それを行う方法についてより具体的に役立ちます。

+0

getElementById()の部分だけではなく、ドキュメントの置き換えを行います。 –

0
  1. スクリプトの先頭でそれらにカスタム名を与えて、これらすべての機能を定義し、あなたが好きな場所を見てみましょう(これらの機能を使用し、あなたのJSで行う繰り返しアクションのリストを取りますhere

  2. 圧縮は/ JavaScriptのhere

を縮小化

これが役に立ちます。

0

読み取り不可能な変数名を作成したため、その変数名を作成してコンパイルしないでください。

document.getElementByIdの名前を変更することはできませんが、名前を変更できるdocument.getElementByIdを返す関数を作成できます。

var getElementById = function(id){ 
    return document.getElementById(id); 
} 
var getElementByIdClick = function(id, method_call){ 
    return getElementById(id).onclick = method_call; 
} 

これは

それとも

function f(h){return document.getElementById(h)}function g(h,k){return f(h).onclick=k} 

閉鎖コンパイラあなたは、できるだけ多くの変数を使用している、ではない一般的に良いアイデアが、クロージャがあるのトリックにコンパイルすることができとても良いので、最高のものを決めるでしょう。

コードを関数に移動するだけでなく、「角カッコ表記」のすべての「ドット表記」をスワップして、すべてのプロパティとメソッド名に変数を使用することができます。

これは極端な例です。

クローズコンパイラは、かっこを使用するかどうかを決定します。そうであれば、変数の名前が変更されます。

これで終わる可能性があります。

var a=document,b='getElementById',c='test',d='onclick',e=function(){}; 
a[b](c)[d]=e; 

ドット表記に置き換えてすべての変数を削除することもできますが、少なくともオプションを指定している可能性があります。

document.getElementById('test').onclick=function(){} //method_call 

document.getElementById('test')closure compileためADVANCED_OPTIMIZATIONSオプションは、機能の名前を変更しますが、それは機能を使用した回数を考慮に入れないこのa[b](c)

にコンパイルすることはできません。関数を完全に削除し、代わりにdocument.getElementByIdを使用することがあります。

+0

'var u =" undefined ";ここにいくつかのバイトを保存します。例えば' if(typeof var1 == u) ' – TarranJones

関連する問題