बाहरी जावास्क्रिप्ट को संदर्भित करना बनाम अपनी प्रति की मेजबानी करना


42

कहें कि मेरे पास एक वेब ऐप है जो jQuery का उपयोग करता है। क्या मेरी वेबसाइट फ़ाइलों के साथ अपने सर्वर पर आवश्यक जावास्क्रिप्ट फ़ाइलों को होस्ट करने के लिए, या उन्हें jQuery के CDN (उदाहरण के लिए: http://code.jquery.com/jquery-1.7.1.min.js ) पर संदर्भित करना बेहतर है। ?

मैं दोनों पक्षों के लिए पेशेवरों को देख सकता हूं:

  • अगर यह मेरे सर्वर पर है, तो यह एक कम बाहरी निर्भरता है; अगर jQuery नीचे चला गया या उनकी होस्टिंग संरचना या ऐसा कुछ बदल गया, तो मेरा ऐप टूट गया। लेकिन मुझे लगता है कि ऐसा अक्सर नहीं होगा; ऐसा करने वाले बहुत से छोटे-छोटे साइट होने चाहिए, और jQuery की टीम उन्हें तोड़ने से बचना चाहेगी।
  • यदि यह मेरे सर्वर पर है, तो यह एक कम बाहरी संदर्भ है जिसे कोई सुरक्षा समस्या कह सकता है
  • यदि इसे बाहरी रूप से संदर्भित किया जाता है, तो मुझे फ़ाइलों की सेवा के लिए बैंडविड्थ के बारे में चिंता करने की ज़रूरत नहीं है (हालांकि मुझे पता है कि यह उतना नहीं है)।
  • यदि यह बाहरी रूप से संदर्भित है और मैं इस वेब साइट को बहुत सारे सर्वरों पर तैनात कर रहा हूं, जिनके पास सभी फाइलों की अपनी प्रतियां होनी चाहिए, तो यह एक कम फाइल है जिसे मुझे कॉपी / अपडेट करना याद रखना है।

पहले दो बिंदु केवल तभी लागू होते हैं जब आप Google के बारे में चिंतित होते हैं या तो नीचे जा रहे हैं या हैक हो रहे हैं।
user16764

1
@ user16764 - या वे किसी कारण (राजनीति, जो जानता है) के लिए jQuery की अपनी प्रति नीचे ले जाते हैं।
श्री जेफरसन

2
दूसरा कारण गोपनीयता नहीं है। किसी तृतीय पक्ष द्वारा होस्ट की गई सामग्री का उपयोग करने से वह तृतीय पक्ष उपयोगकर्ताओं को ट्रैक करने का एक तरीका देता है जिसे वे आसानी से नहीं चुन सकते।
इयान न्यूजन

कुछ CDN विशेष रूप से Google होस्ट कभी-कभी विशिष्ट देशों की फ़ाइलों को प्रतिबंधित करने की प्रवृत्ति रखते हैं
azerafati

जवाबों:


58

आपको दोनों करना चाहिए:

Google जैसे CDN से होस्ट करना प्रारंभ करें क्योंकि यह संभवतः आपकी अपनी साइट की तुलना में अधिक उच्च-समय का होगा और सबसे तेज़ प्रतिक्रिया समय के लिए कॉन्फ़िगर किया जाएगा। इसके अतिरिक्त, कोई भी व्यक्ति जो किसी ऐसे पृष्ठ पर गया है, जो CDN से लिंक करता है, फ़ाइल की अपनी कैश्ड कॉपी का उपयोग करेगा, इसलिए उन्हें प्रतिलिपि डाउनलोड करने की भी आवश्यकता नहीं होगी, जिससे प्रारंभिक लोडिंग और भी तेज़ हो जाएगी।

फिर CDN घटने की संभावना (यदि संभव नहीं है, लेकिन सुरक्षित है) के मामले में अपने स्वयं के सर्वर पर एक फॉलबैक संदर्भ जोड़ें। कमियां समझने में अपेक्षाकृत आसान हैं, लेकिन उपयोग की जा रही स्क्रिप्ट के अनुरूप अनुकूलित करने की आवश्यकता है:

<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
<script>
    if (!window.jQuery) document.write('<script src="/path/to/jquery-ver.sion.min.js"><\/script>');
</script>

सुनिश्चित करें कि आप </script>किसी <script>तत्व के भीतर कहीं भी नहीं लिखते हैं , क्योंकि यह HTML तत्व को बंद कर देगा और स्क्रिप्ट को विफल कर देगा। साधारण सुधार एक भागने के रूप में एक बैकस्लैश का उपयोग करना है <\/script>:।


दोनों करने का एक और कारण:

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


दोनों करने का एक और कारण:

हाल ही में मैं इंटरनेट आउटेज की एक स्ट्रिंग के साथ मारा गया हूं। मैं उन परियोजनाओं पर स्थानीय रूप से काम करने में सक्षम था जहाँ मैं स्क्रिप्ट संसाधनों की स्थानीय प्रतियां जुड़ा हुआ था, और मुझे जल्दी से पता चला कि स्थानीय प्रतियां जुड़ी होने के लिए कई परियोजनाएँ थीं।


+1 आपको CDN के लाभ देता है और संभावित नुकसान को भी कवर करता है।
क्वेंटिन-स्टारिन

5
क्या प्रासंगिकता अपटाइम है? अगर उसकी साइट नहीं है, तो js ऑनलाइन होने से शायद ही कोई फायदा हो :)
बोरिस यांकोव

3
@BorisYankov, यदि CDN नीचे है और आपकी साइट ऊपर है, और आपने स्थानीय फ़ॉलबैक का उपयोग नहीं किया है, तो आपकी साइट काम नहीं करेगी । यह uptime की प्रासंगिकता है। यदि आपकी साइट नीचे है, तो आपकी साइट नीचे है और स्थानीय प्रतिलिपि अभ्यस्त मामला नहीं है।
zzzzBov

सीडीएन में सभी जगह सर्वर होंगे, इसलिए आपको निकटतम नोड से संसाधन मिलेगा।
हंज़ोलो

35

मेरे पास एक ही सवाल था, फिर मैंने इस लेख को पढ़ा और मुझे Google को अपने jQuery पुस्तकालय की मेजबानी करने के विचार पर बेचा गया।

यह आलेख बताता है कि आपके पुस्तकालयों को Google के सामग्री वितरण नेटवर्क (CDN) द्वारा होस्ट किए जाने के मुख्य लाभ हैं:

  • घटाई गई विलंबता - आपके सर्वर के पास भौतिक रूप से नहीं आने वाले उपयोगकर्ता Google से तेजी से jQuery डाउनलोड कर पाएंगे, यदि आप उन्हें अपने मनमाने ढंग से स्थित सर्वर से डाउनलोड करने के लिए बाध्य करते हैं।
  • बढ़ी हुई समानांतरता - ब्राउज़र एक साथ किए जा सकने वाले कनेक्शन की संख्या को सीमित करते हैं। किस ब्राउज़र पर निर्भर करते हुए, यह सीमा प्रति होस्टनाम दो कनेक्शन जितनी कम हो सकती है। Google AJAX लाइब्रेरीज़ CDN का उपयोग करने से आपकी साइट का एक अनुरोध समाप्त हो जाता है, जिससे आपकी स्थानीय सामग्री समानांतर में डाउनलोड की जा सकती है।
  • बेहतर कैशिंग - Google AJAX लाइब्रेरीज़ का उपयोग करते हुए, आपके उपयोगकर्ताओं को jQuery को डाउनलोड करने की आवश्यकता नहीं हो सकती है। दूसरी ओर, यदि आप स्थानीय रूप से jQuery होस्ट कर रहे हैं, तो आपके उपयोगकर्ताओं को इसे कम से कम एक बार डाउनलोड करना होगा। आपके प्रत्येक उपयोगकर्ता के पास पहले से ही अपने ब्राउज़र के कैश में jQuery की दर्जनों समान प्रतियाँ हैं, लेकिन जब वे आपकी साइट पर आते हैं, तो jQuery की उन प्रतियों को अनदेखा कर दिया जाता है।

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


4
आह, मुझे यकीन है कि मैं Google की तुलना में स्थैतिक संपत्ति की मेजबानी करने के लिए एक बेहतर काम कर सकता हूं। ;)
Xeoncross

दोनों का उपयोग न करना (सीडीएन + लोकल फालबैक) केवल मैला है। शर्म करो यह शीर्ष उत्तर imho है।
क्वेंटिन-स्टारिन

@qes फेयर काफी, मैंने अपने जवाब के अंत में एक नया वाक्य जोड़ा है।
CFL_Jeff

17

व्यक्तिगत रूप से, मैं http://html5boilerplate.com/ से एक क्यू लेता हूं

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script>!window.jQuery && document.write(unescape('%3Cscript src="includes/js/libs/jquery-1.6.1.min.js"%3E%3C/script%3E'))</script>

यह Google से मुख्य jQuery फ़ाइल को खींचता है, लेकिन यदि यह किसी कारण से लोड नहीं होता है, तो अगली पंक्ति इसे आपके स्वयं के सर्वर से लोड करती है।


5
इससे आपको ऑफ़लाइन विकास करने का अतिरिक्त लाभ मिला है।
आरएसजी

एक प्रोटोकॉल-सापेक्ष URL का उपयोग अब उतना उपयोगी नहीं है जितना एक बार था (देखें paulirish.com/2010/the-protocol-relative-url )। यह सिर्फ यहाँ टाइप करने के लिए उचित है https://
जीकेएफएक्स

5

सीडीएन का उपयोग करना एक बेहतर अभ्यास है, और यदि वह सीडीएन Google के रूप में होता है, तो सभी बेहतर - जैसा कि @CFL_Jeff और @Morons दोनों ने नोट किया है।

मैं इस उत्तर को कुछ और इंगित करने के लिए जोड़ रहा हूं जो अक्सर कहीं और इंगित करते समय अनदेखा हो जाता है, जो मिश्रित सामग्री चेतावनी से बच रहा है । प्रोटोकॉल-कम URL का उपयोग करने पर विचार करें, उदाहरण के लिए:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js" type="text/javascript">
</script>

प्रोटोकॉल-कम URL का उपयोग करने में अभी भी कुछ समर्थन मुद्दे हैं, इसलिए क्या मैं अपने सभी http: // लिंक को सिर्फ // में बदल सकता हूं , इस पर जवाब के लिए एक जेंडर भी ले सकते हैं? एसओ पर, लेकिन कम से कम संभावित मिश्रित-सामग्री चेतावनियों को किसी तरह से संभालने की कोशिश करें ।


4

आपको इसे Google की API लाइब्रेरी में संदर्भित करना चाहिए ।

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


0

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

मैं पिछले उत्तरों के आधार पर निम्नलिखित विधि प्रस्तावित करता हूं:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script type="text/javascript">

if(!window.jQuery)
{
    //Creates the script element
    var script = document.createElement('script'); 
    //Adds the type attribute with "text/javascript" value
        script.setAttribute('type', 'text/javascript'); 
    //Adds the source attribute and populates it
        script.setAttribute('src', 'Put_The_Relative_Path_To_Your_JavaScript_File_Here'); 
    //Adds it to the end of the body, as it is good practice, to prevent render-blocking.  
    document.body.appendChild(script);

}

//Note that there's no need for you to verify with an onload function, since all scripts
//must be loaded before going to the next one! 

</script>

0

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


एक सुरक्षा नीति जो ब्लैकलिस्ट या अन्यथा jQuery के Google के CDN को प्रतिबंधित करती है, केवल पूछने वाले की ही नहीं, बहुत सारी वेब साइटों को तोड़ने वाली है । दूसरे शब्दों में, चिंता करने के लिए बड़ी समस्याएं हैं।

2
@Snowman ... चीन में महान फ़ायरवॉल की तरह (जो नियमित रूप से स्टैक एक्सचेंज साइटों को तोड़ता है जो अपनी स्क्रिप्ट के लिए सीडीएन का उपयोग करता है)?
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.