2012-02-02 12 views
1

私は、現在作業している要素のIDを含むグローバル配列を持っています。毎秒、私はこれらの要素には関係ないルーチンを実行します。jQueryオブジェクトの配列のパフォーマンス

var ids = ['abc', 'def', 'zyx'] 

// the following code happens every second 
for (var i = 0; i < ids.length; i++) { 
    el = $("#" + ids[i]) 
    // do stuff with el 
} 

私の質問:私は、次の操作を実行するために顕著なパフォーマンスヒットや改善を被る:

var ids = [] 
ids.push($("#abc")) 
ids.push($("#def")) 
ids.push($("#zyx")) 

for (var i = 0; i < ids.length; i++) { 
    el = ids[i] 
    // do stuff with el 
} 

答えて

0

あなたは推測する必要はありません - なぜ、create a jsPerf test case

この変更によって、パフォーマンスが大幅に向上します。常に同じ要素のjQueryオブジェクトを再構築する必要はありません。

私の助言:keep things DRY — cache everything that can be reused

はまた、その代わりに注意してください:

var ids = []; 
ids.push($("#abc")); 
ids.push($("#def")); 
ids.push($("#zyx")); 

あなただけ行うことができます:

var ids = [ $("#abc"), $("#def"), $("#zyx") ]; 

これは、いくつかの関数呼び出しを節約できます。

+0

ありがとうございました。私は、配列にjqueryオブジェクトを格納するオーバーヘッドについてはわかりませんでした。 –

+0

-1私はこれをdownvoteしなければなりません。なぜなら、それは間違いなく性能を大幅に向上させないからです。改善があり、それはやりがいがあるが、まだまだ気づいていない。 – Guffa

+1

私は大したことではないと理解することができますが、それは好ましい方法のようです。プラス私jsPerfについて知りませんでしたので、私はそれが有益な答えであることがわかりました。 –

2

あなたはどの顕著なパフォーマンスの成長は見られませんが、それはちょうど良い習慣である - にあなたは一度だけどこかに保管することができる限り、物を2回要求しないでください。

だから私の最後のアドバイス:キャッシュのjQueryオブジェクトは一度だけ、その仕事の後のjqueryの配列とは、あなたがループの外にいくつかの作業を移動し、一度だけそれをやっているようあなたは、若干の改善を得るでしょう

1

オブジェクト。

ちょうど3つの項目については、1秒に1回ほどの差はほとんどないでしょう。 idで要素を見つけるのは簡単ですが、ブラウザにはそれ専用のメソッドがあり、jQueryオブジェクトを作成することはあまり効果がありません。

+0

確かに、20程度になる可能性があります。クライアントのハードウェアを制御できないときは少しずつ役立ちます。 –

+0

@JeffV:20人ほどでさえ、それほど大した仕事ではありません。まともなコンピュータの最近のブラウザでは、1秒間に約1000回の操作が可能です。パフォーマンステストをしましたが、違いがあまり大きくないことがわかりました。 http://jsperf.com/precreate-jquery-objects – Guffa

関連する問題