बैंडविड्थ बचाने के लिए कई HTTP अनुरोधों को मर्ज करना एक अच्छा विचार है?


16

मैं एक सिंगल पेज एप्लिकेशन तैयार कर रहा हूं जिसका इस्तेमाल कभी-कभी धीमे मोबाइल कनेक्शन पर किया जाता है। एपीआई अनुरोधों के मामले में इसका कुछ हिस्सा काफी भारी है (नई स्क्रीन डिस्प्ले के लिए दस अलग-अलग संसाधन प्राप्त करना)।

अब, इन सेवाओं को एक में विलय करना एक अच्छा विचार है जो सभी आवश्यक डेटा प्रदान करता है, लेकिन अन्य सिद्धांतों के संदर्भ में "शुद्ध" के रूप में नहीं है? क्या अपेक्षित प्रदर्शन के महत्वपूर्ण प्रदर्शन हैं?


3
"अच्छा विचार" वह है जो आपके सॉफ़्टवेयर के प्रदर्शन और रखरखाव आवश्यकताओं को पर्याप्त रूप से पूरा करता है।
रॉबर्ट हार्वे

1
प्रतिक्रियाओं के संयोजन का लाभ वास्तव में यह सब महत्वपूर्ण नहीं हो सकता है, हालांकि एक बार जब आप एक रख-रखाव का उपयोग करना सुनिश्चित करते हैं और यह सुनिश्चित करते हैं कि समानांतर में लोड किया जा सकता है, तो एक दूसरे को अवरुद्ध किए बिना लोड किया जाता है। नापना, नापना, नापना। अनुमान मत लगाओ।
रेयान

ऐसा करो, यह न केवल आपको बैंडविड्थ बचाता है, यह आपको आईओ संचालन को फिर से व्यवस्थित करने की भी अनुमति देगा ताकि आपने आईओ प्रदर्शन में सुधार किया हो। यह अक्सर एक सिस्टम में एक बोतल गर्दन होगी और थ्रूपुट में काफी सुधार करेगी।
InformedA

जवाबों:


18

आरईएसटी के लाभों में से एक पारंपरिक HTTP कैश के माध्यम से अनुरोधों को कैश करने की क्षमता है (यह मानते हुए कि ये अस्वीकार्य अनुरोध हैं)।

जब आपके पास एकल, बड़ा, कम बार उपयोग किया जाता है, और संभवतः अलग-अलग अनुरोध होते हैं (मैं आइटम लाने जा रहा हूं a,b,c,d इस बार और इस बारa,b,d,e ) आप अनुरोध करते हैं कि कैश मिस होने की संभावना है और कैश से समाप्त हो सकता है आपके और स्रोत के बीच कहीं बैठा है।

ऊपर उल्लिखित अनुरोधों के दो सेटों को देखते हुए, दूसरे अनुरोध में 75% कैश हो सकता है हिट दर हो सकती है और eसभी चार चीजों के बजाय केवल तेजी से प्राप्त करना चाहिए।

ध्यान दें कि यह तुरंत उपयोग करने वाले लोगों के लिए स्पष्ट नहीं हो सकता है क्योंकि जो व्यक्ति कैश मिस अनुरोधों का पहला सेट करता है उसके पास अभी भी कैश मिस होगा।

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

इसमें से अधिकांश, फिर से, आपके आवेदन के काम करने के तरीके के अधीन है। क्या यह स्टार्टअप के सभी डेटा के लिए पूछ रहा है? या हम एक पृष्ठ लोड के बारे में बात कर रहे हैं जहां प्रतिक्रिया समय अपेक्षाएं अलग हैं?

आदर्श बात यह है कि यह देखने के लिए परीक्षण करें कि आपके आवेदन विभिन्न स्थितियों में कैसे दिखाई देते हैं। ऐसी स्थिति स्थापित करने पर विचार करें जहां आपने अपने मोबाइल डिवाइस को एक स्थानीय वाईफाई नेटवर्क पर बांधा हो, जिसे आप मॉनिटर कर सकते हैं (जो कि Google पर पहली हिट है) और खराब इंटरनेट कनेक्शन का अनुकरण करके देखें कि वास्तव में चीजें कैसे काम करती हैं (या नहीं) और जो सबसे अच्छा प्रदर्शन किया है।


1
कैशिंग का उल्लेख करने के लिए +1। जितने अधिक संसाधन आप अनुरोध में मांगते हैं, कैश मिस होने की संभावना उतनी ही अधिक होती है, लेकिन HTTP ओवरहेड कम होती है।
ब्रैंडन

8

आपका अंतर्ज्ञान कुछ हद तक सही है - और बड़े अनुरोधों को कम करना निश्चित रूप से बेहतर है; चंकी एपीआई बेहतर होते हैं। विशेष रूप से धब्बेदार कनेक्टिविटी के साथ, जहाँ आप कुछ काम देख सकते हैं और कुछ बुरे सपने देखते हैं, क्योंकि कुछ भी भरोसा नहीं कर सकता।

वहाँ एक बड़ी चेतावनी है - आप रास्ता भी चंकी हो सकते हैं और आपकी कॉल और प्रतिक्रियाएँ फूला हुआ हो जाती हैं। उदाहरण के लिए, यह समझ में आ सकता है कि जब आप पहली बार किसी पेज को हिट करते हैं तो एक बड़ी कॉल होती है और फिर हर बार जब आप डेटा चाहते हैं तो एक बड़ा पेज रिफ्रेश करने के बजाय छोटे काटने में अपडेट स्ट्रीम होता है।

या, आप इसे सभी तरह से दोनों तरह से करना चाहेंगे।


5

की जाँच करें इस ड्रॉपबॉक्स टेक ब्लॉग लेख

वहां वे विस्तार से वर्णन करते हैं कि आपने अपने सभी चित्रों के लिए थंबनेल प्राप्त करने के लिए प्रस्तावित समाधान को क्यों और कैसे लागू किया। यह कहा जाना चाहिए कि वे प्रदर्शन को मापने के लिए देखते हैं कि क्या यह परेशानी के लायक है, और जाहिर तौर पर यह है।

संक्षिप्त सारांश:

ड्रॉपबॉक्स वेबसाइट पर सैकड़ों थंबनेल लोड करने होंगे। कुछ ब्राउज़रों में सीमाओं के कारण, सभी थंबनेल समानांतर में लोड नहीं किए जाते हैं (अनुरोध पंक्तिबद्ध हैं)। वे SPDY का उपयोग करना चाहते थे, लेकिन ऐसा करने में असमर्थ थे क्योंकि उनके सिस्टम के कुछ हिस्सों ने अभी तक इसका समर्थन नहीं किया है। अंत में उन्होंने HTTP पर बैच अनुरोधों का उपयोग किया, जो एक संपीड़ित रूप में प्रति प्रतिक्रिया में कई थंबनेल लौटाते हैं। उनके परिणामों के अनुसार कुल पृष्ठ लोड समय में सुधार 40% था।


लेकिन वे कहते हैं कि यह एक अस्थायी समाधान है।
यमजोरोस

3

संक्षेप में: आपका दृष्टिकोण कुछ हद तक सही है और एक आवरण सेवा से लाभ उठा सकता है।

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

इस प्रकार, आपको REST से अनुरोधों को कैश करने की क्षमता के रूप में लाभ होता रहेगा।

हालाँकि, अंतिम बिंदु पर यह सभी सेवा / सर्वर अवसंरचना प्रदर्शन और ग्राहक वातावरण को उबाल देगा जो इसे उपभोग करना चाहिए।

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