Bagaimana saya bisa mengetahui metode mana yang terbaik untuk suatu situasi? Adakah yang bisa memberikan beberapa contoh untuk mengetahui perbedaan dalam hal fungsionalitas dan kinerja?
jquery
ajax
xmlhttprequest
Rodrigues
sumber
sumber
Jawaban:
XMLHttpRequest
adalah objek browser mentah yang dibungkus jQuery menjadi bentuk yang lebih dapat digunakan dan disederhanakan serta fungsionalitas yang konsisten lintas browser.jQuery.ajax
adalah pemohon Ajax umum di jQuery yang dapat melakukan semua jenis dan permintaan konten.jQuery.get
danjQuery.post
di sisi lain hanya dapat mengeluarkan permintaan GET dan POST. Jika Anda tidak tahu apa ini, Anda harus memeriksa protokol HTTP dan belajar sedikit. Secara internal kedua fungsi ini digunakanjQuery.ajax
tetapi mereka menggunakan pengaturan khusus yang tidak perlu Anda atur sendiri sehingga menyederhanakan permintaan GET atau POST dibandingkan dengan menggunakanjQuery.ajax
. GET dan POST menjadi metode HTTP yang paling banyak digunakan (dibandingkan dengan DELETE, PUT, HEAD atau bahkan eksotik lain yang jarang digunakan).Semua fungsi jQuery menggunakan
XMLHttpRequest
objek di latar belakang, tetapi menyediakan fungsionalitas tambahan yang tidak harus Anda lakukan sendiri.Pemakaian
Jadi jika Anda menggunakan jQuery, saya sangat menyarankan agar Anda menggunakan fungsionalitas jQuery saja . Lupakan
XMLHttpRequest
sama sekali. Gunakan variasi fungsi permintaan jQuery yang sesuai dan dalam semua kasus lainnya gunakan$.ajax()
. Jadi jangan lupa ada fungsi terkait jQuery Ajax umum lainnya untuk$.get()
,$.post()
dan$.ajax()
. Anda bisa saja menggunakan$.ajax()
untuk semua permintaan Anda, tetapi Anda harus menulis lebih banyak kode, karena perlu lebih banyak opsi untuk memanggilnya.Analogi
Ini seperti Anda dapat membeli sendiri sebuah mesin mobil sehingga Anda harus membuat seluruh mobil di sekitarnya dengan kemudi, rem, dll. Produsen mobil memproduksi mobil yang sudah jadi, dengan antarmuka yang ramah (pedal, roda kemudi, dll.) jadi Anda tidak harus melakukan semuanya sendiri.
sumber
$.post
dan$.get
satu-satunya hal yang lebih lambat adalah sejumlah kecil kode sebelum$.ajax
dipanggil. Tetapi jika Anda menulis rutinitas Anda sendiri menggunakan XHR secara langsung, semuanya bisa sedikit dioptimalkan tetapi bisa lebih bermasalah. Saya sarankan Anda tetap berada di sisi jQuery. Ini akan membuat hidup Anda lebih mudah. Dan mengingat fakta bahwa panggilan asinkron memakan waktu lebih lama daripada kode yang mengeluarkannya, Anda mungkin tidak akan melihat perbedaan yang jelas antara panggilan-panggilan ini.$.ajax
untuk membuat panggilan Anda konsisten di mana saja jika Anda mau. Selama Anda tidak menggunakan XHR secara langsung, Anda baik melakukannya dengan cara apa pun.Masing-masing menggunakan XMLHttpRequest. Inilah yang digunakan browser untuk membuat permintaan. jQuery hanyalah pustaka JavaScript dan metode $ .ajax digunakan untuk membuat XMLHttpRequest.
$ .post dan $ .get hanyalah versi singkat dari
$.ajax
. Mereka melakukan hampir semua hal yang sama tetapi membuatnya lebih cepat untuk menulis permintaan AJAX -$.post
membuat permintaan HTTP POST dan$.get
membuat permintaan HTTP GET.sumber
GET
permintaan akan mengirimkan semua data dalam string URL - yang dapat dibatasi oleh klien / server ( stackoverflow.com/questions/2659952/... ). SebuahPOST
permintaan mengirimkan semua data di header, sehingga batas ukuran URL seharusnya tidak menjadi masalah (kecuali jika Anda memiliki benar-benar file yang panjang dan nama folder untuk naskah Anda!).GET
. Jika Anda ingin mengirim sesuatu (mis. Memposting tweet) maka gunakanPOST
,jQuery.get
adalah pembungkus untukjQuery.ajax
, yang merupakan pembungkus XMLHttpRequest.XMLHttpRequest dan Fetch API (eksperimental saat ini) adalah satu-satunya di DOM, jadi seharusnya yang tercepat.
Saya melihat banyak informasi yang tidak akurat lagi, jadi saya membuat halaman pengujian di mana siapa pun dapat menguji versi dari versi mana yang terbaik setiap saat:
https://jsperf.com/xhr-vs-jquery-ajax-vs-get-vs-fetch
Dari pengujian saya hari ini menunjukkan bahwa hanya jQuery yang bukan solusi yang bersih atau bahkan cepat, hasil untuk saya di seluler atau desktop menunjukkan bahwa jQuery setidaknya 80% lebih lambat dari XHR2, jika Anda menggunakan terlalu banyak ajax, di seluler, akan memakan banyak waktu untuk memuat situs sederhana.
Penggunaannya sendiri juga ada di tautan.
sumber
jQuery.post dan jQuery.get mensimulasikan pemuatan halaman biasa, artinya, Anda mengklik tombol kirim dan ini akan membawa Anda ke halaman baru (atau memuat ulang halaman yang sama). posting dan dapatkan sedikit perbedaan dalam cara pengiriman data ke server (artikel bagus tentang itu dapat ditemukan di sini .
jQuery.ajax dan XMLHttpRequest adalah pemuatan halaman yang mirip dengan post dan get, kecuali halaman tersebut tidak berubah. Informasi apa pun yang dikembalikan server dapat digunakan oleh javascript secara lokal untuk digunakan dengan cara apa pun, termasuk memodifikasi tata letak halaman. Mereka biasanya digunakan untuk melakukan pekerjaan asinkron sementara pengguna masih dapat menavigasi halaman. Contoh bagusnya adalah kemampuan pelengkapan otomatis dengan memuat secara dinamis dari nilai database untuk melengkapi bidang teks. Perbedaan mendasar antara jQuery.ajax dan XMLHttpRequest adalah bahwa jQuery.ajax menggunakan XMLHttpRequest untuk mencapai efek yang sama tetapi dengan antarmuka yang lebih sederhana. Jika Anda menggunakan jQuery, saya akan mendorong Anda untuk tetap menggunakan jQuery.ajax.
sumber
Posting lama. tapi tetap ingin menjawab, satu perbedaan yang saya hadapi saat bekerja dengan Web Workers (javascript)
pekerja web tidak dapat memiliki akses tingkat UI. Itu berarti Anda tidak dapat mengakses elemen DOM apa pun dalam kode JavaScript yang ingin Anda jalankan menggunakan pekerja web. Objek seperti jendela, dokumen, dan induk tidak dapat diakses di kode pekerja web.
Seperti yang kita ketahui pustaka jQuery terikat dengan DOM HTML, dan mengizinkannya akan melanggar aturan "tidak ada akses DOM". Ini bisa sedikit menyakitkan karena metode seperti jQuery.ajax, jQuery.post, jQuery.get tidak dapat digunakan pada pekerja web. Untungnya, Anda bisa menggunakan objek XMLHttpRequest untuk membuat permintaan Ajax.
sumber
Sejauh metode jQuery berjalan,
.post
dan.get
cukup dilakukan secara.ajax
internal, tujuannya adalah untuk mengabstraksi beberapa opsi yang tidak perlu.ajax
dan menyediakan beberapa default yang sesuai untuk jenis permintaan itu masing-masing.Saya ragu ada banyak perbedaan kinerja antara ketiganya.
The
.ajax
Metode itu sendiri tidak XMLHttpRequest, itu akan sangat dioptimalkan sesuai sisa jQuery, tapi mungkin tidak akan seefisien jika Anda disesuaikan seluruh interaksi sendiri .. tapi itulah perbedaan antara menulis banyak kode atau menulisjQuery.ajax
.sumber