2012-07-16 18 views
22

मैं stackoverflow खोज की, लेकिन मिल गया विरोधाभासी जवाब:XMLHttpRequest ऑब्जेक्ट का पुन: उपयोग करें या नया बनाएं?

Why should I reuse XmlHttpRequest objects?

Ajax-intensive page: reuse the same XMLHttpRequest object or create new one every time?

इसके अलावा, वहाँ w3schools.com पर एक सिफारिश है:

आप पर एक से अधिक AJAX कार्य है, तो आपके वेबसाइट, आपको XMLHttpRequest ऑब्जेक्ट बनाने के लिए एक मानक फ़ंक्शन बनाना चाहिए, और प्रत्येक AJAX कार्य के लिए पर कॉल करें।

क्यों इस सिफारिश? मैं इसके बजाय सभी अजाक्स कार्यों को संभालने के लिए अपने पृष्ठ पर एक वैश्विक XMLHttpRequest ऑब्जेक्ट का उपयोग कर रहा हूं।

उत्तर

6

आपके द्वारा बनाए जा रहे प्रत्येक एक्सएचआर के लिए विभिन्न ऑब्जेक्ट्स का उपयोग करना सबसे अच्छा है। यहां तक ​​कि अगर ऐसा करने का कोई तरीका है, तो इससे बचें! प्रत्येक अनुरोध के लिए नई वस्तु बनाने में कोई समस्या नहीं है। यदि आप स्मृति रिसाव या उस तरह के कुछ के बारे में चिंतित हैं, तो चिंता न करें, वे सभी ठीक से जीसी` हैं।


आप अपनी वेबसाइट पर एक से अधिक AJAX कार्य है, तो आप XMLHttpRequest ऑब्जेक्ट बनाने के लिए एक मानक समारोह बनाएं और प्रत्येक AJAX के कार्य के लिए इस फोन करना चाहिए।

इसका वास्तव में मतलब है कि आपके पास एक ऐसा कार्य है जो एक नई वस्तु बनाता है और इसे हर बार कॉल करता है। यह कुछ ऐसा है:

function newXHR(){ 
    return a new instance of XHR(); 
} 
13

आपने डब्ल्यू 3 स्कूली की सिफारिश को गलत समझा। आप अपनी वेबसाइट पर एक से अधिक AJAX कार्य है, तो

, आप XMLHttpRequest ऑब्जेक्ट बनाने के लिए एक मानक समारोह बनाना चाहिए, और प्रत्येक AJAX के कार्य के लिए इस फोन: मैं प्रासंगिक भाग पर प्रकाश डाला जाएगा।

यह कहता है कि आप अनुरोध लाने के लिए एक AJAX फ़ंक्शन का उपयोग करते हैं। यह फ़ंक्शन आईई और अन्य ब्राउज़रों के बीच असंगतताओं से निपटेंगे। मानक-अनुरूप ब्राउज़र में XMLHttpRequest, और IE में ActiveXObject

मैं एकाधिक एक्सएचआर ऑब्जेक्ट्स का उपयोग करने की सलाह देता हूं। एक वैश्विक xhr ऑब्जेक्ट के साथ, आपका एप्लिकेशन केवल किसी दिए गए समय पर एक अनुरोध से निपट सकता है। यह त्रुटि-प्रवण भी है (उदाहरण के लिए XMLHttpRequest launches multiple times without initiating the onreadystatechange function)।

W3Schools की तरह कुछ का मतलब:

function createXHR() { 
    try { 
     return new XMLHttpRequest(); 
    } catch (e) { 
     try { 
      return new ActiveXObject("Microsoft.XMLHTTP"); 
     } catch (e) { 
      return new ActiveXObject("Msxml2.XMLHTTP"); 
     } 
    } 
} 
var xhr = createXHR(); 
xhr.open('get', '/test', true); 
xhr.send(); 

हालांकि यह jQuery.ajax के रूप में एक समारोह जो अनुरोधों को प्रबंधित, इस तरह बनाने के लिए बेहतर है।

+2

मुझे लगता है कि वह बहुत अच्छी तरह से सिफारिश समझ में आया, जब तक कि वह तब से अपने प्रश्न का संपादन किया। उद्धरण: "मैं कर रहा हूँ * बजाय * एक * वैश्विक * XMLHttpRequest ऑब्जेक्ट का उपयोग कर" - बजाय के रूप में सिफारिश, जो स्पष्ट रूप से वह एक वैश्विक बल्कि कई उदाहरण नहीं मतलब समझ में आ करने के लिए विरोध का मतलब है। – nafg

2

सिफारिश आप पर प्रकाश डाला कह रहा है कि आप एक फंक्शन जो AJAX संभालती है, बल्कि विशेष रूप से एक XMLHttpRequest ऑब्जेक्ट से होनी चाहिए।

मैं प्रत्येक प्रश्न के लिए एक अलग का उपयोग करूंगा।

इस के खिलाफ आम तर्क XHRs की स्थापना में शामिल ओवरहेड्स से संबंधित है। हालांकि यह बहुत ज्यादा किसी भी साइट AJAX का उपयोग करता है के रूप में यह इरादा था में नगण्य होने जा रहा है (अर्थात वेब सॉकेट के लिए एक विकल्प के रूप में श्रमिक नहीं) और किसी भी मामले में, एक ही ओवरहेड्स के ज्यादा एक एक्सएचआर फिर से उपयोग करने के साथ लागू होगा। आपको अभी भी कनेक्शन खोलना होगा, इसे आग लगाना होगा, श्रोताओं को संलग्न करना होगा।

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

अंत में, कुछ भी नहीं आप मैन्युअल रूप से रोक XHRs को हटाने के बाद आप उन्हें का उपयोग किया है प्रदान वे हटाने-योग्य हैं (चर के बजाय एक वस्तु का गुण)।