XMLHttpRequest, jQuery.ajax, jQuery.post, jQuery.get में क्या अंतर है


121

मैं कैसे पता लगा सकता हूं कि किसी स्थिति के लिए कौन सा तरीका सबसे अच्छा है? क्या कोई कार्यक्षमता और प्रदर्शन के मामले में अंतर जानने के लिए कुछ उदाहरण प्रदान कर सकता है?


4
प्रदर्शन के बारे में (बमुश्किल जवाब दिया गया): नियमित XMLHttpRequest का उपयोग करने वाले jsperf के अनुसार jQuery के माध्यम से जाने की तुलना में बहुत तेज है।
e2-e4

जवाबों:


145
  • XMLHttpRequest कच्चे ब्राउज़र ऑब्जेक्ट है जो jQuery अधिक उपयोग करने योग्य और सरलीकृत रूप में लपेटता है और ब्राउज़र की निरंतर कार्यक्षमता को पार करता है।

  • jQuery.ajax jQuery में एक सामान्य अजाक्स आवश्यकता है जो किसी भी प्रकार और सामग्री अनुरोधों को कर सकता है।

  • jQuery.getऔर jQuery.postदूसरी ओर केवल GET और POST अनुरोध जारी कर सकते हैं। यदि आप नहीं जानते कि ये क्या हैं, तो आपको HTTP प्रोटोकॉल की जाँच करनी चाहिए और थोड़ा सीखना चाहिए । आंतरिक रूप से ये दोनों फ़ंक्शन उपयोग करते हैं jQuery.ajaxलेकिन वे विशेष सेटिंग्स का उपयोग करते हैं जिन्हें आपको अपने आप को सेट करने की आवश्यकता नहीं होती है और उपयोग करने की तुलना में GET या POST अनुरोध को सरल बनाते हैं jQuery.ajax। GET और POST को वैसे भी सबसे ज्यादा इस्तेमाल किया जाने वाला HTTP मेथड है (DELETE, PUT, HEAD या यहां तक ​​कि अन्य शायद ही कभी इस्तेमाल किए गए एक्सोटिक्स की तुलना में)।

सभी jQuery फ़ंक्शंस XMLHttpRequestपृष्ठभूमि में ऑब्जेक्ट का उपयोग करते हैं, लेकिन अतिरिक्त कार्यक्षमता प्रदान करते हैं जो आपको स्वयं नहीं करना है।

प्रयोग

इसलिए यदि आप jQuery का उपयोग कर रहे हैं तो मैं दृढ़ता से अनुशंसा करता हूं कि आप केवल jQuery कार्यक्षमता का उपयोग करें । XMLHttpRequestबिलकुल भूल जाओ । उपयुक्त jQuery अनुरोध फ़ंक्शन विविधताओं का उपयोग करें और अन्य सभी मामलों में उपयोग करें $.ajax()। तो यह मत भूलो कि अन्य सामान्य jQuery के अजाक्स संबंधित कार्य हैं $.get(), $.post()और $.ajax()। वैसे आप बस $.ajax()अपने सभी अनुरोधों के लिए उपयोग कर सकते हैं, लेकिन आपको थोड़ा और कोड लिखना होगा, क्योंकि इसे कॉल करने के लिए थोड़ा और विकल्प चाहिए।

समानता

यह ऐसा है जैसे आप अपने आप को एक कार इंजन खरीदने में सक्षम होंगे, जिसे आपको स्टीयरिंग, ब्रेक आदि के साथ इसके चारों ओर एक पूरी कार बनानी होगी ... कार निर्माता एक पूर्ण इंटरफ़ेस (पैडल, स्टीयरिंग व्हील आदि) के साथ पूर्ण कार का उत्पादन करते हैं। इसलिए आपको यह सब खुद करने की जरूरत नहीं है।


क्या प्रदर्शन के मामले में $ .ajax () का उपयोग करने में कोई फायदा है?
रॉड्रिक्स

1
@ रोड्रिग्स: वास्तव में नहीं। अगर आपको लगता है $.postऔर $.getकेवल एक ही चीज़ धीमी $.ajaxहो जाती है तो कोड की एक छोटी राशि होती है । लेकिन अगर आप XHR का उपयोग करके अपनी खुद की दिनचर्या लिखेंगे तो सीधे चीजें थोड़ी अनुकूलित हो सकती हैं, लेकिन अधिक छोटी गाड़ी हो सकती हैं। मेरा सुझाव है कि आप खुद को jQuery की तरफ रखें। यह आपके जीवन को आसान बना देगा। और इस तथ्य पर विचार करते हुए कि async कॉल इसे जारी करने वाले कोड की तुलना में अधिक समय ले रहा है, आप शायद इन कॉल्स के बीच कोई स्पष्ट अंतर नहीं देखेंगे।
रॉबर्ट कोरिटनिक

धन्यवाद रॉबर्ट कोरिटनिक। तो मैं $ .post और $ .get के साथ मिल जाएगा।
रॉड्रिक्स

$.ajaxयदि आप चाहें तो आप अपनी कॉल को हर जगह सुसंगत बनाने के लिए भी जा सकते हैं। जब तक आप सीधे एक्सएचआर का उपयोग नहीं करते हैं तब तक आप इसे किसी भी तरह से करना अच्छा है।
रॉबर्ट कोरिटनिक

1
@RobertKoritnik IE में कैशिंग मुद्दे के बारे में क्या यह XMLHttpRestest और $ .ajax () का उपयोग करके समान है?
भार्गवी गुंडा

28

उनमें से हर एक XMLHttpRequest का उपयोग करता है। यह ब्राउज़र अनुरोध करने के लिए उपयोग करता है। jQuery सिर्फ एक जावास्क्रिप्ट लाइब्रेरी है और $ .ajax पद्धति का उपयोग XMLHttpRequest बनाने के लिए किया जाता है।

$ .post और $ .get सिर्फ शॉर्टहैंड संस्करण हैं $.ajax। वे बहुत कुछ एक ही बात करते हैं, लेकिन यह AJAX अनुरोध लिखने के लिए जल्दी $.postकरता है - HTTP POST अनुरोध $.getकरता है और HTTP GET अनुरोध करता है।


अपलोड और डाउनलोड के लिए प्रत्येक फ़ंक्शन की डेटा ट्रांसफर सीमा के बारे में क्या है
रॉड्रिग्ज

एक GETअनुरोध URL स्ट्रिंग में सभी डेटा भेजेगा - जिसे क्लाइंट / सर्वर ( stackoverflow.com/questions/2659952/… ) द्वारा सीमित किया जा सकता है । एक POSTअनुरोध हेडर में सभी डेटा भेजता है, इसलिए URL आकार की सीमा एक समस्या नहीं होनी चाहिए (जब तक कि आपके पास स्क्रिप्ट के लिए वास्तव में लंबी फ़ाइल और फ़ोल्डर नाम न हो!)।
जोनाथन बोलस्टर

ठीक है। तो यू कम मतलब में, अधिक डेटा उपयोग पोस्ट भेजने के लिए और अधिक डेटा उपयोग प्राप्त करने के लिए, है ना?
रॉड्रिक्स

@ रोड्रिग्स - हाँ, बहुत ज्यादा :) आम तौर पर अगर आप सिर्फ कुछ पढ़ने के लिए देख रहे हैं (जैसे ट्विटर से ट्वीट की सूची प्राप्त करने के लिए एक अनुरोध) का उपयोग करें GET। यदि आप कुछ भेजना चाहते हैं (जैसे कि एक ट्वीट पोस्ट करना), तो उपयोग करें POST,
जोनाथन बोलस्टर

7

jQuery.getके लिए एक आवरण है jQuery.ajax, जो XMLHttpRequest के लिए एक आवरण है।

XMLHttpRequest और Fetch API (इस समय प्रायोगिक) DOM में एकमात्र हैं, इसलिए इसे सबसे तेज़ होना चाहिए।

मैंने बहुत सारी जानकारी देखी जो अब सटीक नहीं है, इसलिए मैंने एक परीक्षण पृष्ठ बनाया जहां कोई भी संस्करण से संस्करण का परीक्षण कर सकता है, जो किसी भी समय सबसे अच्छा है:

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

मेरे परीक्षणों से आज पता चलता है कि केवल jQuery एक साफ या तेज समाधान नहीं है, मोबाइल या डेस्कटॉप में मेरे लिए परिणाम दिखाता है कि jQuery, XHR2 की तुलना में कम से कम 80% धीमा है, यदि आप बहुत ज्यादा अजाक्स का उपयोग कर रहे हैं, मोबाइल में साधारण साइट लोड करने में बहुत समय लगेगा।

उपयोग स्वयं लिंक में भी है।


2

jQuery.post और jQuery.get ठेठ पृष्ठ भार का अनुकरण करते हैं, जो कहना है, आप सबमिट बटन पर क्लिक करते हैं और यह आपको एक नए पृष्ठ पर ले जाता है (या उसी पृष्ठ को पुनः लोड करता है)। पोस्ट और डेटा को सर्वर में भेजे जाने के तरीके से थोड़ा भिन्न होता है (इसके बारे में अच्छा लेख यहां पाया जा सकता है

jQuery.ajax और XMLHttpRequest पृष्ठ लोड और पोस्ट के समान हैं, सिवाय इसके कि पेज नहीं बदलता है। जो भी जानकारी सर्वर रिटर्न का उपयोग करता है वह जावास्क्रिप्ट द्वारा स्थानीय रूप से किसी भी तरह से उपयोग किया जा सकता है, जिसमें पेज लेआउट को संशोधित करना शामिल है। वे आमतौर पर अतुल्यकालिक काम करने के लिए उपयोग किए जाते हैं, जबकि उपयोगकर्ता अभी भी पृष्ठ को नेविगेट कर सकता है। इसका एक अच्छा उदाहरण एक पाठ क्षेत्र को पूरा करने के लिए डेटाबेस मूल्यों से गतिशील रूप से लोड करके स्वत: पूर्ण क्षमता होगा। JQuery.ajax और XMLHttpRequest के बीच मूलभूत अंतर यह है कि jQuery.ajax एक ही प्रभाव को प्राप्त करने के लिए XMLHttpRequest का उपयोग करता है लेकिन एक सरल इंटरफ़ेस के साथ। यदि आप jQuery का उपयोग करते हैं तो मैं आपको jQuery.ajax के साथ रहने के लिए प्रोत्साहित करूंगा।


XMLHttpRequest ऑब्जेक्ट xmlhttp.open बनाने, भेजने () और responseText पर jquery का उपयोग करने का क्या फायदा है।
रॉड्रिक्स

XMLHttpRequest ऑब्जेक्ट को एक चीज़ के लिए आपके वर्तमान ब्राउज़र के अनुसार तुरंत अलग किया जाता है। इसके लिए आवश्यक है कि आप XMLHttpRequest का उपयोग करके एक बुनियादी इंटरफ़ेस प्रदान करने के लिए जावास्क्रिप्ट स्क्रिप्ट के एक छोटे से हिस्से के चारों ओर घूमें। यदि आपके पास पहले से ही jQuery है, तो यह आपके लिए यह सब करता है। यह वास्तव में सुविधा की बात है, न कि कार्यक्षमता की क्योंकि आप तकनीकी रूप से एक ही काम कर सकते हैं। उल्लेख नहीं है कि चूंकि jQuery XMLHttpRequest ऑब्जेक्ट को लपेटता है, इसका मतलब यह है कि यह आपको यह प्रदान करता है यदि आप इसके साथ कुछ विशेष करना चाहते थे।
नील

ठीक है .. आपके सुझाव के लिए नील को धन्यवाद ... क्या php या aspx के साथ jquery का उपयोग करने और डिबगिंग के लिए दृश्य स्टूडियो की तरह कोई आईडीई उपलब्ध है।
रॉड्रिक्स

यह एक आईडीई खोजना मुश्किल है जो आपको जावास्क्रिप्ट और php या aspx दोनों को डिबग करने देता है केवल इसलिए कि एक सर्वराइड है जबकि दूसरा क्लाइंटसाइड है। इसका मतलब है कि दुर्भाग्य से, आपको जावास्क्रिप्ट को अलग से डिबग करना होगा। हालाँकि, मैंने पाया है कि फ़ायरबग ( getfirebug.com ) सामान्य रूप से जावास्क्रिप्ट डिबगिंग के लिए अद्भुत है। कॉलबैक फ़ंक्शन में एक ब्रेकपॉइंट रखें और यह आपको सर्वर द्वारा दिए गए सब कुछ और चरण दर चरण आपको वह सब कुछ दिखाता है, जो आपकी जावास्क्रिप्ट करती है। उम्मीद है की वो मदद करदे।
नील १

1

पुरानी पोस्ट। लेकिन फिर भी जवाब देना चाहता हूं, एक अंतर जो मुझे वेब वर्कर्स (जावास्क्रिप्ट) के साथ काम करते समय सामना करना पड़ा

वेब कर्मचारियों के पास किसी भी यूआई-स्तरीय पहुंच नहीं हो सकती है। इसका मतलब है कि आप जावास्क्रिप्ट कोड में किसी भी DOM तत्वों का उपयोग नहीं कर सकते हैं, जिसे आप वेब वर्कर का उपयोग करके चलाने का इरादा रखते हैं। जैसे कि विंडो, डॉक्यूमेंट और पैरेंट को वेब-वर्कर कोड में एक्सेस नहीं किया जा सकता।

जैसा कि हम जानते हैं कि jQuery लाइब्रेरी HTML DOM से जुड़ी हुई है, और यह अनुमति देता है कि वह "No DOM एक्सेस" नियम का उल्लंघन करेगी। यह थोड़ा दर्दनाक हो सकता है क्योंकि jQuery.ajax, jQuery.post, jQuery.get जैसे तरीकों का उपयोग वेब श्रमिकों में नहीं किया जा सकता है। सौभाग्य से, आप Ajax अनुरोध करने के लिए XMLHttpRequest ऑब्जेक्ट का उपयोग कर सकते हैं ।


0

जहाँ तक jQuery के तरीके जाते हैं, .postऔर .getबस .ajaxआंतरिक रूप से करते हैं , उनका उद्देश्य कुछ अनावश्यक विकल्पों को दूर करना है .ajaxऔर क्रमशः उस प्रकार के अनुरोध के लिए उपयुक्त कुछ चूक प्रदान करना है।

मुझे लगता है कि 3 में से किसी के बीच प्रदर्शन में बहुत अंतर है।

.ajaxअपने आप में विधि एक XMLHttpRequest, यह भारी jQuery के बाकी के अनुसार अनुकूलित किया जाना होगा, लेकिन के रूप में यदि आप पूरी बातचीत खुद के अनुरूप यह शायद कुशल के रूप में नहीं किया जाएगा करता है .. लेकिन यह है कि कोड के बहुत सारे या लेखन के बीच का अंतर है लेखन jQuery.ajax


वहाँ jQuery.ajax को अनुकूलित करने में कोई फायदा नहीं है
रॉड्रिक्स

मुझे लगता है कि आप इसका मतलब शॉर्टहैंड तरीकों से अधिक उपयोग करते हैं, मेरे अनुभव में मुझे पता चला है कि शॉर्टहैंड उपयोगी हैं यदि अधिकांश चूक आप चाहते हैं, तो आपको डेटा प्राप्त करने के तरीके के बारे में बहुत विशिष्ट होने की आवश्यकता है। अजाक्स आमतौर पर जाने का रास्ता है।
स्टीव

धन्यवाद स्टीव। पोस्ट का उपयोग करेंगे और प्राप्त करेंगे। यदि आप कुछ उदाहरण देते हैं तो .ax मैं कुछ तुलना कर सकता हूं,।
रोड्रिग्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.