Baru-baru ini saya telah melakukan banyak jendela pop-up dan apa yang tidak, yang saya gunakan jQuery. Metode yang saya gunakan untuk membuat elemen baru pada halaman telah sangat sejalan:
$("<div></div>");
Namun, saya merasa ini bukan metode terbaik atau paling efisien untuk melakukan ini. Apa cara terbaik untuk membuat elemen di jQuery dari perspektif kinerja?
Jawaban ini memiliki tolok ukur untuk saran di bawah ini.
javascript
jquery
html
dom
Darko Z
sumber
sumber
Jawaban:
Saya menggunakan
$(document.createElement('div'));
Benchmarking menunjukkan teknik ini adalah yang tercepat. Saya berspekulasi ini karena jQuery tidak harus mengidentifikasinya sebagai elemen dan membuat elemen itu sendiri.Anda harus benar-benar menjalankan benchmark dengan mesin Javascript yang berbeda dan menimbang audiens Anda dengan hasilnya. Buat keputusan dari sana.
sumber
appendTo
, ... Karena komentarnya jelas salah, saya telah menghapusnya.secara pribadi saya sarankan (agar mudah dibaca):
beberapa angka pada saran sejauh ini (safari 3.2.1 / mac os x):
sumber
Pertanyaan:
Menjawab:
Karena sudah sekitar
jQuery
maka saya pikir lebih baik menggunakan pendekatan (bersih) ini (Anda menggunakan)DEMO.
Dengan cara ini, Anda bahkan dapat menggunakan penangan acara untuk elemen tertentu seperti
DEMO.
Tetapi ketika Anda berurusan dengan banyak elemen dinamis, Anda harus menghindari menambahkan peristiwa
handlers
dalam elemen tertentu, sebagai gantinya, Anda harus menggunakan event handler yang didelegasikan, sepertiDEMO.
Jadi, jika Anda membuat dan menambahkan ratusan elemen dengan kelas yang sama, yaitu (
myClass
) maka lebih sedikit memori akan digunakan untuk penanganan acara, karena hanya ada satu penangan yang akan melakukan pekerjaan untuk semua elemen yang dimasukkan secara dinamis.Pembaruan: Karena kita dapat menggunakan pendekatan berikut untuk membuat elemen dinamis
Tetapi
size
atribut tidak dapat diatur menggunakan pendekatan ini menggunakanjQuery-1.8.0
atau yang lebih baru dan ini adalah laporan bug lama , lihat contoh ini menggunakanjQuery-1.7.2
yang menunjukkan bahwasize
atribut diatur untuk30
menggunakan contoh di atas tetapi menggunakan pendekatan yang sama kita tidak dapat mengatursize
atribut menggunakanjQuery-1.8.3
, di sini adalah biola yang tidak bekerja . Jadi, untuk mengatursize
atribut, kita bisa menggunakan pendekatan berikutAtau yang ini
Kita bisa lulus
attr/prop
sebagai objek anak-anak tetapi berfungsi dalamjQuery-1.8.0 and later
versi memeriksa contoh ini tetapi tidak akan berhasil masukjQuery-1.7.2 or earlier
(tidak diuji di semua versi sebelumnya).BTW, diambil dari
jQuery
laporan bugMereka menyarankan untuk menggunakan pendekatan berikut ( bekerja di yang sebelumnya juga, diuji dalam
1.6.4
)Jadi, lebih baik menggunakan pendekatan ini, IMO. Pembaruan ini dibuat setelah saya membaca / menemukan jawaban ini dan dalam jawaban ini menunjukkan bahwa jika Anda menggunakan
'Size'(capital S)
alih-alih'size'
itu hanya akan berfungsi dengan baik , bahkan diversion-2.0.2
Baca juga tentang prop , karena ada perbedaan
Attributes vs. Properties
,, itu bervariasi melalui versi.sumber
$('<div>', {...})
Anda melewati objek yang berisi semua atribut dan di dalam$('<div>').attr({...})
Anda membuat elemen tanpa atribut apa pun selain mengatur atribut menggunakanattr()
metode nanti.jQuery.com
situs web bisa bermanfaat @RafaelRuizTabares, atau google :-)Sebenarnya, jika Anda melakukannya
$('<div>')
, jQuery juga akan digunakandocument.createElement()
.(Lihat saja pada baris 117 ).
Ada beberapa fungsi-panggilan overhead, tetapi kecuali kinerja sangat penting (Anda membuat ratusan [ribuan] elemen), tidak ada banyak alasan untuk kembali ke DOM biasa .
Hanya membuat elemen untuk halaman web baru mungkin merupakan kasus di mana Anda akan tetap berpegang pada cara jQuery melakukan sesuatu.
sumber
Jika Anda memiliki banyak konten HTML (lebih dari sekadar satu div), Anda dapat mempertimbangkan untuk membuat HTML ke dalam halaman di dalam wadah tersembunyi, kemudian memperbaruinya dan membuatnya terlihat saat dibutuhkan. Dengan cara ini, sebagian besar markup Anda dapat dipra-parsing oleh browser dan menghindari macet oleh JavaScript saat dipanggil. Semoga ini membantu!
sumber
Ini bukan jawaban yang benar untuk pertanyaan itu tetapi saya tetap ingin membagikan ini ...
Menggunakan just
document.createElement('div')
and skipping JQuery akan banyak meningkatkan kinerja ketika Anda ingin membuat banyak elemen dengan cepat dan menambahkan ke DOM.sumber
Saya pikir Anda menggunakan metode terbaik, meskipun Anda bisa mengoptimalkannya untuk:
sumber
Anda tidak perlu kinerja mentah dari operasi yang akan Anda lakukan sangat jarang dari sudut pandang CPU.
sumber
jQuery(html :: String)
metode ini baik-baik saja. Kecuali situasi yang sangat tidak biasa, salah satu akan tidak mungkin untuk mencapai yang lebih baik dirasakan kinerja. Habiskan energi optimisasi pada kasing yang dapat menggunakannya. Selain itu, jQuery dioptimalkan untuk kecepatan dalam banyak hal. Lakukan hal-hal yang waras dengan itu, dan percaya-tetapi-verifikasi untuk menjadi cepat.Anda harus memahami bahwa pentingnya kinerja pembuatan elemen tidak relevan dalam konteks menggunakan jQuery.
Ingat, tidak ada tujuan nyata untuk membuat elemen kecuali Anda benar-benar akan menggunakannya.
Anda mungkin tergoda untuk menguji kinerja sesuatu seperti
$(document.createElement('div'))
vs.$('<div>')
dan mendapatkan keuntungan kinerja yang hebat dari menggunakan$(document.createElement('div'))
tetapi itu hanya elemen yang belum ada dalam DOM.Namun, pada akhirnya, Anda tetap ingin menggunakan elemen tersebut sehingga tes sesungguhnya harus mencakup f.ex. .appendTo ();
Mari kita lihat, jika Anda menguji yang berikut terhadap satu sama lain:
Anda akan melihat hasilnya akan bervariasi. Terkadang satu cara lebih baik kinerjanya daripada yang lain. Dan ini hanya karena jumlah tugas latar belakang di komputer Anda berubah seiring waktu.
Uji diri Anda di sini
Jadi, pada akhirnya, Anda ingin memilih cara terkecil dan paling mudah dibaca untuk membuat elemen. Dengan begitu, setidaknya, file skrip Anda akan sekecil mungkin. Mungkin faktor yang lebih signifikan pada titik kinerja daripada cara membuat elemen sebelum Anda menggunakannya di DOM.
sumber
document.getElementById('target).appendChild(document.createElement('div'));
Seseorang telah membuat patokan: setara dengan jQuery document.createElement?
$(document.createElement('div'))
adalah pemenang besar.sumber
Satu hal yang lebih mudah dilakukan:
Kemudian untuk melakukan semua itu dengan panggilan jquery.
sumber
Saya menggunakan jquery.min v2.0.3. Bagi saya lebih baik menggunakan yang berikut:
sebagai berikut:
Waktu pemrosesan kode pertama jauh lebih rendah daripada kode kedua.
sumber