Untuk memilih simpul anak di jQuery seseorang dapat menggunakan anak-anak () tetapi juga menemukan ().
Sebagai contoh:
$(this).children('.foo');
memberikan hasil yang sama seperti:
$(this).find('.foo');
Sekarang, opsi mana yang paling cepat atau disukai dan mengapa?
jquery
jquery-selectors
Bart
sumber
sumber
.find()
dan.children()
tidak sama. Yang terakhir hanya melakukan perjalanan satu tingkat ke bawah pohon DOM, seperti pemilih anak.find()
hampir selalu lebih cepat.Jawaban:
children()
hanya melihat anak-anak langsung dari node, sementarafind()
melintasi seluruh DOM di bawah node, jadichildren()
harus lebih cepat diberikan implementasi yang setara. Namun,find()
menggunakan metode peramban asli , sementarachildren()
menggunakan JavaScript yang ditafsirkan dalam peramban. Dalam percobaan saya tidak ada banyak perbedaan kinerja dalam kasus-kasus tertentu.Yang digunakan tergantung pada apakah Anda hanya ingin mempertimbangkan keturunan langsung atau semua node di bawah ini dalam DOM, yaitu, pilih metode yang sesuai berdasarkan hasil yang Anda inginkan, bukan kecepatan metode. Jika kinerja benar-benar masalah, maka bereksperimenlah untuk menemukan solusi terbaik dan menggunakannya (atau lihat beberapa tolok ukur dalam jawaban lain di sini).
sumber
Tes jsPerf ini menunjukkan bahwa find () lebih cepat. Saya membuat tes yang lebih menyeluruh , dan sepertinya masih menemukan () mengungguli anak-anak ().
Pembaruan: Sesuai komentar tvanfosson, saya membuat test case lain dengan 16 level sarang. find () hanya lebih lambat ketika menemukan semua div yang mungkin, tetapi find () masih mengungguli anak-anak () ketika memilih level divs pertama.
anak-anak () mulai mengungguli find () ketika ada lebih dari 100 level sarang dan sekitar 4000+ divs untuk find () untuk dilintasi. Ini kasus uji dasar, tetapi saya masih berpikir bahwa find () lebih cepat daripada anak-anak () dalam banyak kasus.
Saya melangkah melalui kode jQuery di Alat Pengembang Chrome dan memperhatikan bahwa anak-anak () secara internal membuat panggilan ke saudara (), memfilter (), dan melewati beberapa regex daripada yang ditemukan ().
find () dan anak-anak () memenuhi kebutuhan yang berbeda, tetapi dalam kasus di mana find () dan anak-anak () akan menampilkan hasil yang sama, saya akan merekomendasikan menggunakan find ().
sumber
Berikut ini tautan yang memiliki tes kinerja yang dapat Anda jalankan.
find()
sebenarnya sekitar 2 kali lebih cepat daripadachildren()
.sumber
var $test = $list.find('.test');
mana $ list adalah objek jQuery. jsperf.com/jquery-selectors-context/101Itu tidak akan memberikan hasil yang sama: Anda
find()
akan mendapatkan simpul turunan , sedangkan Andachildren()
hanya akan mendapatkan anak - anak langsung yang cocok.Pada satu titik,
find()
jauh lebih lambat karena harus mencari setiap simpul keturunan yang bisa menjadi pasangan, dan bukan hanya anak-anak langsung. Namun, ini tidak lagi benar;find()
jauh lebih cepat karena menggunakan metode browser asli.sumber
find()
jauh lebih lambat pada saat itu!Tak satu pun dari jawaban yang lain ditangani dengan kasus menggunakan
.children()
atau.find(">")
untuk hanya mencari anak-anak langsung dari elemen induk. Jadi, saya membuat tes jsPerf untuk mengetahuinya , menggunakan tiga cara berbeda untuk membedakan anak-anak.Seperti yang terjadi, bahkan ketika menggunakan pemilih "" ekstra,
.find()
masih jauh lebih cepat daripada.children()
; pada sistem saya, 10x jadi.Jadi, dari sudut pandang saya, tampaknya tidak ada banyak alasan untuk menggunakan mekanisme penyaringan
.children()
sama sekali.sumber
Untuk menyederhanakan:
find()
- Cari melalui anak elemen, cucu, buyut, elemen yang cocok ... semua level di bawah.children()
- Cari melalui anak-anak elemen yang cocok saja (satu tingkat ke bawah).sumber