2016-04-13 8 views
0

jquery data()を使用して値を読み取るときに(パフォーマンス/ CPU)エフォートが適用されていますか?

だから... ...私は、次の

<a href='#' class='ui-btn' data-counter='1234'>test</a> 

に似たいくつかのリンク/ボタン、リンクをクリックすると、イベントが実行されています。私は、イベントの処理中にカウンタの値を2回以上必要とします。私はソースから毎回値を読んでください(したがって、$(this).data("counter")を使用)、または私の代わりにどこでも

var counter=$(this).data("counter"); 

と参照カウンタをすればよいですか?

答えて

1

それはあなた次第ですが、$(this).data("counter")に電話するたびに作業が必要です。それはおそらく問題ではありませんが、ローカルにそれをつかむことは、長い実行で入力し、奇数マイクロ秒を保存するために短くなります。


あなたが本当にdataの機能を必要としない限り、あなたの代わりにattrを使用したい場合があるので注意してください:+$(this).attr("data-counter")(冒頭+dataは、すべての桁の文字列であなたのためにする番号に文字列から変換) 。 dataではなく、アクセサーのdata-*属性で、その要素のjQueryのデータキャッシュのアクセサです。最初に要素で呼び出すと、キャッシュが作成され、要素のすべてのdata-*属性からデータが移入され、その時点でのコピーが保持されます。 (そしてさんdata値のコピーをが属性を変更しないセッターとしてそれを使用して、またあなたは要素の変化にdataを使用した後の属性を変更しない。)attr属性のためだけのアクセサです。

+1

ありがとうございました...私は以前、jQueryフォーラムで質問していましたが、.data()を使用するように言われましたが、オーバーヘッドは決して説明されませんでした。あなたの答えは、attrとデータを使い分けることの利点を説明しています。これのためにあなたに誇り! –

+0

@fiprojects:お手伝いします。 'data(" foo ")'は 'attr(" data-foo ")'の省略形に過ぎないと多くの人が思っています。 –

0

あなたは変数に値を格納した場合:

var counter=$(this).data("counter"); 

、その後:

counter++; 
... 
counter++; 

、その後、最後にもう一度、あなたのデータ属性を更新します。

$(this).data("counter", counter); 

ができより速くなる。

+0

ありがとうございますが、カウンタは大きな配列のレコード要素を参照し、インクリメントされません –

関連する問題