XMLHttpRequest, jQuery.ajax, jQuery.post, jQuery.get arasındaki fark nedir


121

Bir durum için hangi yöntemin en iyi olduğunu nasıl öğrenebilirim? İşlevsellik ve performans açısından farkı bilmek için herhangi bir örnek verebilir misiniz?


4
Performanslarla ilgili olarak (zar zor yanıtlandı): jsperf'e göre normal XMLHttpRequest'i kullanmak jQuery'den çok daha hızlıdır.
e2-e4

Yanıtlar:


145
  • XMLHttpRequest jQuery'nin daha kullanışlı ve basitleştirilmiş bir forma ve tarayıcılar arası tutarlı işlevselliğe büründüğü ham tarayıcı nesnesidir.

  • jQuery.ajax jQuery'de herhangi bir tür ve içerik isteğini gerçekleştirebilen genel bir Ajax istemcisidir.

  • jQuery.getve jQuery.postdiğer yandan yalnızca GET ve POST isteklerini yayınlayabilir. Bunların ne olduğunu bilmiyorsanız, HTTP protokolünü kontrol etmeli ve biraz öğrenmelisiniz. Dahili olarak bu iki işlev kullanır, jQuery.ajaxancak kendiniz ayarlamanız gerekmeyen belirli ayarları kullanırlar, böylece GET veya POST isteğini kullanmaya kıyasla basitleştirir jQuery.ajax. GET ve POST en çok kullanılan HTTP yöntemleridir (DELETE, PUT, HEAD ve hatta nadiren kullanılan diğer egzotiklerle karşılaştırıldığında).

Tüm jQuery işlevleri, XMLHttpRequest arka planda nesneyi , ancak kendi başınıza yapmanız gerekmeyen ek işlevler sağlar.

kullanım

Bu nedenle, jQuery kullanıyorsanız, yalnızca jQuery işlevini kullanmanızı şiddetle tavsiye ederim . XMLHttpRequestTamamen unutun . Uygun jQuery isteği işlevi varyasyonlarını kullanın ve diğer tüm durumlarda kullanın $.ajax(). Bu yüzden , ve ile ilgili jQuery Ajax ile ilgili diğer yaygın işlevler olduğunu unutmayın . Eh , tüm isteğiniz için kullanabilirsiniz , ancak biraz daha kod yazmanız gerekecek, çünkü onu çağırmak için biraz daha fazla seçeneğe ihtiyacı var.$.get()$.post()$.ajax()$.ajax()

analoji

Kendinize bir araba motoru satın alabileceğiniz gibi, etrafında direksiyon, fren vb. İle bütün bir araba yaratmak zorunda kalacaksınız ... Araba üreticileri, dostça bir arayüzle (pedallar, direksiyon simidi vb.) böylece hepsini kendiniz yapmak zorunda değilsiniz.


$ .ajax () kullanmanın performans açısından herhangi bir avantajı var mı?
Rodrigues

1
@Rodrigues: gerçekten değil. Düşünürseniz $.postve $.getdaha yavaş olan tek şey $.ajax, çağrılmadan önce küçük bir miktar koddur . Ancak doğrudan XHR kullanarak kendi rutinlerinizi yazarsanız, işler biraz optimize edilebilir ancak daha hatalı olabilir. Kendinizi jQuery tarafında tutmanızı öneririm. Hayatınızı kolaylaştıracak. Eşzamansız aramanın onu veren koddan çok daha uzun sürdüğü gerçeğini göz önünde bulundurarak, bu aramalar arasında büyük olasılıkla bariz bir fark görmeyeceksiniz.
Robert Koritnik

Teşekkürler Robert Koritnik. bu yüzden $ .post ve $ .get ile alacağım.
Rodrigues

İsterseniz, $.ajaxaramalarınızı her yerde tutarlı hale getirmek için de gidebilirsiniz . XHR'yi doğrudan kullanmadığınız sürece, her iki şekilde de yapmakta iyidir.
Robert Koritnik

1
@RobertKoritnik IE'deki önbelleğe alma sorunu ne olacak? XMLHttpRequest ve $ .ajax () kullanılarak aynı mı?
Bhargavi Gunda

28

Her biri XMLHttpRequest kullanır. Tarayıcının istekte bulunmak için kullandığı şey budur. jQuery yalnızca bir JavaScript kitaplığı ve $ .ajax yöntemi XMLHttpRequest yapmak için kullanılır.

$ .post ve $ .get öğesinin kısaltılmış halleridir$.ajax . Hemen hemen aynı şeyi yaparlar, ancak bir AJAX isteği yazmayı hızlandırır - $.postbir HTTP POST isteği $.getyapar ve bir HTTP GET isteği yapar.


yükleme ve indirme için her işlevin veri aktarım sınırı ne durumda?
Rodrigues

Bir GETistek, URL dizesindeki tüm verileri gönderir - bu, istemci / sunucu tarafından sınırlandırılabilir ( stackoverflow.com/questions/2659952/… ). Bir POSTistek, üstbilgilerdeki tüm verileri gönderir, bu nedenle URL boyutu sınırı bir sorun olmamalıdır ( betiğiniz için gerçekten uzun dosya ve klasör adlarınız yoksa!).
Jonathon Bolster

tamam. Yani kısacası, daha fazla veri göndermek için postayı kullanmak ve daha fazla veri almak için almak demek, değil mi?
Rodrigues

@Rodrigues - Evet, hemen hemen :) Genel olarak sadece bir şeyler okumak istiyorsanız (örneğin, twitter'dan tweet listesi alma isteği) kullanın GET. Bir şey göndermek istiyorsanız (örneğin, bir tweet göndermek) o zaman şunu kullanın POST:
Jonathon Bolster

7

jQuery.get için bir paketleyicidir jQuery.ajax XMLHttpRequest bir sarıcı.

XMLHttpRequest ve Fetch API (şu anda deneysel) DOM'daki tek özelliklerdir, bu nedenle en hızlı olmaları gerekir.

Artık doğru olmayan birçok bilgi gördüm, bu yüzden herkesin herhangi bir zamanda en iyi olan sürümden sürümü test edebileceği bir test sayfası yaptım:

https://jsperf.com/xhr-vs-jquery-ajax-vs-get-vs-fetch

Bugünkü testlerim, yalnızca jQuery'nin temiz ve hatta hızlı bir çözüm olmadığını gösteriyor, benim için mobil veya masaüstündeki sonuçlar jQuery'nin, çok fazla ajax kullanıyorsanız, XHR2'den en azından% 80 daha yavaş olduğunu gösteriyor. mobilde basit bir sitenin yüklenmesi çok zaman alacaktır.

Kullanımın kendisi de bağlantıda.


2

jQuery.post ve jQuery.get tipik sayfa yüklemelerini simüle eder, yani bir gönder düğmesine tıklarsınız ve sizi yeni bir sayfaya götürür (veya aynı sayfayı yeniden yükler). Verilerin sunucuya gönderilme biçiminde biraz farklı yayınlama ve alma (bununla ilgili iyi makale burada bulunabilir .

jQuery.ajax ve XMLHttpRequest, sayfanın değişmemesi dışında post ve get'e benzer sayfa yüklemeleridir. Sunucunun döndürdüğü bilgiler, sayfa düzeninin değiştirilmesi de dahil olmak üzere herhangi bir şekilde kullanılmak üzere javascript tarafından yerel olarak kullanılabilir. Normalde kullanıcı sayfada gezinebilirken eşzamansız işler yapmak için kullanılırlar. Bir metin alanını tamamlamak için bir veritabanı değerlerinden dinamik olarak yüklenen otomatik tamamlama yetenekleri buna iyi bir örnek olabilir. JQuery.ajax ile XMLHttpRequest arasındaki temel fark, jQuery.ajax'ın aynı etkiyi elde etmek için XMLHttpRequest'i daha basit bir arayüzle kullanmasıdır. JQuery kullanıyorsanız, jQuery.ajax ile devam etmenizi öneririm.


xmlhttp.open, send () ve responseText XMLHttpRequest nesnesi oluşturmaya göre jquery kullanmanın avantajı nedir?
Rodrigues

XMLHttpRequest nesnesi, mevcut tarayıcınıza göre tek bir şey için farklı şekilde başlatılır. XMLHttpRequest kullanarak temel bir arabirim sağlamak için biraz javascript bakımı yapmanız gerekir. Zaten jQuery'niz varsa, sizin için hepsini yapar. Bu gerçekten bir kolaylık meselesi, işlevsellik değil, çünkü teknik olarak aynı şeyi ikisiyle de yapabilirsiniz. JQuery, XMLHttpRequest nesnesini sarmaladığından, onunla belirli bir şey yapmak istemeniz durumunda size sağladığından bahsetmiyorum bile.
Neil

ok .. Öneriniz için teşekkürler Neil ... jquery'yi php veya aspx ile kullanmak ve hata ayıklamak için herhangi bir IDE benzeri visual studio var mı?
Rodrigues

Hem javascript hem de php veya aspx'te hata ayıklamanıza izin veren bir IDE bulmak zordur, çünkü biri sunucu tarafındayken diğeri istemci tarafındadır. Bu maalesef javascript'te ayrıca hata ayıklamanız gerektiği anlamına gelir. Ancak, firebug'ın ( getfirebug.com ) genel olarak javascript'te hata ayıklamak için harika olduğunu gördüm . Geri arama işlevine bir kesme noktası yerleştirin ve size sunucu tarafından verilen her şeyi ve adım adım javascript'inizin onunla yaptığı her şeyi gösterir. Umarım yardımcı olur.
Neil

1

Eski gönderi. ancak yine de yanıtlamak istiyorum, Web Çalışanları ile çalışırken karşılaştığım bir fark (javascript)

web çalışanları, kullanıcı arayüzü düzeyinde erişime sahip olamaz. Bu, web çalışanlarını kullanarak çalıştırmayı planladığınız JavaScript kodundaki herhangi bir DOM öğesine erişemeyeceğiniz anlamına gelir. Pencere, belge ve üst öğe gibi nesnelere web çalışanı kodundan erişilemez.

Bildiğimiz gibi jQuery kitaplığı HTML DOM'a bağlıdır ve buna izin verilmesi "DOM erişimi yok" kuralını ihlal eder. Bu biraz acı verici olabilir çünkü jQuery.ajax, jQuery.post, jQuery.get gibi yöntemler web çalışanlarında kullanılamaz. Neyse ki, Ajax istekleri yapmak için XMLHttpRequest nesnesini kullanabilirsiniz.


0

JQuery yöntemleri gittiği .postve .getsadece .ajaxdahili olarak yaptığı sürece, amaçları bazı gereksiz seçenekleri soyutlamak .ajaxve sırasıyla bu tür isteğe uygun bazı varsayılanları sağlamaktır.

3'ün herhangi biri arasında performansta çok fark olduğundan şüpheliyim.

.ajaxKendi içinde yöntem XMLHttpRequest, bu ağır jQuery kalanını göre optimize olacak, ancak bütün Etkileşim kendinizi uyarlanmış sanki muhtemelen verimli olarak olmayacak yapar .. ama yazılı kod çoklu veya aramdaki fark yazma jQuery.ajax.


jQuery.ajax'ı özelleştirmenin herhangi bir avantajı var mı
Rodrigues

Bunu steno yöntemlerin yerine kullanmayı kastettiğinizi varsayıyorum, tecrübelerime göre, ihtiyacınız olan verileri nasıl elde edeceğiniz konusunda çok spesifik olmanız gerekiyorsa, varsayılanların çoğu istediğiniz şeyse, kısaltmaların yararlı olduğunu düşünüyorum. ajax genellikle gitmenin yoludur.
Steve

Teşekkürler Steve. post kullanacak ve alacak. Bazı .ajax örnekleri verirseniz, bazı karşılaştırma yapabilirim.
Rodrigues
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.