Saya memulai proyek dengan jQuery.
Apa jebakan / kesalahan / kesalahpahaman / penyalahgunaan / penyalahgunaan yang Anda miliki dalam proyek jQuery Anda?
javascript
jquery
flybywire
sumber
sumber
Jawaban:
Menjadi tidak menyadari kinerja hit dan over selector alih-alih menugaskan mereka ke variabel lokal. Sebagai contoh:-
Daripada:-
Atau bahkan lebih baik dengan rantai : -
Saya menemukan ini saat mencerahkan ketika saya menyadari bagaimana tumpukan panggilan bekerja.
Edit: saran yang dimasukkan dalam komentar.
sumber
var $label = $('#label');
Memahami cara menggunakan konteks. Biasanya, pemilih jQuery akan mencari seluruh dokumen:
Tetapi Anda dapat mempercepat dengan mencari dalam konteks:
sumber
[0]
.$('.myClass', ct);
atau jika Anda tahu ct adalah turunan dari jQuery, Anda dapat menggunakan findct.find(".myClass")
Jangan gunakan pemilih kelas kosong, seperti ini:
Ini pada akhirnya akan melihat setiap elemen untuk melihat apakah ia memiliki kelas "tombol".
Sebagai gantinya, Anda dapat membantu, seperti:
Saya belajar ini tahun lalu dari blog Rebecca Murphy
Update - Jawaban ini diberikan lebih dari 2 tahun yang lalu dan tidak benar untuk saat ini versi jQuery. Salah satu komentar termasuk tes untuk membuktikan ini. Ada juga versi terbaru dari tes yang menyertakan versi jQuery pada saat jawaban ini.
sumber
$('.b')
dapat digunakandocument.getElementsByClassName('b')
jika browser mendukungnya, tetapi melakukan$('a.b')
akan menyebabkannya mendapatkan semua elemen yang cocok dengan kelasb
dan kemudian mengonfirmasi bahwa mereka adalah jangkar dalam operasi dua tahap. Yang terakhir terdengar seperti lebih banyak pekerjaan bagiku. Untuk analogi kehidupan nyata, coba ini: Temukan semua kaus kaki di kamarku. Sekarang, buang yang tidak ada di lemari saya.Cobalah untuk membagi fungsi anonim sehingga Anda dapat menggunakannya kembali.
sumber
(anonymous)
. Baca lebih lanjut tentang tip ini di sini: stackoverflow.com/questions/182630/jquery-tips-and-tricks/…Saya telah melihat ratusan baris kode di dalam pernyataan ready doc. Jelek, tidak bisa dibaca, dan tidak mungkin dipertahankan.
sumber
Saat menggunakan
$.ajax
fungsi untuk permintaan Ajax ke server, Anda harus menghindari menggunakancomplete
acara untuk memproses data respons. Ini akan memecat apakah permintaan itu berhasil atau tidak.Daripada
complete
, gunakansuccess
.Lihat Acara Ajax dalam dokumen.
sumber
"Chaining" Animasi-acara dengan Callback.
Misalkan Anda ingin menghidupkan paragraf yang hilang setelah mengkliknya. Anda juga ingin menghapus elemen dari DOM sesudahnya. Anda mungkin berpikir Anda dapat dengan mudah mengaitkan metode ini:
Dalam contoh ini, .remove () akan dipanggil sebelum .fadeOut () telah selesai, menghancurkan efek gradasi-memudar Anda, dan hanya membuat elemen menghilang secara instan. Alih-alih, saat Anda ingin menjalankan perintah hanya setelah menyelesaikan sebelumnya, gunakan callback:
Parameter kedua .fadeOut () adalah fungsi anonim yang akan berjalan setelah animasi .fadeOut () selesai. Ini membuat pemudaran bertahap, dan penghapusan elemen berikutnya.
sumber
Jika Anda mengikat () acara yang sama beberapa kali, itu akan menyala beberapa kali. Saya biasanya selalu pergi
unbind('click').bind('click')
hanya untuk amansumber
Jangan menyalahgunakan plug-in.
Sebagian besar waktu Anda hanya perlu perpustakaan dan mungkin antarmuka pengguna. Jika Anda membuatnya sederhana kode Anda akan dapat dipertahankan dalam jangka panjang. Tidak semua plug-in didukung dan dipelihara, sebenarnya sebagian besar tidak. Jika Anda dapat meniru fungsionalitas menggunakan elemen inti saya sangat merekomendasikannya.
Plug-in mudah untuk dimasukkan ke dalam kode Anda, menghemat waktu Anda, tetapi ketika Anda akan membutuhkan sesuatu tambahan, itu ide yang buruk untuk memodifikasinya, karena Anda kehilangan kemungkinan pembaruan. Saat Anda menghemat di awal, Anda akan kehilangan nanti tentang mengubah plug-in yang sudah usang.
Pilih plug-in yang Anda gunakan dengan bijak. Terlepas dari perpustakaan dan antarmuka pengguna, saya selalu menggunakan $ .cookie , $ .form , $ .validate dan thickbox . Selebihnya saya lebih banyak mengembangkan plug-in saya sendiri.
sumber
Pitfall: Menggunakan loop bukan penyeleksi.
Jika Anda menemukan diri Anda meraih metode jQuery '.each' untuk beralih pada elemen DOM, tanyakan pada diri Anda apakah dapat menggunakan pemilih untuk mendapatkan elemen sebagai gantinya.
Informasi lebih lanjut tentang pemilih jQuery:
http://docs.jquery.com/Selector
Pitfall: JANGAN menggunakan alat seperti Firebug
Firebug praktis dibuat untuk debugging semacam ini. Jika Anda akan bergurau tentang DOM dengan Javascript, Anda memerlukan alat yang bagus seperti Firebug untuk memberi Anda visibilitas.
Informasi lebih lanjut tentang Firebug: http://getfirebug.com/
Gagasan hebat lainnya ada di episode Podcast Polimorfik ini: (jQuery Secrets dengan Dave Ward) http://polymorphicpodcast.com/shows/jquery/
sumber
Kesalahpahaman dalam menggunakan pengidentifikasi ini dalam konteks yang benar. Misalnya:
Dan inilah salah satu contoh bagaimana Anda bisa menyelesaikannya:
sumber
Hindari mencari melalui seluruh DOM beberapa kali. Ini adalah sesuatu yang benar-benar dapat menunda skrip Anda.
Buruk:
Baik:
Buruk:
Baik:
sumber
Selalu cache $ (ini) ke variabel yang bermakna terutama dalam .each ()
Seperti ini
sumber
$self
atau$this
jika Anda terlalu malas untuk memikirkan nama variabel yang baik.Mirip dengan apa yang dikatakan Repo Man, tetapi tidak cukup.
Ketika mengembangkan ASP.NET winforms, saya sering melakukannya
lupa tanda #. Bentuk yang benar adalah
sumber
Acara
tidak mengkloning salah satu peristiwa - Anda harus mengulang semuanya.
Sesuai JP clone (- clone ()) tidak mengulangi peristiwa jika Anda lulus benar.
sumber
Hindari beberapa kreasi objek jQuery yang sama
sumber
$this = $(this);
pada baris yang berbeda. Jika Anda dapat (tanpa membuat berantakan), melupakan$this
dan hanya rantai segalanya:$(this).fadeIn().fadeIn();
Saya mengatakan ini untuk JavaScript juga, tetapi jQuery, JavaScript tidak akan pernah menggantikan CSS.
Juga, pastikan situs tersebut dapat digunakan untuk seseorang dengan JavaScript dimatikan (tidak relevan hari ini dengan kembali pada hari itu, tetapi selalu menyenangkan untuk memiliki situs yang sepenuhnya dapat digunakan).
sumber
Membuat terlalu banyak manipulasi DOM. Meskipun metode .html (), .append (), .prepend (), dll. Sangat bagus, karena cara browser merender dan merender ulang halaman, menggunakannya terlalu sering akan menyebabkan perlambatan. Seringkali lebih baik untuk membuat html sebagai string, dan memasukkannya ke DOM satu kali, daripada mengubah DOM beberapa kali.
Dari pada:
Coba ini:
Atau bahkan ini ($ wrapper adalah elemen yang baru dibuat yang belum disuntikkan ke DOM. Menambahkan node ke div wrapper ini tidak menyebabkan perlambatan, dan pada akhirnya kami menambahkan $ wrapper ke $ parent, hanya menggunakan satu manipulasi DOM ):
sumber
Menggunakan ClientID untuk mendapatkan id "nyata" dari kontrol dalam proyek ASP.NET.
Juga, jika Anda menggunakan jQuery di dalam SharePoint Anda harus memanggil jQuery.noConflict ().
sumber
Melewati ID alih-alih objek jQuery ke fungsi:
Melewati set yang terbungkus jauh lebih fleksibel:
sumber
Penggunaan rantai yang berlebihan.
Lihat ini:
Penjelasan
sumber
Gunakan string akumulator-style
Menggunakan + operator, string baru dibuat dalam memori dan nilai gabungan ditetapkan untuknya. Hanya setelah ini hasilnya ditugaskan ke variabel. Untuk menghindari variabel perantara untuk hasil gabungan, Anda dapat langsung menetapkan hasil menggunakan + = operator. Lambat:
Lebih cepat:
Operasi primitif bisa lebih cepat daripada panggilan fungsi
Pertimbangkan untuk menggunakan operasi primitif alternatif di atas pemanggilan fungsi dalam loop dan fungsi kritis kinerja. Lambat:
Lebih cepat:
Baca Lebih Lanjut di Praktik Terbaik Kinerja JavaScript
sumber
Jika Anda ingin pengguna melihat entitas html di browser mereka, gunakan 'html' alih-alih 'teks' untuk menyuntikkan string Unicode, seperti:
sumber
dua sen saya)
Biasanya, bekerja dengan jquery berarti Anda tidak perlu khawatir tentang elemen DOM yang sebenarnya setiap saat. Anda dapat menulis sesuatu seperti ini -
$('div.mine').addClass('someClass').bind('click', function(){alert('lalala')})
- dan kode ini akan dijalankan tanpa ada kesalahan.Dalam beberapa kasus ini berguna, dalam beberapa kasus - tidak sama sekali, tetapi itu adalah fakta bahwa jquery cenderung, yah, ramah pertandingan kosong. Namun,
replaceWith
akan menimbulkan kesalahan jika seseorang mencoba menggunakannya dengan elemen yang bukan milik dokumen. Saya merasa agak kontra-intuitif.Perangkap lain adalah, menurut pendapat saya, urutan node dikembalikan oleh prevAll () method -
$('<div><span class="A"/><span class="B"/><span class="C"/><span class="D"/></div>').find('span:last-child').prevAll()
. Sebenarnya bukan masalah besar, tetapi kita harus mengingat fakta ini.sumber
Jika Anda berencana untuk Ajax dalam banyak data, misalnya, 1500 baris tabel dengan 20 kolom, maka jangan pernah berpikir untuk menggunakan jQuery untuk memasukkan data itu ke dalam HTML Anda. Gunakan JavaScript biasa. jQuery akan terlalu lambat pada mesin yang lebih lambat.
Juga, separuh waktu jQuery akan melakukan hal-hal yang akan membuatnya lebih lambat, seperti mencoba mengurai tag skrip dalam HTML yang masuk, dan menangani kebiasaan browser. Jika Anda ingin kecepatan penyisipan yang cepat, tetap menggunakan JavaScript biasa.
sumber
.innerHTML
akan cukup. Tetapi jika Anda membangun sesuatu seperti Gmail di mana pengguna menjaga tab terbuka selama berjam-jam, Anda hanya perlu menggigit peluru dan berurusan dengan kelambatan ekstra. Bagi yang penasaran, inilah yang dilakukan jQuery.html()
: james.padolsey.com/jquery/#v=1.4&fn=jQuery.fn.htmlMenggunakan jQuery dalam proyek kecil yang dapat diselesaikan hanya dengan beberapa baris JavaScript biasa.
sumber
couple of lines of ordinary JavaScript
Tentu tidak masalah. Tapi kapan itu terjadi begitu saja? Orang yang mengatakan "mengapa tidak menggunakan vanilla javascript ??" belum digigit cukup keras oleh IE belum ... dan belum lagi berapa banyak kode cruft dan boilerplate Anda harus menulis untuk melakukan hal-hal sederhana di JS tua biasa.Tidak memahami acara yang mengikat. JavaScript dan jQuery bekerja secara berbeda.
Dengan permintaan populer, sebuah contoh:
Di jQuery:
Tanpa jQuery:
Pada dasarnya kait yang diperlukan untuk JavaScript tidak lagi diperlukan. Yaitu menggunakan inline markup (onClick, dll) karena Anda bisa menggunakan ID dan kelas yang biasanya dimanfaatkan pengembang untuk keperluan CSS.
sumber