2011-06-22 13 views
0

私はflotとjqueryを使ってスクリプトを完成させました。今私の質問には、それはオペラとFirefoxで速いですが、それはインターネットエクスプローラ(驚きではありません)で痛いほど遅いので、スクリプトをより効率的にする方法があるのだろうかと思います。 "forループ"など)? Pこのスクリプトをより効率的にすることはできますか?

事前にそんなに

感謝=)

それができる:殺すためにいくつかの暇な時間を持ってそこに任意のコードの達人がある場合、私自身が効率的なコードを書くことでひどいですのでそう、私を助けてくださいあなたは変数に格納した場合 on this address

+4

何百行ものコードを読まなくても、何をするのか説明しておけば助かります。 – Niklas

+0

IE8/9やFirefox(Firebug経由)のJavaScriptプロファイラを使用してコードをプロファイリングしてみましたか? –

答えて

2

さらにいくつかのヒント:それがあることが指摘された

... $(this).attr('id'); 
... $(this).attr('name'); 

は高価であり、あなたは$ここでは必要ありませんが、全く、ちょうど使用します。また

... this.id; 
... this.name; 

.css(...)を使用することは、莫大な浪費であり、クラスを使用してCSSをスタイル要素に置きます。

$('#x')のような参照をクロージャ内に格納することができます。ここでも$は必要ありませんが、ドキュメントを使用して要素への参照を直接取得する方がはるかに効率的です。getElementByIdをようにではなく:

$('#x').text(pos.x.toFixed(2)); 

あなたが持つことができます。

x.innerHTML = pos.x.toFixed(2); 

いくつかの機能を置き換える単一のプロパティにアクセスして呼び出します。基本的な考え方は可能な限り多くのjQueryを削除し、頻繁に取得するのではなく、関数ではなく直接プロパティへのアクセスを使用するのではなく、参照を保持することです。

jsFiddle javascript領域からコピーしようとすると、Safariがフリーズします。私はそのサイトの大ファンではない。

+0

+1便利なことに、基本的なJSで直接達成できることのほとんどを忘れてしまったので、jQueryを使うのは実用的です。すばらしいです –

1
for(k; k<datasets.length; k++){ 

ループが次に実行されるたびに、あなたはlengthプロパティを呼び出している見つけることが、それはこのように、唯一のループの開始時に良いでしょう:

for(var k, len = datasets.length; k < len; k++){ 

はまた、ここでは、資源を無駄にしている。

key = $(this).attr("id"); 
subsystem = $(this).attr("name"); 

だけ渡された要素のクローンが作成されます)あなたは$を(使用するたびに引き起こし、変数に$(this)をシュティッヒ。ただ、このように実行します。これは別のオブジェクトになったときに

var $this = $(this); 

、代わりの$(この)で、そこから$これを使用する、唯一の$(this)を再利用します。

1

第1に、jQueryセレクタでは、クラス名を使用すると、より具体的にすることができれば効率的です。例えば代わり​​に

var checkboxContainerFailed = $(".failedCheckboxes"); 

の第二に、それは一般的に代わりに第三var subsystemNames = new Array();

の[]表記を使用した方が良いと考えています

var checkboxContainerFailed = $("#graph-table-bottom td.failedCheckboxes"); 
を試してみてください、あなたはここでデータ配列に末尾のコンマを持っています。これはIEの問題を引き起こす可能性があります

"test2-a4/", 
     ] 

最後に、すべてのエラーのためJSLintを通じて全体のことを実行してみてください。