Webpack, आपकी सभी इंपोर्ट की गई फ़ाइलों को एक साथ जोड़ता है और उन्हें एक या उससे ज़्यादा आउटपुट फ़ाइलों में पैकेज करता है. इन फ़ाइलों को बंडल कहा जाता है. बंडल बनाना आसान है, लेकिन जैसे-जैसे आपके ऐप्लिकेशन की पहुंच बढ़ेगी, आपके बंडल भी बढ़ते जाएंगे. आपको बंडल के साइज़ को मॉनिटर करना होगा, ताकि यह पक्का किया जा सके कि वे बहुत बड़े न हों और आपके ऐप्लिकेशन को लोड होने में लगने वाला समय भी प्रभावित न हो. Webpack, ऐसेट साइज़ के आधार पर परफ़ॉर्मेंस बजट सेट करने की सुविधा देता है. साथ ही, यह आपके लिए बंडल साइज़ पर नज़र रख सकता है.
इसे इस्तेमाल करने का तरीका जानने के लिए, यहां एक ऐप्लिकेशन दिया गया है. यह ऐप्लिकेशन, नए साल के आने में बचे दिनों की गिनती करता है. इसे React और moment.js की मदद से बनाया गया है. (जैसे कि असल दुनिया के ऐप्लिकेशन, जो फ़्रेमवर्क और लाइब्रेरी पर ज़्यादा से ज़्यादा निर्भर होते हैं. 😉)
मापें
इस कोडलैब में, पहले से ही वेबपैक के साथ बंडल किया गया ऐप्लिकेशन मौजूद है.
- प्रोजेक्ट में बदलाव करने के लिए, बदलाव करने के लिए रीमिक्स करें पर क्लिक करें.
- Terminal पर क्लिक करें (ध्यान दें: अगर Terminal बटन नहीं दिखता है, तो आपको फ़ुलस्क्रीन विकल्प का इस्तेमाल करना पड़ सकता है).
- ऐसेट और उनके साइज़ की कलर कोड वाली सूची पाने के लिए, कंसोल में
webpack
टाइप करें.
webpack
मुख्य बंडल को पीले रंग में हाइलाइट किया गया है, क्योंकि यह 244 केबी (250 केबी) से बड़ा है.
ये चेतावनियां, प्रोडक्शन मोड में डिफ़ॉल्ट रूप से चालू होती हैं. साथ ही, एसेट और एंट्री पॉइंट (पेज के शुरुआती लोड के दौरान इस्तेमाल की गई सभी एसेट का कॉम्बिनेशन) दोनों के लिए, डिफ़ॉल्ट थ्रेशोल्ड 244 कि॰ब॰ बिना कंप्रेस किए होता है.
Webpack आपको चेतावनी देने के साथ-साथ, बंडल को छोटा करने का सुझाव भी देगा. सुझाई गई तकनीकों के बारे में ज़्यादा जानने के लिए, वेब की बुनियादी बातें लेख पढ़ें.
कस्टम परफ़ॉर्मेंस बजट सेट करें
सही परफ़ॉर्मेंस बजट, आपके प्रोजेक्ट के टाइप पर निर्भर करेगा. इसके लिए, अपनी तरफ़ से रिसर्च करना हमेशा बेहतर होता है. आम तौर पर, अच्छा नियम यह है कि 170 केबी से कम के संकुचित/छोटे किए गए क्रिटिकल-पाथ रिसॉर्स डिलीवर किए जाएं.
इस आसान डेमो के लिए, बजट को 100 केबी (97.7 केबी) पर सेट करें. webpack.config.js
में, यह जोड़ें:
module.exports = {
//...
performance: {
maxAssetSize: 100000,
maxEntrypointSize: 100000,
hints: "warning"
}
};
नया परफ़ॉर्मेंस बजट, बाइट में सेट किया जाता है:
- हर ऐसेट के लिए 1,00,000 बाइट (maxAssetSize)
- एंट्री पॉइंट के लिए 1,00,000 बाइट (maxEntrypointSize)
इस मामले में, सिर्फ़ एक बंडल है, जो एंट्री पॉइंट के तौर पर भी काम करता है.
hints के लिए ये वैल्यू इस्तेमाल की जा सकती हैं:
warning
(डिफ़ॉल्ट): पीले रंग में चेतावनी वाला मैसेज दिखाता है, लेकिन बिल्ड पास हो जाता है. डेवलपमेंट एनवायरमेंट में इसका इस्तेमाल करना सबसे बेहतर होता है.error
: गड़बड़ी का लाल रंग का मैसेज दिखाता है, लेकिन बिल्ड पास हो जाता है. प्रोडक्शन के लिए बने वर्शन के लिए, इस सेटिंग का सुझाव दिया जाता है.false
: कोई चेतावनी या गड़बड़ी नहीं दिखती.
Optimize
परफ़ॉर्मेंस बजट का मकसद, परफ़ॉर्मेंस से जुड़ी समस्याओं के ठीक होने से पहले ही, आपको उनके बारे में चेतावनी देना है. ऐप्लिकेशन बनाने के लिए, हमेशा एक से ज़्यादा तरीके होते हैं. साथ ही, कुछ तकनीकों की मदद से ऐप्लिकेशन को तेज़ी से लोड किया जा सकता है. (उनमें से कई को आपके JavaScript को ऑप्टिमाइज़ करना में यहां दस्तावेज़ किया गया है. 🤓)
फ़्रेमवर्क और लाइब्रेरी, डेवलपर की ज़िंदगी आसान बना देते हैं, लेकिन असली उपयोगकर्ता इस बात की परवाह नहीं करते कि ऐप्लिकेशन कैसे बनाए गए हैं. उन्हें सिर्फ़ इस बात की परवाह नहीं है कि वे काम करने वाले और तेज़ हैं. अगर आपको लगता है कि आपका परफ़ॉर्मेंस बजट खत्म होने वाला है, तो संभावित ऑप्टिमाइज़ेशन के बारे में सोचने का समय आ गया है.
असल दुनिया में, बड़े क्लाइंट-साइड फ़्रेमवर्क को आम तौर पर बदलना मुश्किल होता है. इसलिए, इनका इस्तेमाल समझदारी से करना ज़रूरी है. थोड़ी रिसर्च करने पर, आपको लोकप्रिय लाइब्रेरी के छोटे विकल्प मिल सकते हैं. ये लाइब्रेरी, काम को उतनी ही अच्छी तरह से करती हैं जितनी लोकप्रिय लाइब्रेरी करती हैं. date-fns, moment.js का एक अच्छा विकल्प है. अगर किसी फ़्रेमवर्क या लाइब्रेरी का इस्तेमाल करने से परफ़ॉर्मेंस पर काफ़ी असर पड़ता है, तो कभी-कभी उसका इस्तेमाल न करना ही बेहतर होता है.
इस्तेमाल नहीं किए जा रहे कोड को हटाने से, उन ऐप्लिकेशन को ऑप्टिमाइज़ करने में मदद मिलती है जिनमें तीसरे पक्ष की बड़ी लाइब्रेरी शामिल होती हैं. इस्तेमाल न किए गए कोड को हटाने की गाइड में इस प्रोसेस के बारे में पूरी जानकारी दी गई है. साथ ही, यहां moment.js का इस्तेमाल किए बिना, काउंटडाउन कोड को फिर से लिखने का एक आसान तरीका बताया गया है.
app/components/Countdown.jsx से हटाएं:
const today = moment();
const yearEnd = moment().endOf('year');
const daysLeft = yearEnd.diff(today, 'days');
और इस लाइन को मिटाएं:
const moment = require('moment');
इसमें थोड़ा गणित लगता है, लेकिन आप उसी काउंटडाउन को वनीला JavaScript के साथ लागू कर सकते है:
const today = new Date();
const year = today.getFullYear();
const yearEnd = new Date(year,11,31); //months are zero indexed in JS
const timeDiff = Math.abs(yearEnd.getTime() - today.getTime());
const daysLeft = Math.ceil(timeDiff / (1000 * 3600 * 24));
अब package.json
से moment.js
हटाएं और ऑप्टिमाइज़ किया गया बंडल बनाने के लिए, console में webpack को फिर से चलाएं.
वाह! आपने 223 KiB (230 केबी) के छोटे-छोटे हिस्से हटा दिए हैं और यह ऐप्लिकेशन बजट में नहीं है.🎉
निगरानी
webpack में परफ़ॉर्मेंस बजट सेट अप करने के लिए, कोड की सिर्फ़ कुछ लाइनें लिखनी पड़ती हैं. अगर गलती से कोई बड़ी डिपेंडेंसी जोड़ी जाती है, तो यह आपको चेतावनी देगा. "आँखों से दूर, मन से भी दूर" कहावत तो आपने सुनी ही होगी. हालांकि, webpack की मदद से यह पक्का किया जा सकता है कि आपको हर समय परफ़ॉर्मेंस के असर के बारे में पता रहे.