2011-01-19 5 views
1

これはどちらが速いのだろうかと疑問に思いますか?Jquery:もっと速いですか? .text()または.attr( 'id')?

if ($(this).text() == 'Test') 
{ 
    ... 
} 

または

if ($(this).attr('id') == 'Test') 
{ 
    ... 
} 

またはより高速な方法はありますか?

または両方が同じですか?

おかげで断然

+1

なぜ私はtext()とattr()を比較しているのかよくわかりません。関係はありません。 TextはHTMLのない要素の内容を返しますが、attrは要素の属性(idなど)を取得します。スピードの点では、ダイレクトはより速いです。アセンブリでそれを行うことができるなら、それは速くなります:) – Christian

+0

@Christian、私は彼がテキストまたはIDとしてデータを格納するオプションがあると思います。 –

+0

あなたの入力人に感謝!私のワークフローを整理しようとしています:) – David

答えて

3

最速はthis.id === 'Test'$(this).attr('id') == 'Test'の最適化されたバージョンになります。

これは、attrではなく、オブジェクトプロパティを使用し、正確な等価演算子===を使用することに注意してください。

NB ID番号の確認は、ブラウザの機能に応じてtext()(内部機能)によって内部的にすべての子ノードをループし、そのテキスト値を抽出するため、はるかに高速です。 IDを確認するには、1つの属性のみをチェックする必要があります。

+0

ああ、本当にありがとう、情報ありがとう!大変お世話になりました:) – David

1

loneomedayの回答に追加するには、正解は「問題ではありません」と考えられます。そうした場合、ビジターのブラウザでこのようなパフォーマンス重視のコードを実行するべきではないでしょうし、そのような方法で使用されているプロセッサ時間について不安を感じるかもしれません。あなたのコンピュータでJavaScriptが実行されないことを覚えておいてください。

+0

返信いただきありがとうございました。パフォーマンス重いコードを実行していないので、本当に不思議でした。 – David

0

単純なtestは、それらがほぼ同等に速いことを示しています。 text()のようにわずかにと速いです。

+1

実際は '.attr(id)'は、あなたのテストではほんのわずかですが、速いです。以前は同じミスを犯しましたが、報告された数字が大きいほど速くなりました。さらに、 '$(this) '内のノード数が1を超えて増えると、速度の差は誇張されます。 –

+0

リンクのおかげで、ここに投稿する前にそのようなものを見つけようとしていました;)テストを実行しました.attr( 'id')は.text()より22%速いと述べています。 – David

+0

Box9とDavid:Strange。私はChrome 8でtext()を(この特定のテストのために)7%高速化しました。はい、これはノードに子要素が含まれていない場合のみです。子要素はテキスト()をかなり遅くするはずです。 – Dogbert

関連する問題