Di jQuery, apakah disarankan untuk memeriksa apakah sebuah kelas sudah ditetapkan ke sebuah elemen sebelum menambahkan kelas itu? Apakah itu akan berpengaruh sama sekali?
Sebagai contoh:
<label class='foo'>bar</label>
Jika ragu apakah kelas baz
telah ditugaskan label
, apakah ini pendekatan terbaik:
var class = 'baz';
if (!$('label').hasClass(class)) {
$('label').addClass(class);
}
atau apakah ini cukup:
$('label').addClass('baz');
.hasClass
hanya ketika saya perlu memeriksa apakah ada kelas, jika saya hanya perlu menetapkan kelas - saya gunakan.addClass
. jQuery tidak menduplikasi kelasJawaban:
Telepon saja
addClass()
. jQuery akan melakukan pemeriksaan untuk Anda. Jika Anda memeriksanya sendiri, Anda menggandakan pekerjaan, karena jQuery masih akan menjalankan pemeriksaan untuk Anda.sumber
Pemeriksaan sederhana di konsol akan memberi tahu Anda bahwa melakukan panggilan
addClass
beberapa kali dengan kelas yang sama aman.Secara khusus Anda dapat menemukan cek di sumbernya
sumber
Pertanyaan ini menarik perhatian saya menyusul pertanyaan lain yang ditandai sebagai duplikat dari pertanyaan ini .
Jawaban ini merangkum jawaban yang diterima dengan sedikit detail tambahan.
Anda mencoba untuk mengoptimalkan dengan menghindari pemeriksaan yang tidak perlu, dalam hal ini berikut adalah faktor-faktor yang harus Anda waspadai:
class="collapse"
HTML, memanggilElement.classList.add("collapse");
tidak akan menambahkan kelas penciutan tambahan . Saya tidak tahu implementasi yang mendasarinya, tapi saya kira itu sudah cukup baik.addClass
danremoveClass
implementasi (aku memeriksa kode sumber ). SebabaddClass
, setelah melakukan beberapa pemeriksaan dan jika ada kelas, JQuery tidak mencoba menambahkannya lagi. Demikian pula untukremoveClass
, JQuery melakukan sesuatu di sepanjang bariscur.replace( " " + clazz + " ", " " );
yang akan menghapus kelas hanya jika ada.Perlu diperhatikan, JQuery melakukan beberapa pengoptimalan dalam
removeClass
implementasinya untuk menghindari rendering ulang yang tidak berguna. Ini berjalan seperti iniJadi, pengoptimalan mikro terbaik yang dapat Anda lakukan adalah dengan tujuan menghindari overhead panggilan fungsi dan pemeriksaan implementasi terkait.
Katakanlah Anda ingin mengubah nama kelas
collapse
, jika Anda benar-benar mengontrol kapan kelas ditambahkan atau dihapus, dan jikacollapse
kelas tersebut awalnya tidak ada, Anda dapat mengoptimalkan sebagai berikut:Selain itu, jika Anda mengubah kelas karena perubahan posisi gulir, Anda sangat disarankan untuk membatasi penanganan acara gulir.
sumber
sumber