2012-12-19 12 views
15

कैसे/कब/कहाँ शामिल करें मैं अपने जावास्क्रिप्ट (jQuery) कार्यों को पकड़ने के सर्वोत्तम तरीके पर कुछ सलाह ढूंढ रहा हूं।बाहरी जावास्क्रिप्ट

मैं एमवीसी/रेज़र में विकास कर रहा हूं और इसलिए एक लेआउट पेज है। मैं यहां अपनी jQuery लाइब्रेरी और एक बाहरी जावास्क्रिप्ट फ़ाइल शामिल करता हूं ताकि यह प्रत्येक पृष्ठ में उपलब्ध हो।

यह अच्छी तरह से काम कर रहा है, लेकिन अब मैं इस तथ्य से बहुत जागरूक हो रहा हूं कि मैं प्रत्येक पृष्ठ पर जेएस की लगभग 300 लाइनें जोड़ रहा हूं, जहां शायद इनमें से आधे इन पृष्ठों में से किसी एक में उपयोग किया जा सकता है।

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

  • एचटीएमएल आम तौर पर स्वीकार्य अंदर जे एस डाल रहा है जब चर रेजर का उपयोग कर सेट किया जाता है:

    मैं इस व्यवस्था के चारों ओर सवालों की एक जोड़ी है? एक बाहरी जेएस फ़ाइल

  • में एक चर पारित करने का एक साफ तरीका प्रतीत नहीं होता है, क्या मुझे अपने कार्यों को अलग-अलग जेएस फाइलों में विभाजित करना चाहिए और साइट में प्रत्येक पृष्ठ के लिए बस क्या आवश्यक है?
  • अगर मैं उन्हें कई फाइलों में विभाजित करना चाहता था, तो यह jQuery के (document).ready के साथ कैसे काम करेगा? क्या मुझे इसका उपयोग करने की ज़रूरत है यदि मैं शामिल सभी जावास्क्रिप्ट का उपयोग किया जाना है?

मुझे यकीन है कि यह काले और सफेद उत्तर की तुलना में राय की बात करेगा, लेकिन मैं आगे बढ़ने से पहले अपने सभी विकल्पों पर विचार करना चाहता हूं। भले ही यह ठीक काम करता है, मैं मदद नहीं कर सकता लेकिन महसूस करता हूं कि एक बेहतर/साफ तरीका है।

उत्तर

12

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

मैं निश्चित रूप से जेएस को अलग रखूंगा, आप प्रत्येक पृष्ठ पर एक स्निपेट प्राप्त कर सकते हैं जो जेएस को शुरू करता है कि उस particurlar दृश्य की जरूरत है। देखा गया तो जे एस

$(document).ready(function() { 
    mysite.mypage(); 
}); 

चलाने के लिए समारोह mysite.mypage जरूरत है कि में नीचे की तरह कुछ रखो() बाहरी जे एस फ़ाइल में परिभाषित किया जा सकता है। 300 लाइनें दुनिया का अंत नहीं है, मैं कहूंगा कि यह ऑप्टिमाइज़ेशन के बारे में चिंता करने के लिए शायद बहुत जल्दी है।

आप हमेशा जेएस फ़ाइल आकार को कम करने के लिए कम से कम देख सकते हैं। एक त्वरित और आसान तरीका यह करने के लिए यहाँ है:

http://www.minifyjavascript.com/

+2

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

+1

/सहमत हैं। यदि आपके पास केवल 300 लाइनें हैं तो मैं इसे एक पृष्ठ पर रखूंगा। यदि आप प्रत्येक पृष्ठ पर उन सभी कार्यों को चलाने के बारे में चिंतित हैं तो आप उन्हें अनुभागों में विभाजित कर सकते हैं और उस पृष्ठ को चेक कर सकते हैं जिस पर आप हैं, फिर केवल उस पृष्ठ के लिए आवश्यक फ़ंक्शंस चलाएं। मैं आमतौर पर अपने जेएस को नाम देता हूं और प्रत्येक के लिए एक init प्रदान करता हूं और इसे एक कथन में चिपकाता हूं: अगर ($ ('# होमपेज') {MySite.Homepage.init()} – Syon

+2

@ साइयन: आप "उन सभी को नहीं चला रहे हैं प्रत्येक पृष्ठ पर फ़ंक्शंस ", आप केवल उनमें शामिल हैं। साथ ही, प्रत्येक जेएस मॉड्यूल को एक अलग फ़ाइल में अलग करना आपकी फ़ाइलों के बेहतर प्रबंधन के लिए समझ में आता है, लेकिन प्रदर्शन के अनुसार मैं हमेशा एक फ़ाइल में सब कुछ डालता हूं। उपयोगकर्ता इसे एक बार लोड करता है और कैश बाकी करेंगे। शायद सबसे अच्छा सेट अप है, अपने जेएस मॉड्यूल को विभिन्न फाइलों में तार्किक रूप से अलग करना और अपने जावास्क्रिप्ट कोड को संक्षिप्त और संक्षिप्त करने के लिए प्रीप्रोसेसर का उपयोग करना। – Amberlamps

3

क्या तुमने कभी require.js के बारे में सुना है? http://requirejs.org/ मुझे यह वास्तव में उपयोगी लगता है।

यह एक मॉड्यूल लोडर है ताकि आप अपने सभी जेएस कोड को अलग-अलग फाइलों में विभाजित कर सकें और केवल प्रत्येक पृष्ठ पर आपको लोड कर सकें।

मुझे एक बाहरी जेएस फ़ाइल में एक चर पारित करने के बारे में पता नहीं है, मुझे लगता है कि यह संभव/सही 'तरीका' नहीं है।

आप प्रत्येक बाहरी जेएस फ़ाइल को उस फ़ंक्शन में बना सकते हैं जो मानकों को स्वीकार करता है और देता है।फिर पृष्ठ में आपको इसका उपयोग करने की आवश्यकता है: - फ़ाइल निर्भरता शामिल करें - फ़ंक्शन

जो कुछ भी करता है, वह आपके दूसरे सुझाव की तरह लगता है।

$ (document.ready) प्रश्न के लिए यह वास्तव में आपके ऊपर है। आपको इसका उपयोग करने की ज़रूरत नहीं है, लेकिन कुछ चीजों के लिए यह उपयोगी है, इस अवलोकन को देखें: http://docs.jquery.com/Tutorials:Introducing_ $ (दस्तावेज़) .ready()

+0

बाहरी जेएस फ़ाइल में चर पारित करने में इतना मुश्किल क्या है। मूल्यों को सही तरीके से पास करने के लिए आपको बाहरी कार्यों के हस्ताक्षर को जानना होगा। लेकिन आंतरिक कार्यों के लिए यह वही बात है। – Amberlamps

+0

@Amberlamps क्या आपके पास एक बाहरी जेएस फ़ाइल में एक चर पारित करने का एक उदाहरण है? मेरे पास वर्तमान में मेरे HTML के अंदर एक फ़ंक्शन है क्योंकि यह मेरे एमवीसी/रेज़र कोड में एक varibale सेट का उपयोग करता है। –

+1

मुझे लगता है कि ऐसा कुछ है, जो मुझे नहीं मिलता है, क्योंकि यह बहुत आसान है। उस बिंदु पर जब दस्तावेज़ पूरी तरह से लोड हो जाता है, तो किसी भी वैश्विक कार्य और चर के स्थान पर ध्यान दिए बिना किसी भी अन्य कार्य द्वारा पहुंचा जा सकता है। यदि आपके पास बाहरी जेएस फ़ाइल है जिसमें फ़ंक्शन 'फ़ंक्शन sayName (name) {alert (name) शामिल है; } ', आप कहीं से भी' sayName ('एलन') 'कॉल कर सकते हैं। – Amberlamps

संबंधित मुद्दे