2012-04-02 10 views
5

वेब दुनिया में एक वेब ब्राउज़र प्रत्येक स्थैतिक फ़ाइल को पुनर्प्राप्त करने के लिए एक नया अनुरोध करता है, इसलिए; एक स्टाइलशीट, जावास्क्रिप्ट फ़ाइल, इनलाइन छवि - सभी एक नया सर्वर अनुरोध शुरू करते हैं। जबकि वेब का मेरा ज्ञान बहुत अच्छा है, वेबसाइकिल जैसी अंतर्निहित प्रौद्योगिकियां मेरे लिए कुछ हद तक नई हैं कि वे कैसे काम करते हैं और वे क्या करने में सक्षम हैं।सैद्धांतिक: क्या यह वेबसाइकिलों के माध्यम से स्टेटिक सामग्री की सेवा करने के लिए संभव/व्यवहार्य है?

मेरा प्रश्न सैद्धांतिक है, लेकिन मुझे आश्चर्य है कि अब यह संभव है या वेबसाइकिल के माध्यम से स्थैतिक फाइलों की सेवा करना संभव होगा? वेबसाइकिलों को ध्यान में रखते हुए क्लाइंट (वेब ​​ब्राउज़र) से सर्वर पर लगातार कनेक्शन होता है, यह समझ में आता है कि सभी स्थिर सामग्री नहीं होने पर वेबसाईट का उपयोग कुछ लोगों के लिए किया जा सकता है क्योंकि यह कई लोगों के विपरीत एक कनेक्शन होगा।

थोड़ा सा स्पष्ट करने के लिए।

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

BrowserScope में कुछ उपयोगी मीट्रिक हैं, ऐसा लगता है कि अनुरोध सीमा लगभग आधुनिक ब्राउज़र और यहां तक ​​कि IE8 के लिए प्रति होस्टनाम के बारे में 6 है। लेकिन जैसा कि मैंने कहा था कि कभी-कभी लोगों के पास 6 से अधिक संसाधन होते हैं, क्या इसका मतलब यह है कि वे पृष्ठ लोड समय को कतारबद्ध और धीमा कर रहे हैं जहां websockets संभावित रूप से इसे कम कर सकते हैं?

+1

आपकी प्रारंभिक धारणा गलत है - प्रत्येक छवि आदि एक अलग * HTTP लेनदेन * है, जरूरी नहीं कि एक अलग अनुरोध। [HTTP लगातार कनेक्शन] देखें (https://en.wikipedia.org/wiki/HTTP_persistent_connection)। –

+0

अब यह संभव है। आईआईआरसी, वेब ब्राउजर और सर्वर ने कनेक्शन के उपयोग को अनुकूलित किया, शायद 10 साल पहले। वे प्रत्येक फ़ाइल के लिए एक नया कनेक्शन नहीं खोलते हैं। – gbulmer

+0

आप सही ग्रेग हैं, पूरी तरह से मेरे प्रश्न का हिस्सा गलत है। हालांकि अभी भी लगातार कनेक्शन पर एक सीमा है, है ना? तो यदि आपके पास 15 स्थैतिक फ़ाइलें हैं (वास्तव में एक उच्च संख्या नहीं) तो आप सीमा से अधिक जा रहे हैं। क्या websockets का उपयोग अधिकतम फ़ाइलों को तेजी से बाईपास करने के लिए किया जा सकता है या क्या मैं websockets की क्षमताओं को अधिक सोच रहा हूं? –

उत्तर

6

यह निश्चित रूप से संभव है, लेकिन कुछ कारणों से आप शायद स्थिर संसाधनों के लिए इस का उपयोग नहीं करना चाहते हैं:

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

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

3

इस उत्तर वास्तव में अपने वेब सॉकेट प्रश्न को हल नहीं करता, लेकिन यह कर सकते हैं यह अप्रचलित:

अगली पीढ़ी की तकनीक है कि एक ही कनेक्शन पर कई संपत्ति के हस्तांतरण की समस्या को हल करना है SPDY है, जो वर्तमान में HTTP 2.0 के लिए एक उम्मीदवार। इसमें क्रोम और फ़ायरफ़ॉक्स में कार्यान्वयन कार्यरत हैं और Google और ट्विटर की पसंद से पहले से ही कुछ प्रयोगात्मक सर्वर-साइड समर्थन हैं।

+0

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