WebSockets उपलब्ध होने पर AJAX का उपयोग क्यों करें?




node.js performance (4)

मैं थोड़ी देर के लिए वेबस्केट्स का उपयोग कर रहा हूं, मैंने नोड सर्वर और वेबसाकेट्स का उपयोग कर विश्वविद्यालय में अपने अंतिम वर्ष परियोजना के लिए एक एग्इल परियोजना प्रबंधन उपकरण चुना है। मैंने वेबस्केट्स का उपयोग करके पाया कि प्रति सेकंड अनुरोधों की संख्या में 624% की वृद्धि हुई है, मेरा आवेदन संसाधित हो सकता है।

हालांकि प्रोजेक्ट शुरू करने के बाद से मैंने सुरक्षा की कमी के बारे में पढ़ा है, और कुछ ब्राउज़र डिफ़ॉल्ट रूप से वेबसाकेट अक्षम करने का विकल्प चुनते हैं ..

यह मुझे सवाल पर ले जाता है:

AJAX का उपयोग क्यों करें जब WebSockets विलंबता और संसाधन ओवरहेड को कम करने का इतना अच्छा काम करता है, क्या ऐसा कुछ भी है जो AJAX WebSockets से बेहतर करता है?


मुझे नहीं लगता कि हम वेबसाइट्स और HTTP की स्पष्ट तुलना कर सकते हैं क्योंकि वे कोई प्रतिद्वंद्वियों नहीं हैं और न ही एक ही समस्या का समाधान करते हैं।

वेबसाइकिल लंबी अवधि के बिडरेक्शनल डेटा स्ट्रीमिंग को वास्तविक समय के तरीके में संभालने के लिए एक बेहतरीन विकल्प है, जबकि आरईएसटी कभी-कभी संचार के लिए बहुत अच्छा है। Websockets का उपयोग करना काफी निवेश है, इसलिए यह कभी-कभी कनेक्शन के लिए एक ओवरकिल है।

आप पाते हैं कि उच्च लोड मौजूद होने पर वेबसाइटॉक बेहतर होते हैं, कुछ मामलों में HTTP थोड़ा तेज होता है क्योंकि यह कैशिंग का उपयोग कर सकता है। Websockets के साथ आरईएसटी की तुलना करना संतरे से सेब की तुलना करना है।

हमें यह जांचना चाहिए कि कौन सा हमारे आवेदन के लिए बेहतर समाधान प्रदान करता है, जो हमारे उपयोग के मामले में सबसे अच्छा फिट बैठता है।


दिसम्बर 2017 तक फास्ट फॉरवर्ड, वेबसाइट्स को हर ब्राउज़र (व्यावहारिक रूप से) द्वारा समर्थित किया जाता है और उनका उपयोग बहुत आम है।

हालांकि, इसका मतलब यह नहीं है कि Websockets कम से कम पूरी तरह से नहीं, विशेष रूप से HTTP / 2 अनुकूलन के रूप में AJAX को बदलने में कामयाब रहे।

संक्षिप्त जवाब यह है कि AJAX अभी भी अधिकांश आरईएसटी अनुप्रयोगों के लिए बहुत अच्छा है, यहां तक ​​कि Websockets का उपयोग करते समय भी। लेकिन भगवान विवरण में है, तो ...:

मतदान के लिए AJAX?

मतदान (या लंबे मतदान) के लिए AJAX का उपयोग मर रहा है (और यह होना चाहिए), लेकिन यह अभी भी दो अच्छे कारणों (मुख्य रूप से छोटे वेब ऐप्स के लिए) के उपयोग में है:

  1. कई डेवलपर्स के लिए, AJAX कोड को आसान बनाता है, खासकर जब बैकएंड को कोडिंग और डिज़ाइन करने की बात आती है।

  2. HTTP / 2 के साथ, AJAX से संबंधित उच्चतम लागत (एक नए कनेक्शन की स्थापना) को समाप्त कर दिया गया था, जिससे AJAX कॉल काफी प्रदर्शन करने की अनुमति देता है, खासकर डेटा पोस्ट करने और अपलोड करने के लिए।

हालांकि, वेबस्केट पुश AJAX से कहीं बेहतर है (हेडर को दोबारा प्रमाणित करने या फिर से भेजने की आवश्यकता नहीं है, "कोई डेटा" राउंडट्रिप्स आदि की आवश्यकता नहीं है)। इस पर कई बार चर्चा की गई थी ।

आरईएसटी के लिए AJAX?

AJAX के लिए एक बेहतर उपयोग आरईएसटी एपीआई कॉल है। यह उपयोग कोड बेस को सरल बनाता है और वेबसाइकिल कनेक्शन को अवरुद्ध करने से रोकता है (विशेष रूप से मध्यम आकार के डेटा अपलोड पर)।

आरईएसटी एपीआई कॉल और डेटा अपलोड के लिए AJAX को प्राथमिकता देने के कई कारण हैं :

  1. AJAX एपीआई व्यावहारिक रूप से आरईएसटी एपीआई कॉल के लिए डिज़ाइन किया गया था और यह एक बहुत अच्छा फिट है।

  2. AJAX का उपयोग कर आरईएसटी कॉल और अपलोड क्लाइंट और बैकएंड दोनों पर कोड के लिए काफी आसान हैं।

  3. डेटा पेलोड बढ़ने के साथ ही, जब तक संदेश विखंडन / मल्टीप्लेक्सिंग तर्क कोडित नहीं किया जाता है, तब तक वेबस्केट कनेक्शन अवरुद्ध हो सकते हैं।

    यदि एक वेबसाईट send कॉल में एक अपलोड किया जाता है, तो अपलोड समाप्त होने तक यह एक वेबसाईट स्ट्रीम को अवरुद्ध कर सकता है। यह विशेष रूप से धीमी ग्राहकों पर प्रदर्शन को कम करेगा।

एक सामान्य डिज़ाइन वेबसाइटों पर स्थानांतरित छोटे बिडी संदेशों का उपयोग करता है जबकि आरईएसटी और डेटा अपलोड (क्लाइंट टू सर्वर) वेबसाइटों को अवरुद्ध करने से रोकने के लिए AJAX की उपयोग की आसानी का लाभ उठाता है।

हालांकि, बड़ी परियोजनाओं पर, Websockets द्वारा प्रदान की गई लचीलापन और कोड जटिलता और संसाधन प्रबंधन के बीच संतुलन वेबसाइटों के पक्ष में संतुलन को सूचित करेगा।

उदाहरण के लिए, वेबसाइटों के आधार पर अपलोड किए जाने के बाद वेबबॉकेट आधारित अपलोड बड़े अपलोड को फिर से शुरू करने की क्षमता प्रदान कर सकते हैं (पुनः याद रखें कि 5 जीबी मूवी जिसे आप अपलोड करना चाहते हैं?)।

अपलोड विखंडन तर्क को कोडिंग करके, एक बाधित अपलोड फिर से शुरू करना आसान है (कठिन हिस्सा चीज़ को कोडिंग कर रहा था)।

HTTP / 2 पुश के बारे में क्या?

मुझे शायद यह जोड़ना चाहिए कि HTTP / 2 पुश सुविधा वेबसाइट्स को प्रतिस्थापित नहीं करती है (और शायद नहीं)।

इस पर पहले चर्चा की गई थी, लेकिन यह उल्लेख करने के लिए पर्याप्त है कि एक एकल HTTP / 2 कनेक्शन पूरे ब्राउज़र (सभी टैब / विंडोज़) परोसता है, इसलिए HTTP / 2 द्वारा धक्का दिया जा रहा डेटा यह नहीं जानता कि यह कौन सा टैब / विंडो है, वेबसाइटों को सीधे किसी विशिष्ट ब्राउज़र टैब / विंडो पर धक्का देने की वेबसाइट की क्षमता को प्रतिस्थापित करने की इसकी क्षमता को समाप्त करना।

जबकि वेबसाइट्स छोटे द्वि-दिशात्मक डेटा संचार के लिए बहुत अच्छे हैं, एजेक्स ने अभी भी कई फायदे किए हैं - खासकर जब बड़े पेलोड (अपलोड इत्यादि) पर विचार करते हैं।

और सुरक्षा?

खैर, आम तौर पर, एक प्रोग्रामर को अधिक विश्वास और नियंत्रण प्रदान किया जाता है, उपकरण जितना अधिक शक्तिशाली होता है ... और अधिक सुरक्षा चिंताओं को उखाड़ फेंक देता है।

प्रकृति द्वारा AJAX का ऊपरी हाथ होगा, क्योंकि इसकी सुरक्षा ब्राउज़र के कोड में बनाई गई है (जो कभी-कभी संदिग्ध होती है, लेकिन यह अभी भी वहां है)।

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

व्यक्तिगत रूप से मुझे यह नहीं लगता कि यह एक बड़ा अंतर है, अगर मुझे लगता है कि वेबसाइटॉक थोड़ा बेहतर है, खासकर जब आप जानते हैं कि आप क्या कर रहे हैं।

मेरी विनम्र राय

आईएमएचओ, मैं सब कुछ के लिए Websockets का उपयोग करता हूं लेकिन आरईएसटी एपीआई कॉल करता हूं। बड़े डेटा अपलोड मैं टुकड़े कर दूंगा और जब संभव हो तो Websockets पर भेज देंगे।

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


वेबसाकेट पुराने वेब ब्राउज़र में काम नहीं करते हैं, और जो लोग इसका समर्थन करते हैं वे अक्सर अलग-अलग कार्यान्वयन करते हैं। यह बहुत ही अच्छा कारण है कि क्यों वे AJAX के स्थान पर हर समय उपयोग नहीं किए जाते हैं।


वेबसाकेट्स का उद्देश्य AJAX को प्रतिस्थापित करने का नहीं है और धूमकेतु / लंबे मतदान के लिए सख्ती से प्रतिस्थापन नहीं है (हालांकि ऐसे कई मामले हैं जहां यह समझ में आता है)।

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

हालांकि, निश्चित रूप से वेबसाकेट्स और AJAX / धूमकेतु के बीच उद्देश्य में एक ओवरलैप है। उदाहरण के लिए, जब ब्राउज़र सर्वर ईवेंट (यानी पुश) के बारे में अधिसूचित होना चाहता है तो धूमकेतु तकनीक और वेबसाकेट निश्चित रूप से दोनों व्यवहार्य विकल्प हैं। यदि आपके एप्लिकेशन को कम विलंबता पुश घटनाओं की आवश्यकता है तो यह वेबसाकेट के पक्ष में एक कारक होगा। दूसरी तरफ, यदि आपको मौजूदा ढांचे और तैनाती प्रौद्योगिकियों (ओएथ, रीस्टफुल एपीआई, प्रॉक्सी, लोड बैलेंसर्स) के साथ सह-अस्तित्व की आवश्यकता है तो यह धूमकेतु तकनीकों (अब के लिए) के पक्ष में एक कारक होगा।

यदि आपको वेबसाकेट्स द्वारा प्रदान किए जाने वाले विशिष्ट लाभों की आवश्यकता नहीं है, तो संभवत: एजेक्स और धूमकेतु जैसी मौजूदा तकनीकों के साथ रहना बेहतर विचार है क्योंकि इससे आपको टूल, टेक्नोलॉजीज, सुरक्षा तंत्र के विशाल विद्यमान पारिस्थितिक तंत्र के साथ पुन: उपयोग और एकीकृत करने की अनुमति मिलती है। , ज्ञान के आधार (यानी स्टैक ओवरफ्लो पर कहीं अधिक लोग वेबस्केट्स से HTTP / अजाक्स / धूमकेतु जानते हैं), आदि

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

साथ ही, कुछ उत्तरों इंगित करते हैं कि वेबसाकेट्स के डाउनसाइड्स में से एक सीमित / मिश्रित सर्वर और ब्राउज़र समर्थन है। मुझे थोड़ा सा फैलाने दो। जबकि आईओएस (आईफोन, आईपैड) अभी भी पुराने प्रोटोकॉल (हिक्सी) का समर्थन करता है, अधिकांश वेबस्केट सर्वर हिक्सी और हाइबी / आईईटीएफ 6455 संस्करण दोनों का समर्थन करते हैं। अधिकांश अन्य प्लेटफॉर्म (यदि उनके पास पहले से ही अंतर्निहित समर्थन नहीं है) web-socket-js (फ्लैश आधारित पॉलीफिल) के माध्यम से वेबस्केट समर्थन प्राप्त कर सकते हैं। इसमें वेब उपयोगकर्ताओं के विशाल बहुमत शामिल हैं। साथ ही, यदि आप सर्वर बैकएंड के लिए नोड का उपयोग कर रहे हैं, तो सॉकेट.आईओ का उपयोग करने पर विचार करें जिसमें वेब-सॉकेट-जेएस को फॉलबैक के रूप में शामिल किया गया है और यदि यह भी उपलब्ध नहीं है (या अक्षम) तो यह धूमकेतु तकनीक का उपयोग करने के लिए वापस आ जाएगा दिए गए ब्राउज़र के लिए उपलब्ध है।

अपडेट करें : आईओएस 6 अब मौजूदा हाइबी / आईईटीएफ 6455 मानक का समर्थन करता है।






websocket