2012-08-06 13 views
8

मुझे पता है कि HTTP विधियां कैसे काम करती हैं और उनके लिए डिज़ाइन की गई चीज़ों के लिए, लेकिन मुझे यह जानकर उत्सुकता है कि डेटा प्राप्त करने के लिए कुछ तरीकों से दूसरों की तुलना में तेज़ तरीका हैं या नहीं। ,क्या विभिन्न HTTP विधियों का उपयोग करते समय कोई प्रदर्शन अंतर है?

$.ajax({url: "../dir/someFile.json", method: 'post', dataType: 'json', 
    error: function(...){ ... }, 
    success: function(...){ ... }  
}); 

मैं स्पष्ट रूप से एक 'प्राप्त' विधि का उपयोग करेंगे के रूप में कोई डेटा इस अनुरोध को भेजा जाता है:
टीम मैं मैं पर काम कर रहा हूँ में यह नीचे की तरह JQuery ajax अनुरोध का एक बहुत देखा। ऐसा शायद तब हुआ जब एक टीममेट कोड कॉपी और पेस्ट कर रहा था। यह ठीक काम करता है, लगता है इसे 'पाने' में बदलने के लिए कोई अच्छा कारण नहीं है।

मुझे लगता है कि इस मामले में 'get' विधि का उपयोग करना तेज होगा, लेकिन मुझे यह पुष्टि करने वाला कोई स्रोत नहीं मिला।

उत्तर

3

कुछ शोध से पता चलता है कि कि कुछ ब्राउज़र कई पैकेट में एक पोस्ट अनुरोध बांट देगा नहीं है। इसका प्रदर्शन प्रभाव हो सकता है, जो आपको लगता है कि अनुरोध धीमा कर देगा। लेकिन, परीक्षणों के तहत ऐसा लगता है कि पोस्ट कभी-कभी तेज़ हो सकता है। मुझे यकीन नहीं है कि यह क्यों है।

अभ्यास में हालांकि, प्रदर्शन अंतर नगण्य है और आपको पोस्ट के रूप में POST और GET का उपयोग करना चाहिए।

पढ़ें:

+0

अन्य विधियों पर कोई भी यद्यपि, जैसे कि PUT या DELETE? –

+1

कोई विचार नहीं। जहां तक ​​मुझे पता है कि एकाधिक पैकेट में अनुरोध को विभाजित करने की पूरी अवधारणा एक ब्राउज़र कार्यान्वयन निर्णय है। इसलिए, कोई गारंटी नहीं है कि ब्राउज़र PUT या DELETE के लिए क्या करेगा। लेकिन, मेरा अनुमान है कि PUT को एक पोस्ट की तरह संभाला जाएगा, और शायद एक पोस्ट की तरह हटा दें, लेकिन मुझे उस पर कम भरोसा है। – Adam

0

सभी चीजें बराबर होती हैं, जीईटी, पोस्ट या किसी अन्य तरीकों के बीच नेटवर्क प्रदर्शन में कोई अंतर नहीं होता है। यह सब इस बात पर निर्भर करता है कि सर्वर एक जीईटी बनाम POST अनुरोध कैसे संभालता है। एक सर्वर, उदाहरण के लिए, POST पर संसाधन को अद्यतन करने का प्रयास कर सकता है लेकिन केवल इसे GET पर खोज सकता है।

इसके अलावा, जीईटी के साथ, आप डेटा भेज सकते हैं। JQuery में, यह क्वेरी स्ट्रिंग में क्रमबद्ध हो जाता है ($.get("someplace", data: { foo: "bar" })$.get("someplace?foo=bar") के रूप में भेजा जाता है)।

+0

उस पर कोई भरोसेमंद स्रोत? –

2

कम से कम आईई के ऐतिहासिक संस्करणों के साथ, अतिरिक्त पैकेट स्थानांतरित करने के लिए POST का मुद्दा है। यह यहाँ के कुछ चर्चा:

http://josephscott.org/archives/2009/08/xmlhttprequest-xhr-uses-multiple-packets-for-http-post/

मैं इस कितना प्रासंगिक ब्राउज़र की वर्तमान फसल के साथ है, हालांकि पता नहीं है।

यहाँ आलेख में वर्णित परीक्षणों के परिणाम इस प्रकार हैं:

  • IE 6 - 2 पैकेट
  • IE 7 - 2 पैकेट
  • आईई 8 - 2 पैकेट
  • फ़ायरफ़ॉक्स 3.0.13 - 1 पैकेट
  • फ़ायरफ़ॉक्स 3.5.2 - 1 पैकेट
  • ओपेरा 9.27 - 2 पैकेट
  • सफारी 4.0.3 - 2 पैकेट
  • क्रोम 2.0.172.43 - 2 पैकेट
0

यह स्पष्ट लग सकता है लेकिन जब बनाम प्राप्त पोस्ट का उपयोग कर, आप विधि नाम पर एक और बाइट का उपयोग कर रहे ।

इसके अतिरिक्त, यदि आपके पास (कुछ) डेटा भेजने के लिए है, तो जीईटी का उपयोग करके डेटा को यूआरएल-एन्कोड किया जाएगा (इसका मतलब है कि उत्पन्न & बाइट भेजे गए डेटा डेटा आकार से अधिक होंगे) जबकि पोस्ट अधिक उपभोग करेगा बाइट (सामान्य रूप से) क्योंकि अनुरोध में अतिरिक्त रूप से Content-Type: application/x-www-form-urlencoded शीर्षलेख होगा, संभवतः Content-Length शीर्षलेख प्लस समान URL-encoded डेटा GET के रूप में होगा।

यदि आपके पास भेजने के लिए कुछ बाइनरी डेटा है, तो सवाल तब तक नहीं है जब आप इसे प्राप्त नहीं कर सकते हैं।

हम पैसे की यहां बात कर रहे हैं, लेकिन अगर आप पैसे जमा ...

अंत में, GET अनुरोध कम हो जाएगी और, एक ही नेटवर्क लिंक बैंडविड्थ के लिए, पोस्ट की तुलना में तेजी हो जाएगा।

बाइनरी डेटा भेजने के लिए, PUT POST से तेज होगा (उसी तर्क के आधार पर, और क्योंकि पोस्ट multipart/form-data एन्कोडिंग हेडर का उपयोग करेगा), लेकिन ब्राउज़र समर्थन PUT अनुरोधों के लिए अधिक सीमित है।

संबंधित मुद्दे

 संबंधित मुद्दे