Apakah ada peningkatan kinerja ketika meningkatkan kekhususan dalam pengikatan acara yang didelegasikan dengan .on()
?
Bagaimana cara seseorang menguji ini?
Misalnya, apakah pernyataan kedua lebih berkinerja dibandingkan pernyataan pertama:
$('.foo').on('mouseenter', ':has(.other)', function (e) {
console.log(e);
});
$('.bar').on('mouseenter', 'button:has(.other)', function (e) {
console.log(e);
});
$('.foo').on('mouseenter', ':has(.other)', function (e) {
console.log(e);
});
$('.bar').on('mouseenter', 'button:has(.other)', function (e) {
console.log(e);
});
.foo, .bar {
margin: 2em auto;
text-align: center;
}
<div class="foo">
<button type="button">Hello
<span class="other">World</span>
</button>
</div>
<div class="bar">
<button type="button">Hello
<span class="other">World</span>
</button>
</div>
Kekhawatiran utama saya adalah bahwa mendengarkan mouseenter
acara dengan delegasi akan menguras kinerja dan apakah ada cara untuk menguji kinerja pada jenis pengendali acara ini.
Perbarui
Saya harus mengklarifikasi bahwa saya tidak ingin memahami implikasi kinerja dari penggunaan delegasi secara umum. Saya berharap untuk memahami implikasi kinerja menggunakan delegasi dengan mouseenter
selama interaksi pengguna (saat mouse pengguna memasukkan elemen yang didelegasikan dan tidak didelegasikan dalam elemen terikat) dan jika ada peningkatan kinerja dengan menggunakan pemilih yang lebih spesifik untuk delegasi .
Kecenderungan saya adalah berasumsi tidak ada karena setiap peristiwa harus meluap ke elemen terikat sebelum diperiksa terhadap pemilih yang didelegasikan.
Tapi apakah ada cara untuk mengujinya?
mouseenter
dan apakah ada peningkatan kinerja dengan menggunakan pemilih yang lebih spesifik untuk delegasi. Kecenderungan saya adalah berasumsi tidak ada karena setiap peristiwa harus meluap ke elemen terikat sebelum diperiksa terhadap pemilih yang didelegasikan. Tapi apakah ada cara untuk mengujinya? - person gfullam   schedule 13.02.2015:has
dalam panggilanclosest
(seperti yang dilakukanon
di belakang layar) akan menghasilkan kinerja yang menyedihkan. Saya akan mengujibutton
di pemilih dan kemudian menggunakan metode.has()
di panggilan balik. - person lonesomeday   schedule 13.02.2015:has
pemilih tidak ada di Anda string pemilih. Ini adalah pemilih jQuery, bukan browser asli, sehingga sangat lambat. Anda menggunakannya pada setiap elemen di pohon. Jika Anda melakukan pengujian lain, misalnyabutton
, lalu gunakan.has
fungsi untuk menguji elemen tersebut, elemen tersebut akan memiliki kinerja yang jauh lebih baik karena dapat menggunakan kemampuan bawaan browser dengan lebih baik. - person lonesomeday   schedule 13.02.2015:has
karena Anda tidak dapat menghubungkan.has
dengan penyeleksi yang didelegasikan - itu bisa hanya rantai ke elemen DOM yang ada dan pada saat pengikatan, elemen tersebut tidak ada. Karena penggunaan:has
saya khawatir akan menemukan peningkatan kinerja lainnya. Penting juga bagi saya untuk memahami apa yang terjadi dan bagaimana menguji kinerja dalam situasi ini. - person gfullam   schedule 13.02.2015:has
dari pemilih dan melakukan tes di panggilan balik acara; itu akan memiliki kinerja yang jauh lebih baik. Lihat kedua contoh ini: keduanya setara secara fungsional, namun performa yang pertama jauh lebih baik. - person lonesomeday   schedule 13.02.2015:has
di pemilih lebih sering (dalam pengujian berulang) lebih baik daripada menggunakan.has
di handler; hal ini juga menunjukkan bahwa peningkatan spesifisitas, seperti padabutton:has
pada pemilih, secara konsisten meningkatkan kinerja. Lihat: jsperf.com/has-filter-in-delegated-event-selector - person gfullam   schedule 03.05.2015