2012-08-31 7 views
6

私は本当にたくさんの子要素(1000s)を持つ親要素を持っています。最後の子要素へのハンドルを得る最速の可能な方法を探しています。私が見つけたオプションは次のとおりです。

$('.parent .child').last() 

$('.parent .child:last') 

1は、ブラウザ間で確実に速くされている任意の意見?

EDIT

私はこのアウトを測定するためにjsfiddleにテストを書いて、それは差がほとんど無視できる判明。 .last()はパフォーマンスが良くなっていますが、その差はごくわずかです。だから私は:最後のセレクタでも、それは実際に要素の全体のリストを取得して、最後の要素を返すと思いますか?信じられない。

フィドル:http://jsfiddle.net/techfoobar/GFb9f/8/

+0

は、このような質問のためjsperfテストケースを考えてみましょう。.. –

+1

重複:http://stackoverflow.com/questions/4262928/jquery-what-is-faster-selectors-or-methods –

+0

@pst - jsperfを使用したことがありません。指摘してくれてありがとう。私はそれを測定するためにフィドルを作成しました。更新された質問にリンクしてください。 – techfoobar

答えて

5

現代の多くのブラウザはdocument.querySelectorAll()をサポートしているのであるようセレクタ文字列がを渡すことができ、その後、最後にマッチしたアイテムはポップとして$('.parent .child').last()は、より高速にする必要があります。

後者の場合、:lastは標準擬似セレクタではなく、セレクタ文字列をチャンクしてマッチングを開始する必要があります。

全体的には、私はあなたが最も読めると思われるものを使用します。これを最適化するには、まずアプリケーションにパフォーマンスの問題があることを確認し、このセレクタをボトルネックと判断してください。

+0

セレクタは、そのままセレクタを渡すことが可能かどうかをどのように判断しますか? – zerkms

+0

@zerkmsメモリから、try/catchで呼び出しをラップし、その文字列解析をcatchブロックで行います。私は最近、ソースをチェックしていない。 – alex

+0

@ zerkms-私はそれがソースにあると確信しています... – RobG

1

あなたはこれを見なければなりませんperformance test

更新日:このrelated questionには既に良い回答があります。

+0

http://jsperf.com/selecting-the-first - 既に良いものがあります – zerkms

+0

Thanks @RobinMaben - リンク用です。非常に有益。私は可読性とパフォーマンスの味に合っているので、私は.last()と一緒に行くと思います。 – techfoobar

+1

@techfoobar:私はあなたのブログをスキャンしました。素敵なもの。 * '読むことができないコードは書かれてはいけません '*と完全に同意する*。 :) –

関連する問題