क्या जेएस कोड को html फ़ाइल पर या किसी बाहरी फ़ाइल में रखना बेहतर है?


16

यदि मैं एक पृष्ठ की वेबसाइट डिजाइन कर रहा हूं, तो क्या मेरे जेएस कोड के लिए बाहरी फ़ाइल बनाना बेहतर है, या बस इसे html कोड में रखा जाए? क्या इसे लोड करने के लिए पेज पर तेजी से डाला जा रहा है? क्या मैं कोड के लिए उपयोगकर्ताओं के अनुरोधों को अस्वीकार करने के लिए अनुमतियां बदल सकता हूं, लेकिन HTML पेज अभी भी कोड को कॉल कर सकता है?

जवाबों:


26

आपको अपना जेएस कोड एक अलग फाइल में डालना चाहिए क्योंकि इससे परीक्षण और विकास करना आसान हो जाता है। यह सवाल कि आप कोड की सेवा कैसे करते हैं, यह अलग बात है।

  • HTML और JS को अलग-अलग रखने से यह फायदा होता है कि एक ग्राहक JS को कैश कर सकता है। इसके लिए आपको उपयुक्त हेडर भेजना होगा ताकि क्लाइंट हर बार एक नया अनुरोध जारी न करे। यदि आप एक अद्यतन करना चाहते हैं और इस प्रकार क्लाइंट कैश को अमान्य करना चाहते हैं तो कैशिंग समस्याग्रस्त है। एक विधि फ़ाइल नाम में एक संस्करण संख्या शामिल करने के लिए है, जैसे /static/mylibrary-1.12.2.js

    यदि JS एक अलग फ़ाइल में है, तो आप उस तक पहुँच को प्रतिबंधित नहीं कर सकते हैं: यह बताने के लिए कि तकनीकी रूप से असंभव है (तकनीकी रूप से असंभव है) यदि JS फाइल के लिए अनुरोध किया गया था क्योंकि आपने इसे अपने HTML पृष्ठ पर संदर्भित किया था, या क्योंकि कोई इसे डाउनलोड करना चाहता है। सीधे। हालांकि आप कुकीज़ का उपयोग कर सकते हैं और उन ग्राहकों की सेवा करने से इंकार कर सकते हैं जो कुछ कुकीज़ को प्रसारित नहीं करते हैं (लेकिन यह मूर्खतापूर्ण होगा)।

  • HTML के अंदर JS सेवित करने से प्रत्येक पृष्ठ का आकार बढ़ जाता है - लेकिन यह ठीक है अगर एक ग्राहक कई पृष्ठों को देखने की संभावना नहीं है। क्योंकि क्लाइंट जेएस के लिए एक अलग अनुरोध जारी नहीं करता है, यह रणनीति पृष्ठ को तेजी से लोड करती है - पहली बार कम से कम, लेकिन एक ब्रेक-ईवन बिंदु है जहां कैशिंग बेहतर है। आप PHP के माध्यम से जेएस को शामिल कर सकते हैं।

    यहां क्लाइंट को JS फाइल के लिए अलग से एक्सेस की जरूरत नहीं है, जिसे आप चाहें तो छिपा सकते हैं। लेकिन कोई भी अभी भी जेएस कोड को HTML के अंदर देख सकता है।

लोड समय को कम करने के लिए अन्य रणनीतियों में शामिल हैं

  • JS minification जो आपके द्वारा दी जाने वाली JS फ़ाइल के आकार को कम करता है। चूंकि कोड तैनात करते समय केवल एक बार ही मिनिमाइजेशन होता है, यह बाइट्स को बचाने के लिए एक बहुत ही कुशल तरीका है। OTOH यह आपके कोड को इच्छुक आगंतुकों के लिए समझने में कठिन बनाता है।

    मीनिंग से संबंधित एक ही फाइल में आपके सभी जेएस फाइलों को संयोजित करने का अभ्यास है। यह आवश्यक अनुरोधों की संख्या को कम करता है।

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

ये तकनीक छवियों जैसे अन्य संसाधनों पर भी लागू होती हैं।

  • छवियों को HTML या CSS में डेटा-URL के साथ इनलाइन किया जा सकता है। यह केवल छोटे, सरल चित्रों के लिए व्यावहारिक है क्योंकि बेस 64-एन्कोडिंग आकार को बढ़ाता है। यह अभी भी एक और अनुरोध से तेज हो सकता है।
  • एकाधिक छोटी छवियों (आइकन, बटन) को एक ही छवि में जोड़ा जा सकता है, और फिर स्प्राइट के रूप में निकाला जा सकता है।
  • छवियों को सर्वर द्वारा उस आकार में कम किया जा सकता है जिसमें वे वास्तव में वेबसाइट पर उपयोग किए जाते हैं, जो बैंडविड्थ बचाता है। थंबनेल छवियों की तुलना करें।
  • कुछ ग्राफिक्स के लिए, एसवीजी जैसे पाठ-आधारित चित्र बहुत छोटे हो सकते हैं।

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

5

मैं एक पेज की वेबसाइट डिजाइन कर रहा हूं

यदि आपके पास शाब्दिक रूप से सिर्फ एक पृष्ठ है, तो हाँ, यह बेहतर है (प्रदर्शन के दृष्टिकोण से) एक फ़ाइल में सब कुछ परोसने के लिए ... स्टाइलशीट, जावास्क्रिप्ट और यहां तक ​​कि छवियां (डेटा-यूआरआई के साथ छोटे चित्र)। यह बाहरी संसाधनों को पुनः प्राप्त करने के लिए आवश्यक अतिरिक्त HTTP अनुरोधों को समाप्त करता है जो अपेक्षाकृत धीमी गति से होते हैं।

परिणामी फ़ाइल को सेवा करने से पहले gzipped किया जाना चाहिए, जो बड़े पैमाने पर ऑल-टेक्स्ट प्रतिक्रिया के आकार को कम करेगा।

आपको अभी भी पृष्ठ पर बाहरी छवियों को रखने पर विचार करना चाहिए, क्योंकि डेटा-यूआरआई और ब्राउज़र संगतता के आकार की सीमाएं हैं। (उदा। IE8 की सीमा 32KB है, जो बेस 64 एनकोडिंग की प्रकृति के कारण लगभग 23KB के वास्तविक फ़ाइल आकार के बराबर है।)

क्या मैं कोड के लिए उपयोगकर्ताओं के अनुरोधों को अस्वीकार करने के लिए अनुमतियां बदल सकता हूं, लेकिन HTML पेज अभी भी कोड को कॉल कर सकता है?

नहीं। आकस्मिक पर्यवेक्षक से इसे "छिपाने" के लिए सर्वोत्तम रूप से कोड को बाधित किया जा सकता है, लेकिन यह कोई वास्तविक सुरक्षा प्रदान नहीं करता है।


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

Js, css और images को अलग-अलग फ़ाइलों में डालकर, आप ब्राउज़र को फ़ाइलों को कैश करने की अनुमति देते हैं। इसलिए यदि पृष्ठ सामग्री बदलती है, तो केवल html को पुनः लोड करना होगा।
थियरी जे

@ThierryJ। ठीक है आप फ़ाइलों को कैश कर सकते हैं लेकिन पहले पेज लोड (जो नए उपयोगकर्ताओं को प्राप्त करने के लिए बहुत महत्वपूर्ण है) अभी भी सभी फ़ाइलों को शामिल करना बहुत तेज़ है क्योंकि कैशिंग प्रभाव में नहीं है। इसके अलावा, कंप्यूटर को अभी भी कैश्ड फ़ाइल को लोड करना है, एक कदम जो पूरी तरह से छोड़ दिया जाता है यदि आप फ़ाइल को HTML में शामिल करते हैं। यह शायद लगभग हर मामले में पहले स्थान पर HTML में शामिल फ़ाइल को तेज़ करने वाला है। आप HTML को फिर से लोड करने जा रहे हैं, और जावास्क्रिप्ट भाग कैंट सौ kB से अधिक हो सकता है, यह नगण्य है।
युंगगुन

4

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

यदि आप इसे डाउनलोड नहीं कर सकते हैं तो आपके पास पृष्ठ पर जेएस का उपयोग नहीं हो सकता है।

उस संबंध में, यदि आप JS को इनलाइन करते हैं या इसे किसी फ़ाइल में डालते हैं, तो इससे कोई अंतर नहीं पड़ता है, हालाँकि आम अभ्यास JS फ़ाइल (एक के लिए चिंताओं का पृथक्करण) का उपयोग करना है।

यदि आपके पास कोड है जिसे आप ब्राउज़र के माध्यम से उजागर नहीं करना चाहते हैं, तो आपको सर्वर साइड कोड का उपयोग करने की आवश्यकता होगी (जैसे कि नोड। जेएस, पीएचपी, पर्ल, एस्प.net, जेएसपी - बहुत सारे विकल्प हैं) और इसके साथ बातचीत करें ब्राउज़र से - या तो प्रारंभिक पृष्ठ लोड पर या AJAX का उपयोग करना ।


2

वैसे यह कोड की मात्रा पर निर्भर करता है, और आप प्रोग्रामर / सॉफ्टवेयर इंजीनियर बनाम कोडर होने के बारे में कितने गंभीर हैं। मैंने डिजाइनरों के झुंड के साथ काम किया जो कोड के छोटे स्निपेट को सीधे HTML में डालते हैं, और जब मैंने क्रिंग किया - तो यह वास्तव में काम करता था।

हालाँकि यह कुछ ऐसा नहीं है जो मैं खुद करूँगा, और यदि आप सॉफ़्टवेयर विकास की सर्वोत्तम प्रथाओं को जानना चाहते हैं, तो मैं आपको दृढ़ता से सलाह देता हूं कि आप बाहरी *.jsफ़ाइल में सब कुछ पियें और उसे <script>टैग के माध्यम से लोड करें।

अपने दूसरे बिंदु के बारे में, नहीं, आप अपने कोड को देखने के लिए उपयोगकर्ता या ब्राउज़र से इनकार नहीं कर सकते, कुछ ऐसा है, obfuscationजो आपके कोड को पढ़ने के लिए कठिन बना देगा, हालांकि प्रदर्शन में गिरावट आएगी।


1

क्या मेरे जेएस कोड के लिए बाहरी फ़ाइल बनाना बेहतर है, या बस इसे html कोड में रखा जाए?

अपने जेएस कोड के लिए एक बाहरी फ़ाइल बनाना बेहतर है। आपके पास क्लाइंट के लिए एक या दो फाइलें होना भी बेहतर है। लेकिन, यह भी बेहतर है कि आपके जेएस कोड को बनाए रखने की समस्याओं के लिए कई गुना फ़ाइलों में विभाजित किया जाए। ऐसा करने में सक्षम होने के लिए, आप गुल की तरह पूर्वप्रक्रमकों का उपयोग कर सकते हैं जो आपकी अलग-अलग JS फ़ाइलों को एक फ़ाइल में संयोजित करेगा।

कम फ़ाइलों की सेवा करना बेहतर है क्योंकि क्लाइंट के पास संभालने के लिए कम HTTP अनुरोध होंगे।

क्या इसे लोड करने के लिए पेज पर तेजी से डाला जा रहा है?

हां, जाहिर है कि यह तेज है क्योंकि आप केवल HTML के लिए एक ही अनुरोध करते हैं, जबकि आप बाहरी के रूप में अपने जेएस कोड के साथ कई अनुरोध (कम से कम 2) करेंगे। यह केवल तभी है जब आपका जेएस कोड किसी भी पक्ष में छोटा नहीं है, और यह ध्यान में नहीं रखता है कि आपके कोड को बनाए रखने में कितना मुश्किल होगा अगर यह एक ही एचटीएमएल पेज में है।

क्या मैं कोड के लिए उपयोगकर्ताओं के अनुरोधों को अस्वीकार करने के लिए अनुमतियां बदल सकता हूं, लेकिन HTML पेज अभी भी कोड को कॉल कर सकता है?

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


0

HTML और जावास्क्रिप्ट सामग्री को अलग-अलग फ़ाइलों में अलग करने के कई लाभ:

  • फ़ाइलों की व्यक्तिगत फ़ाइलों की पठनीयता बढ़ाता है
  • चूंकि जावास्क्रिप्ट कोड अब एक html फ़ाइल के भीतर सीमित नहीं है, इसलिए अन्य HTML और जावास्क्रिप्ट फाइलें या लाइब्रेरी आपके जावास्क्रिप्ट कोड का उपयोग कर सकते हैं
  • इसी तरह से एक अलग फाइल में डाला गया जावास्क्रिप्ट कोड आसानी से जटिल गणना (मशीन लर्निंग, 3 डी ग्राफिक्स, फ्रेमवर्क, आदि लाइब्रेरी) करने के लिए अन्य फाइलों और उन्नत पुस्तकालयों का उपयोग कर सकता है।
  • जावास्क्रिप्ट को क्लाइंट की तरफ से कैश किया जा सकता है और इसके माध्यम से केवल html सामग्री को पेज रिफ्रेश पर पुनः लोड करना होगा
  • अच्छी / आधुनिक सॉफ्टवेयर इंजीनियरिंग प्रथाओं को एक अलग जावास्क्रिप्ट फ़ाइल / मॉड्यूल / पुस्तकालय (डिजाइन पैटर्न, टाइपस्क्रिप्ट / बेबेल, आदि के बारे में पढ़ा) के लिए और अधिक आसानी से लागू किया जा सकता है
  • जावास्क्रिप्ट कोड आसानी से obfuscated या 'छिपा' किया जा सकता है आगंतुकों से वेबपेज के लिए minification / uglification द्वारा
  • जावास्क्रिप्ट फ़ाइलों को एक साथ एक एकल फ़ाइल / मॉड्यूल में gulp, webpack, आदि के माध्यम से बंडल किया जा सकता है

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