आधुनिक साइटें अक्सर अपनी सभी जावास्क्रिप्ट को एक एकल, बड़े में जोड़ती हैं Main.js लिपि। यह नियमित रूप से आपके सभी पृष्ठों या मार्गों के लिए स्क्रिप्ट्स होता है, भले ही उपयोगकर्ताओं को केवल उस पृष्ठ के लिए एक छोटा सा भाग की आवश्यकता हो।
जब जावास्क्रिप्ट को इस तरह से परोसा जाता है, तो आपके वेब पृष्ठों का लोडिंग प्रदर्शन पीड़ित हो सकता है - खासकर साथ प्रतिक्रियात्मक वेब डिज़ाइन मोबाइल उपकरणों पर। तो चलो जावास्क्रिप्ट कोड विभाजन को लागू करके इसे ठीक करें।
पृष्ठस्पति अंतर्दृष्टि एक ऑनलाइन उपकरण है जो आपकी साइट के प्रदर्शन को भी हाइलाइट कर सकता है - और क्रोम उपयोगकर्ता अनुभव रिपोर्ट से आपकी साइट के प्रदर्शन पर लाइटहाउस और रीयल-वर्ल्ड डेटा से लैब डेटा शामिल है। तुम्हारी वेब होस्टिंग सेवा में अन्य विकल्प हो सकते हैं।
अगर ऐसा लगता है कि आपके पास महंगा स्क्रिप्ट्स हैं जो बेहतर विभाजित हो सकती हैं, तो अगले टूल को देखने के लिए क्रोम डेवलपर टूल्स (देवटूल और जीटी; टॉप-राइट मेनू और जीटी; अधिक उपकरण और जीटी; कवरेज) में कोड कवरेज सुविधा है। यह मापता है कि आपके पृष्ठ में कितना अप्रयुक्त जावास्क्रिप्ट (और सीएसएस) है। प्रत्येक स्क्रिप्ट के लिए सारांशित, देवटूल 'अप्रयुक्त बाइट्स' दिखाएंगे। यह कोड है जिसे आप इसे विभाजित करने और आलसी लोडिंग पर विचार कर सकते हैं जब उपयोगकर्ता को इसकी आवश्यकता होती है।
जब कोड विभाजित जावास्क्रिप्ट की बात आती है तो आप कुछ अलग-अलग दृष्टिकोण ले सकते हैं। आपकी साइट पर यह कितना लागू होता है, इस पर निर्भर करता है कि आप पृष्ठ / एप्लिकेशन 'तर्क' को विभाजित करना चाहते हैं या अन्य 'विक्रेताओं' से पुस्तकालय / ढांचे को विभाजित करना चाहते हैं।
गतिशील कोड विभाजन: हम में से कई 'स्थिर रूप से' जावास्क्रिप्ट मॉड्यूल और निर्भरता आयात करते हैं ताकि वे बिल्ड टाइम पर एक फ़ाइल में एक साथ बंडल किए जाएं। 'गतिशील' कोड विभाजन आपकी जावास्क्रिप्ट में अंक को परिभाषित करने की क्षमता जोड़ता है जिसे आप विभाजित करना चाहते हैं और आलसी-लोड की आवश्यकता के अनुसार। आधुनिक जावास्क्रिप्ट गतिशील का उपयोग करता है आयात() इसे प्राप्त करने के लिए बयान। हम इसे जल्द ही कवर करेंगे।
विक्रेता कोड विभाजन: ढांचे और पुस्तकालय जिन पर आप भरोसा करते हैं (जैसे प्रतिक्रिया, कोणीय, वू या लोजैश) आपके उपयोगकर्ताओं को भेजे गए स्क्रिप्ट में बदलने की संभावना नहीं है, अक्सर आपकी साइट के लिए 'तर्क' के रूप में। आपकी साइट पर लौटने वाले उपयोगकर्ताओं के लिए कैश अमान्यता के नकारात्मक प्रभाव को कम करने के लिए, आप अपने 'विक्रेताओं' को एक अलग स्क्रिप्ट में विभाजित कर सकते हैं।
प्रवेश-बिंदु कोड विभाजन: प्रविष्टियां आपकी साइट या ऐप में अंक शुरू कर रही हैं कि वेबपैक जैसे टूल आपके निर्भरता पेड़ को बनाने के लिए देख सकते हैं। प्रविष्टियों द्वारा विभाजन उन पृष्ठों के लिए उपयोगी है जहां क्लाइंट-साइड रूटिंग का उपयोग नहीं किया जाता है या आप सर्वर और क्लाइंट-साइड प्रतिपादन के संयोजन पर भरोसा कर रहे हैं।
इस आलेख में हमारे उद्देश्यों के लिए, हम गतिशील कोड विभाजन पर ध्यान केंद्रित करेंगे।
आइए के जावास्क्रिप्ट प्रदर्शन को अनुकूलित करें [9 7] सरल एप्लिकेशन जो तीन नंबरों को टाइप करता है
कोड विभाजन के माध्यम से - यह मेरे सहयोगी हाउससेन डीजर्डेह द्वारा एक ऐप है। वर्कफ़्लो हम अपने जावास्क्रिप्ट लोड को जल्दी से बनाने के लिए उपयोग करेंगे, माप, अनुकूलन और निगरानी करें। यहाँ से शुरू ।किसी भी अनुकूलन को जोड़ने का प्रयास करने से पहले, हम पहले हमारी जावास्क्रिप्ट के प्रदर्शन को मापने जा रहे हैं। चूंकि मैजिक सॉर्टर ऐप को गड़बड़ पर होस्ट किया गया है, हम इसके कोडिंग वातावरण का उपयोग करेंगे। यहां बताया गया है कि इसके बारे में कैसे:
ऐसा लगता है कि यह सरल एप्लिकेशन कुछ संख्याओं के माध्यम से हल करने के लिए 71.2 केबी जावास्क्रिप्ट का उपयोग कर रहा है। यह निश्चित रूप से सही नहीं लगता है। हमारे स्रोत में src / index.js , लोजैश उपयोगिता पुस्तकालय आयात किया जाता है और हम उपयोग करते हैं इसके अनुसार क्रमबद्ध करें - हमारी संख्या को सॉर्ट करने के लिए इसकी सॉर्टिंग यूटिलिटीज में से एक। लॉश कई उपयोगी कार्यों की पेशकश करता है लेकिन ऐप केवल एक ही विधि का उपयोग करता है। यह तीसरे पक्ष की निर्भरता को स्थापित और आयात करने की एक आम गलती है जब वास्तविक तथ्य में आपको केवल इसके एक छोटे से हिस्से का उपयोग करने की आवश्यकता होती है।
हमारे जावास्क्रिप्ट बंडल आकार को ट्रिम करने के लिए कुछ विकल्प उपलब्ध हैं:
विकल्प 1 और 2 हमारे बंडल आकार को कम करने के लिए उपयुक्त हैं - ये शायद एक वास्तविक अनुप्रयोग के लिए समझ में आता है। शिक्षण उद्देश्यों के लिए, हम कुछ अलग करने की कोशिश कर रहे हैं। विकल्प 3 और 4 एप्लिकेशन के प्रदर्शन में सुधार करने में मदद करें।
हम केवल एकल आयात करने के लिए कुछ फ़ाइलों को संशोधित करेंगे इसके अनुसार क्रमबद्ध करें विधि हमें लोजैश से चाहिए। आइए हमारी जगह के साथ शुरू करते हैं लोटाश पर निर्भरता Package.json :
"lodash": "^4.7.0",
इसके साथ ही:
"lodash.sortby": "^4.7.0",
एसआरसी / index.js में, हम इस और अधिक विशिष्ट मॉड्यूल आयात करेंगे:
जेएस
आयात "./style.css";
"Lodash" से _ आयात करें;
"Lodash.sortby" से सॉर्टबी आयात करें;
इसके बाद, हम अपडेट करेंगे कि मूल्यों को कैसे क्रमबद्ध किया गया है:
जेएस
form.addeventlistener ("जमा करें", e = & gt; {
E.PreventDefault ();
const मान = [input1.valueasnumber, input2.valueasnumber, inpution3.valueasnumber];
const sortedvalues = _.sortby (मान);
कॉन्स्ट सॉर्टेडवल्यूज = सॉर्टबी (मान);
its.innerhtml = `
& lt; h2 & gt;
$ {sortedvalues}
& lt; / h2 & gt;
`
});
जादू संख्या ऐप को पुनः लोड करें, डेवलपर टूल खोलें और फिर से नेटवर्क पैनल को देखें। इस विशिष्ट ऐप के लिए, हमारे बंडल आकार को छोटे काम के साथ चार के पैमाने से कम कर दिया गया था। लेकिन अभी भी सुधार के लिए बहुत अधिक जगह है।
वेबपैक आज वेब डेवलपर्स द्वारा उपयोग किए जाने वाले सबसे लोकप्रिय जावास्क्रिप्ट मॉड्यूल बंडलर्स में से एक है। यह आपके सभी जावास्क्रिप्ट मॉड्यूल और अन्य संपत्तियों को स्थिर फाइलों में 'बंडल' (जोड़ता है) वेब ब्राउज़र पढ़ सकता है।
इस एप्लिकेशन में एकल बंडल को दो अलग-अलग स्क्रिप्ट में विभाजित किया जा सकता है:
गतिशील आयात का उपयोग (के साथ) आयात() कीवर्ड), मांग पर एक दूसरी स्क्रिप्ट आलसी हो सकती है। हमारे मैजिक नंबर ऐप में, स्क्रिप्ट को बनाने वाले कोड को आवश्यकतानुसार लोड किया जा सकता है जब उपयोगकर्ता बटन क्लिक करता है। हम क्रमबद्ध विधि के लिए शीर्ष-स्तरीय आयात को हटाकर शुरू करते हैं src / index.js :
"lodash.sortby" से सॉर्टबी आयात करें;
इवेंट श्रोता के भीतर इसे आयात करें जो बटन पर क्लिक होने पर आग लगाता है:
form.addeventlistener ("जमा करें", e = & gt; {
E.PreventDefault ();
आयात ('lodash.sortby')
.then (मॉड्यूल = & gt; module.default)
.then (सॉर्टिनपूट ())
.कैच (ERR = & GT; {ALERT (ERR)});
});
यह गतिशील आयात() सुविधा जो हम उपयोग कर रहे हैं वह जावास्क्रिप्ट भाषा मानक में एक मॉड्यूल को गतिशील रूप से आयात करने की क्षमता सहित एक मानकस्ट्रैक प्रस्ताव का हिस्सा है। वेबपैक पहले से ही इस वाक्यविन्यास का समर्थन करता है। आप गतिशील आयात के तरीके के बारे में और पढ़ सकते हैं [1 9 4] इस आलेख में
आयात() कथन एक वादा करता है जब यह हल करता है। वेबपैक इसे एक विभाजन बिंदु के रूप में मानता है कि यह एक अलग स्क्रिप्ट (या चंक) में टूट जाएगा। एक बार मॉड्यूल लौटा दिया जाता है, module.default द्वारा प्रदान किए गए डिफ़ॉल्ट निर्यात को संदर्भित करने के लिए उपयोग किया जाता है लोटाश । वादा दूसरे के साथ जंजीर है ।तब फिर() कॉलिंग ए सॉर्टिनपूट तीन इनपुट मानों को क्रमबद्ध करने के लिए विधि। वादा श्रृंखला के अंत में, ।पकड़() एक त्रुटि के परिणामस्वरूप वादा को खारिज करने के लिए कहा जाता है।
एक वास्तविक उत्पादन अनुप्रयोगों में, आपको उचित रूप से गतिशील आयात त्रुटियों को संभालना चाहिए। सरल अलर्ट संदेश (यहां उपयोग की जाने वाली चीज़ों के समान) क्या उपयोग किए जाते हैं और उपयोगकर्ताओं को कुछ गलत साबित करने के लिए सर्वोत्तम उपयोगकर्ता अनुभव प्रदान नहीं कर सकते हैं।
यदि आप "पार्सिंग त्रुटि: आयात और निर्यात केवल शीर्ष स्तर पर दिखाई दे सकते हैं" की तरह एक फलक त्रुटि देखते हैं, तो पता है कि यह गतिशील आयात वाक्यविन्यास के कारण अभी तक अंतिम रूप नहीं किया जा रहा है। यद्यपि वेबपैक इसका समर्थन करता है, हालांकि ग्लिच द्वारा उपयोग किए जाने वाले एस्लिंट (एक जावास्क्रिप्ट लिंटिंग टूल) के लिए सेटिंग्स को इस वाक्यविन्यास को शामिल करने के लिए अपडेट नहीं किया गया है, लेकिन यह अभी भी काम करता है।
आखिरी चीज जिसे हमें करने की ज़रूरत है वह लिखना है सॉर्टिनपूट हमारी फ़ाइल के अंत में विधि। यह एक समारोह को एक समारोह होना चाहिए जो आयातित विधि में लेता है lodash.sortby । नेस्टेड फ़ंक्शन तीन इनपुट मानों को सॉर्ट कर सकता है और डोम अपडेट कर सकता है:
कॉन्स्ट सॉर्टिनपूट = () = & gt; {
वापसी (सॉर्टबी) = & gt; {
const मान = [
input1.valueasnumber,
input2.valueasnumber,
input3.valueasnumber
];
कॉन्स्ट सॉर्टेडवल्यूज = सॉर्टबी (मान);
its.innerhtml = `
& lt; h2 & gt;
$ {sortedvalues}
& lt; / h2 & gt;
`
};
}
अब आइए आखिरी बार एप्लिकेशन को फिर से लोड करें और नेटवर्क पैनल पर नज़दीकी नजर रखें। ऐप लोड होने पर आपको ध्यान देना चाहिए कि ऐप लोड होने पर केवल एक छोटा प्रारंभिक बंडल डाउनलोड किया जाता है। बटन के बाद इनपुट संख्याओं को सॉर्ट करने के लिए क्लिक किया गया है, सॉर्टिंग कोड युक्त स्क्रिप्ट / चंक को प्राप्त और निष्पादित किया जाता है। क्या आप देखते हैं कि संख्याएं अभी भी सॉर्ट की गई हैं क्योंकि हम उन्हें उम्मीद करेंगे?
जावास्क्रिप्ट कोड विभाजन और आलसी लोडिंग आपके ऐप या साइट के प्रारंभिक बंडल आकार को कम करने के लिए बहुत उपयोगी हो सकती है। यह सीधे उपयोगकर्ताओं के लिए तेजी से पेज लोड समय में परिणाम हो सकता है। हालांकि हमने वेनिला जावास्क्रिप्ट एप्लिकेशन में विभाजन कोड जोड़ने पर देखा है, लेकिन आप इसे पुस्तकालयों या ढांचे के साथ बनाए गए ऐप्स पर भी लागू कर सकते हैं।
कई लोकप्रिय ढांचे गतिशील आयात और वेबपैक का उपयोग करके कोड विभाजन और आलसी लोडिंग जोड़ने का समर्थन करते हैं।
यहां बताया गया है कि आप कितनी आलसी हो सकते हैं- प्रतिक्रिया का उपयोग कर एक फिल्म 'विवरण' घटक (साथ) React.Lazy () और उनकी सस्पेंस सुविधा) एक "लोडिंग ..." फ़ॉलबैक प्रदान करने के लिए जबकि घटक आलसी हो रहा है (देखें) यहां कुछ और विवरण के लिए):
प्रतिक्रिया प्रतिक्रिया, {suspense} 'प्रतिक्रिया' से;
कॉन्स विवरण = react.lazy (() = & gt; आयात ('./ विवरण'));
समारोह ऐप () {
वापसी (
& lt; div & gt;
& lt; h1 & gt; मेरी फिल्म & lt; / h1 & gt;
& lt; सस्पेंस फॉलबैक = "लोड हो रहा है ..." & gt;
& lt; विवरण / & gt;
& lt; / रहस्य और जीटी;
& lt; / div & gt;
);
}
कोड विभाजन आपके उपयोगकर्ता अनुभव पर जावास्क्रिप्ट के प्रभाव को कम करने में मदद कर सकता है। निश्चित रूप से इस पर विचार करें यदि आपके पास बड़ी जावास्क्रिप्ट बंडलों हैं और संदेह में, मापने, अनुकूलित करने और निगरानी करने के लिए मत भूलना।
यह लेख मूल रूप से 317 के अंक में प्रकाशित किया गया था जाल , वेब डिजाइनरों और डेवलपर्स के लिए दुनिया की सबसे अच्छी बिकने वाली पत्रिका। यहां अंक 317 खरीदें या यहां सदस्यता लें ।
संबंधित आलेख:
(छवि क्रेडिट: मैट स्मिथ) [1 9] क्या आप फ़ोटोशॉप �..
(छवि क्रेडिट: मैट क्राउच) [1 9] प्रतिक्रिया वसं�..
मैं बचपन से एक विशाल मंगा प्रशंसक रहा हूं और उस प्�..
मैंने पहली बार ट्विन सिटी ड्रूपल से देखे गए एक बा�..
जब यह आता है विश्वसनीय जीवों को चित्रित करना ..
एक ईवेंट के लिए चित्र बनाना एक शानदार रचनात्मक चु..
डिजिटल पेंटिंग ऐतिहासिक रूप से बहुत कृत्रिम दिख�..
इससे पहले कि मैं एक व्यक्तिगत छवि पर काम करना शुर�..