2012-08-27 42 views
9

स्पष्ट करने के लिए संपादित:RequJS के साथ jQuery लोड हो रहा है - कौन सा बेहतर है, स्थानीय संस्करण या सीडीएन एक?

प्रदर्शन (हालांकि वह अभी भी एक जंगली शब्द है, मुझे पता है) है, जो बेहतर है के संदर्भ में - एक स्थानीय संस्करण, या jQuery के एक CDN संस्करण, RequireJS से अधिक लोड हो रहा है?

निर्माण में शिम config साथ CDN लोड हो रहा है मिश्रण मत करो:

रिकॉर्ड के लिए, RequireJS online doc हालांकि मैं वास्तव में यकीन नहीं है कि इसका क्या मतलब के बारे में 100%, कुछ मार्ग कि CDN का उपयोग कर हतोत्साहित करने के लिए लगता है शामिल हैं। उदाहरण परिदृश्य: आप सीडीएन से jQuery लोड करते हैं लेकिन कुछ लोड करने के लिए शिम कॉन्फ़िगरेशन का उपयोग बैकबोन के स्टॉक संस्करण की तरह है जो jQuery पर निर्भर करता है। जब आप बिल्ड करते हैं, तो निर्मित फ़ाइल में jQuery को इनलाइन करना सुनिश्चित करें और सीडीएन से लोड न करें। अन्यथा, बैकबोन को निर्मित फ़ाइल में रेखांकित किया जाएगा और यह सीडीएन-लोड किए गए jQuery लोड होने से पहले निष्पादित होगा। यह है क्योंकि shim config केवल निर्भरताओं को लोड होने तक फ़ाइलों को लोड करने में देरी करता है, लेकिन परिभाषित करने के लिए कोई ऑटो-रैपिंग नहीं करता है। निर्माण के बाद, निर्भरता पहले से ही रेखांकित हैं, शिम कॉन्फ़िगरेशन बाद में गैर-परिभाषित() 'डी कोड के निष्पादन में देरी नहीं कर सकता है। परिभाषित करें() 'डी मॉड्यूल बिल्ड के बाद सीडीएन लोड कोड के साथ काम करते हैं क्योंकि वे उचित रूप से फ़ैक्टरी फ़ंक्शन को परिभाषित करने में अपने स्रोत को लपेटते हैं जो निर्भरता लोड होने तक निष्पादित नहीं होगा। तो सबक: शिम कॉन्फ़िगरेशन गैर मॉड्यूलर कोड, विरासत कोड के लिए एक स्टॉप-गैप उपाय है। परिभाषित() 'डी मॉड्यूल बेहतर हैं।

Theoratically, एक CDN jQuery फ़ाइल का उपयोग कर 1 अधिक HTTP अनुरोध में परिणाम होगा (r.js का उपयोग अन्य जे एस फ़ाइलें के साथ विलय नहीं किया जा सकता है), लेकिन संभावित लाभ यह है कि अपने दर्शकों को पहले से ही CDN कैश्ड बना सकती थीं वे अन्य साइटों से संस्करण का दौरा किया है।

हालांकि, अगर मैं सही से जानकारी googled यह मिल गया है, तो आप अभी भी एक स्थानीय पेशकश करने के लिए jQuery r.js को कॉपी, जिसके परिणामस्वरूप न्यूनतम किया गया जे एस फ़ाइल के रूप में अभी भी jQuery की प्रतिलिपि करने की आवश्यकता होगी की जरूरत है निर्भरता की स्थिरता सुनिश्चित करने के लिए मॉड्यूल। इसके परिणामस्वरूप स्थानीय और सीडीएन दोनों में jQuery लोड हो जाएगा। (आशा है कि मुझे यह हिस्सा सही मिला?)

तो, किस तरह से बेहतर है?

उत्तर

4

यह केवल तथ्य नहीं है कि लोगों ने फ़ाइल को कैश किया है। उपयोगकर्ता एजेंट एक ही डोमेन से एक ही समय में केवल कुछ फाइल लोड कर सकते हैं। तो एक सीडीएन से जेएस फ़ाइल लोड करना सुनिश्चित करता है कि फ़ाइल एक साथ लोड हो जाएगी।

यह उन उपयोगकर्ताओं के लाभ के बगल में आता है जो पहले से ही फाइल के कैश किए गए संस्करण हैं। तो लोकप्रिय फ़ाइलों (जैसे jQuery जावास्क्रिप्ट) के लिए मैं हमेशा इसे एक सीडीएन से लोड करता हूं।

सीडीएन किसी भी कारण से नीचे आने पर आप स्थानीय संस्करण में फ़ॉलबैक जोड़ सकते हैं।

नोट

हालांकि आरएफसी कहा गया है कि उपयोगकर्ता एजेंट एक साथ सबसे अधिक उपयोगकर्ता-एजेंट आजकल यह कल्पना की अनदेखी 2 अनुरोधों की अधिकतम संख्या क्या करना चाहिए। SO पर this old (2009) question भी देखें।ध्यान दें कि यह मुझे आश्चर्य नहीं करेगा कि उपयोगकर्ता-एजेंट वर्तमान में और भी अनुरोध करते हैं।

+0

क्या आप इस बात पर विचार कर रहे हैं कि यदि वह स्थानीय प्रतिलिपि लोड करता है, तो इसे एक सिग्नल जेएस फ़ाइल में समेकित किया जा रहा है? तो सीडीएन संस्करण लोड करके आप किसी अन्य डोमेन के अतिरिक्त अनुरोध के ओवरहेड जोड़ रहे हैं ... – JasonStoltz

6

लघु जवाब: अतिरिक्त HTTP अनुरोध और DNS लुकअप

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

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

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

एक और विचार मोबाइल उपयोगकर्ता है ... मोबाइल उपयोगकर्ताओं के पास भयानक विलंबता है इसलिए अतिरिक्त http अनुरोध और डीएनएस लुकअप के लिए आरटीटी की एक बड़ी लागत है।

6

आपकी आवश्यकताएँ दस्तावेज़ उद्धरण विशेष रूप से स्क्रिप्ट का उपयोग करने के बारे में है जिसमें jQuery के लिए एक shim config है। किसी तृतीय पक्ष सीडीएन से बेस निर्भरता की गतिशील रूप से लोड करना ठीक है यदि सभी स्क्रिप्ट एएमडी मॉड्यूल हैं।

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

लाभ शायद ऐप पर निर्भर करते हैं, प्रोफाइलिंग से यह सबसे अच्छा जवाब होगा। उदाहरण के लिए, यदि यह बहुत सारी छवियों वाली साइट है, तो छवि लोडिंग के रूप में jquery मामलों की रणनीति कम हो सकती है, शायद अधिक ध्यान देने योग्य PERF समस्या होगी।

मैं निर्मित फ़ाइल में jQuery को अनुकूलित करने और सबकुछ के लिए एएमडी मॉड्यूल का उपयोग करने के साथ शुरू करूंगा, इसलिए यदि मैं सीडीएन में प्रतिनिधि बनना चाहता हूं तो मैं कर सकता हूं। हालांकि, अगर requjs और shim config का उपयोग करते हैं, तो मूल निर्भरताओं को निर्मित फ़ाइल में रेखांकित करने की आवश्यकता होती है क्योंकि shimmed पुस्तकालय परिभाषित नहीं करते हैं() - वे निर्भरताओं को लोड करने की प्रतीक्षा नहीं करते हैं, वे तुरंत उन्हें उपलब्ध करना चाहते हैं।