これに対する明確な答えはありません:last
が、使用しているセレクターに関しては、セレクター API 標準の独自の拡張機能です。.querySelectorAll
このため、ネイティブメソッドでの使用は有効ではありません。
Sizzle が行うことは、基本的にセレクターを で使用しようとすること.querySelectorAll
です。無効なセレクターが原因で例外がスローされた場合、純粋な JavaScript ベースの DOM 選択/フィルタリングがデフォルトになります。
これは、次のようなセレクターを含める:last
と、ネイティブ コードで DOM 選択の速度が向上しないことを意味します。
さらに、ID や要素名など、セレクターが非常に単純な場合は、ネイティブのgetElementById
とgetElementsByTagName
が使用されるように最適化が組み込まれています。これは非常に高速です。通常は よりもさらに高速ですquerySelectorAll
。
また、この.last()
メソッドはすべてのアイテムをフィルタリングするのではなく、コレクションの最後のアイテムを取得するだけなので、これは Sizzle フィルターが通常行っていることです(少なくとも以前はそうでした)。
IMO、独自のものには近づかないでください。現在、これ.querySelectorAll
はかなり普及しており、標準に準拠したセレクターのみを使用することには真の利点があります。DOM 選択後にさらにフィルタリングを行います。
の場合$("#vacations").find("li")
、中間結果は気にしないでください。これは をgetElementById
続けて使用しgetElementsByTagName
、非常に高速になります。
速度が非常に気になる場合は、jQuery の使用を減らし、DOM を直接使用してください。
現在、 のようなセレクターのドキュメントには:last
、パフォーマンスの低下について警告するメモがあります。
:last は jQuery 拡張機能であり、CSS 仕様の一部ではないため、ネイティブ DOMメソッド:last
によって提供されるパフォーマンスの向上を利用するクエリを使用することはできません。querySelectorAll()
を使用して要素を選択するときに最高のパフォーマンスを実現するには:last
、最初に純粋な CSS セレクターを使用して要素を選択し、次に を使用します.filter(":last")
。
しかし、私はそれ.filter(":last")
が良い代用品になることに同意しません. .last()
セットをフィルタリングする代わりに、要素を直接ターゲットにするようなメソッドの方がはるかに優れています。標準に準拠していないセレクターを使い続けてほしいという気持ちがあります。IMO、あなたはそれらを忘れたほうがいいです.