2010-06-29 16 views
27

मुझे सर्वर से क्लाइंट में भेजने के लिए 2 डी सरणी (जेसन) की आवश्यकता है। पाठ के 4 अक्षरों के आस-पास प्रत्येक प्रविष्टि के साथ यह लगभग 400x400 आकार में होगा। इसलिए यह लगभग 640 केबी डेटा बनाता है।बहुत छोटे HTTP अनुरोध बनाम बहुत छोटे अनुरोध

निम्नलिखित में से कौन सा चरम दृष्टिकोण बेहतर है?

  1. मैं एक ही समय में सभी डेटा का एक बड़ा HTTP अनुरोध करता हूं।
  2. मैं 400 अनुरोध करने - प्रत्येक एक ही पंक्ति के लिए पूछ (करीब 1.6 KB)

मेरा मानना ​​है कि इष्टतम दृष्टिकोण बीच में कहीं होगा। क्या कोई मुझे यह विचार दे सकता है कि इस डेटा के लिए इष्टतम एकल अनुरोध आकार क्या हो सकता है?

धन्यवाद।

उत्तर

37

जब तक आप (वर्तमान मानकों के अनुसार बहुत धीमी गति से) धीमी गति से साथ काम कर रहे कनेक्शन और वास्तव में जरूरत वृद्धिशील अद्यतन, एक अनुरोध में करते हैं।

इससे आपको compressing the response के लिए बेहतर दक्षता मिलती है, और extra HTTP requests and response headers के ओवरहेड से बचा जाता है।

+3

+1 - और आप राउंड ट्रिप के ओवरहेड से बचते हैं। यहां तक ​​कि 20ms पर भी ... 400 अनुरोध 8000ms ओवरहेड = 8 सेकंड बना देंगे। 80ms पर ... (दूर दूर), यह 32 सेकंड बर्बाद हो जाएगा। – TomTom

+0

डेविड और टॉम दोनों के लिए बहुत बहुत धन्यवाद।वह वास्तव में उपयोगी था। :) –

+2

ठीक है, @TomTom आप समानांतर अनुरोधों में कारक नहीं थे ...! समवर्ती कनेक्शन पर कोई सीमा नहीं होने पर शुरुआत में और अंत में एक पूर्ण कनेक्शन पर अंत में केवल 20ms :) यदि मैं गलत हूं, तो मुझे सही करें, यह केवल 400 x (हेडर को संसाधित करने के लिए लिया गया समय) है और 400 x आरटीटी –

47

एक बड़ा चुनने बनाम लिए विचारों की युगल कई छोटे: के रूप में डेटा आता

  • ही अनुरोध मामले में, आप प्रगतिशील डाटा प्रोसेसिंग ऐसा नहीं कर सकते; इससे पहले कि आप कुछ भी कर सकें, आपको पूरा पैकेट पहुंचने की प्रतीक्षा करनी होगी। यदि यह विफल रहता है, तो आपको सबकुछ खरोंच से शुरू करना होगा।
  • एकाधिक अनुरोध मामले में, आप प्रगतिशील डेटा प्रोसेसिंग कर सकते हैं। हालांकि, अब आपको कई असफलताओं और इनसे कैसे ठीक होने की संभावना पर विचार करना होगा।
  • प्रत्येक अनुरोध के लिए एकाधिक अनुरोध ओवरहेड होते हैं। यह अतिरिक्त बैंडविड्थ है जिसे आप ऐप ले लेंगे।
  • कुछ HTTP एजेंट समान सर्वर पर समवर्ती अनुरोधों की संख्या को सीमित करते हैं, और आपको इसके आसपास काम करने के लिए कुछ तर्क करने की आवश्यकता हो सकती है।
  • प्रतिक्रिया संपीड़न एकल अनुरोध मामले के लिए बेहतर काम करेगा।
  • एकाधिक अनुरोधों के लिए आपको अपने डेटा के लिए पूर्ण मेमोरी आवंटित करने की आवश्यकता नहीं होगी। अनुमोदित, 640 केबी स्मृति का वह बड़ा हिस्सा नहीं है, इसलिए यह आपके लिए कितना बार आवंटित करेगा, इस पर निर्भर करता है कि यह आपके लिए बड़ा विचार नहीं हो सकता है।
  • प्रक्रिया की प्रारंभिक समाप्ति के मामले में (या तो एक रद्द बटन या ऐप समाप्त हो गया है या ब्राउज़र आपके पृष्ठ से दूर नेविगेट करता है), एकल अनुरोध अभी भी पूर्ण प्रतिक्रिया डाउनलोड समाप्त कर देगा; हालांकि, एकाधिक अनुरोध मामले के लिए, आपका कोड अभी तक शुरू नहीं हुआ कोई अनुरोध निष्पादित नहीं किया जाएगा।

ईमानदारी से, मैं पिछले दो के बारे में चिंतित नहीं होगा और 1 पर अपनी पसंद का आधार दूंगा) प्रगतिशील डेटा प्रोसेसिंग महत्वपूर्ण है; और 2) असफलताओं और आंशिक डेटा के लिए आपकी ऐप सहिष्णुता क्या है।

+7

+1 मुझे इस मामले के लिए वर्तमान में स्वीकार किए गए एक से बेहतर जवाब मिलता है क्योंकि यह प्रत्यक्ष उत्तर के बजाय दो विकल्पों की अच्छी तुलना प्रदान करता है। – Wingblade

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