React Components की सुस्ती को सेकंडों में ठीक करें! (नया GitHub Storybook Addon)

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

Transcript

00:00:00GitHub ने अभी Storybook के लिए एक बहुत ही शक्तिशाली एड-ऑन जारी किया है जो पूरी तरह से
00:00:05कंपोनेंट परफॉरमेंस को टेस्ट करने के हमारे तरीके को बदल देता है।
00:00:07इसमें एक बहुत ही विस्तृत परफॉरमेंस पैनल शामिल है जो मूल्यवान जानकारी से भरा है जैसे कि
00:00:12फ्रेम टाइमिंग, इनपुट रिस्पॉन्सिवनेस, लेआउट स्टेबिलिटी, रिएक्ट प्रोफाइलिंग, मेमोरी प्रेशर
00:00:18को मापना और भी बहुत कुछ।
00:00:19इस वीडियो में, हम करीब से देखेंगे कि इस एड-ऑन में क्या-क्या खूबियाँ हैं।
00:00:23यह बहुत मजेदार होने वाला है, तो चलिए शुरू करते हैं।
00:00:31शुरू करने से पहले एक छोटा सा सवाल।
00:00:32क्या आप जानते हैं कि “शिफ्ट-लेफ्ट” परफॉरमेंस टेस्टिंग क्या है?
00:00:35यह एक डेवलपमेंट मॉडल है जो कहता है कि आपके ऐप कंपोनेंट्स की परफॉरमेंस को
00:00:40डेवलपमेंट प्रोसेस के शुरुआती दौर में ही टेस्ट किया जाना चाहिए, न कि बाद में।
00:00:45और यह टूल विशेष रूप से डेवलपर्स को जल्दी निर्णय लेने में मदद करने के लिए बनाया गया है,
00:00:50जो आपको प्रोडक्शन में जाने से पहले ही आपके कंपोनेंट्स के व्यवहार की रीयल-टाइम झलक देता है।
00:00:55तो Storybook परफॉरमेंस पैनल इस बात की बारीकी से जानकारी देता है कि आपके कंपोनेंट्स
00:01:00ब्राउज़र के रेंडरिंग इंजन के साथ कैसे इंटरैक्ट करते हैं।
00:01:02उदाहरण के लिए, यह जिटर (jitter) की पहचान करने के लिए फ्रेम टाइमिंग को ट्रैक करता है, यानी वह
00:01:07फ्रेमों के बीच छोटे अनियमित अंतराल जो एनिमेशन को अटके हुए जैसा महसूस कराते हैं।
00:01:10यह 'DOM churn' और 'thrashing' के लिए मेन थ्रेड की भी निगरानी करता है।
00:01:15DOM churn तब होता है जब आपका कोड अनावश्यक रूप से एक लूप में एलिमेंट्स बनाता, हटाता या अपडेट करता है,
00:01:20जबकि thrashing तब होती है जब ब्राउज़र को एक ही फ्रेम में कई बार
00:01:25लेआउट की गणना करने के लिए मजबूर किया जाता है क्योंकि आप लगातार स्टाइल पढ़ और लिख रहे होते हैं।
00:01:30और यह एड-ऑन आप जिस भी फ्रेमवर्क का उपयोग कर रहे हैं, उसके अनुसार ढल जाता है।
00:01:33यदि आप React का उपयोग कर रहे हैं, तो यह रेंडर कैस्केड जैसे मेट्रिक्स को हाइलाइट कर सकता है,
00:01:38जो वे छोटे स्टेट बदलाव हैं जो गलती से आपके पूरे ऐप में री-रेंडर्स की एक बड़ी लहर पैदा कर देते हैं।
00:01:44यह P95 ड्यूरेशन को भी ट्रैक करता है, जो केवल औसत के बजाय आपके सबसे धीमे उपयोगकर्ताओं
00:01:50के लिए सबसे खराब स्थिति दिखाता है।
00:01:52और यदि आप React का उपयोग नहीं कर रहे हैं, तो इसका यूनिवर्सल मोड Vue, Svelte या वेब
00:01:58कंपोनेंट्स के लिए पूरी तरह से काम करता है।
00:01:59सर्वोत्तम परिणामों के लिए, इस एड-ऑन को Chrome या Edge पर चलाने की सलाह दी जाती है।
00:02:04और उनके पास एक लाइव प्लेबुक भी है जहाँ हम इन मेट्रिक्स को एक्शन में देख सकते हैं।
00:02:08उदाहरण के लिए, एनिमेटेड बॉक्स उदाहरण में, हम ट्रैक कर सकते हैं कि एनिमेशन के दौरान
00:02:13बिल्कुल कितने इनलाइन स्टाइल म्यूटेशन हो रहे हैं।
00:02:16इस मामले में, सब कुछ सही लग रहा है।
00:02:18फ्रेम रेट और फ्रेम टाइम पूरी तरह स्थिर रहता है, जिसका अर्थ है कि ब्राउज़र
00:02:23बिना किसी परेशानी के उन स्टाइल अपडेट्स को संभाल रहा है।
00:02:25हालाँकि, भारी लिस्ट वाला उदाहरण एक अलग कहानी बताता है।
00:02:29जब हम इस बड़ी लिस्ट को फ़िल्टर करते हैं, तो हमें कुछ चेतावनी के संकेत मिलते हैं।
00:02:32सबसे पहले, क्यूम्युलेटिव लेआउट शिफ्ट बहुत अधिक हो जाता है, जो दर्शाता है कि लोड होते समय
00:02:38एलिमेंट्स काफी हिल रहे हैं, जिससे उपयोगकर्ता के लिए अनुभव खराब हो रहा है।
00:02:43हम DOM churn में भी उछाल देखते हैं, जिसका अर्थ है कि ब्राउज़र एक साथ
00:02:49बड़ी संख्या में नोड्स को हटाने और फिर से बनाने के लिए बहुत मेहनत कर रहा है।
00:02:52इसके परिणामस्वरूप फ्रेम भी ड्रॉप होते हैं, जो इंटरफ़ेस की
00:02:57गति और सुगमता के अहसास को खत्म कर देता है।
00:02:58एलिमेंट टाइमिंग उदाहरण में, एलिमेंट टाइमिंग एट्रिब्यूट वाले किसी भी DOM एलिमेंट को
00:03:04उसके सटीक रेंडर टाइम के लिए मापा जाता है।
00:03:06यह अविश्वसनीय रूप से उपयोगी है क्योंकि यह आपको उस सटीक क्षण की पहचान करने में मदद करता है जब आपका
00:03:11मुख्य कंटेंट या कॉल टू एक्शन दिखाई देता है, जिससे आपको सामान्य पेज लोड मेट्रिक्स के बजाय
00:03:17परफॉरमेंस की अधिक सटीक तस्वीर मिलती है।
00:03:21और जब हम एक्सपेंसिव रेंडर उदाहरण को देखते हैं, तो यदि हम री-रेंडर बटन पर क्लिक करते हैं,
00:03:26तो यह P95 ड्यूरेशन को बढ़ा देता है।
00:03:29ऐसा इसलिए होता है क्योंकि भारी जावास्क्रिप्ट निष्पादन के कारण मेन थ्रेड रुका हुआ है,
00:03:34जिससे UI बहुत धीमा महसूस होता है।
00:03:36हम यहाँ फ्रेम जिटर चेतावनियाँ भी देखते हैं, जो अस्थिर रेंडरिंग को दर्शाती हैं जहाँ
00:03:41फ्रेमों के बीच का समय बहुत तेज़ी से बदल रहा है।
00:03:44और यहाँ एक उच्च टोटल ब्लॉकिंग टाइम या TBT भी है।
00:03:47और TBT एक बड़ा चेतावनी संकेत है क्योंकि यह दर्शाता है कि मेन थ्रेड
00:03:52इतनी देर तक ब्लॉक था कि उपयोगकर्ता पेज के साथ इंटरैक्ट नहीं कर पाया,
00:03:57जैसे कि बटन क्लिक करना या स्क्रॉल करना।
00:03:58और हम मेमोइज़ेशन वेस्ट (memoization waste) उदाहरण में भी इसी तरह का विवरण देखते हैं।
00:04:03यहाँ डेमो दिखाता है कि हर एक एलिमेंट को अनावश्यक रूप से फिर से रेंडर करने से
00:04:08भारी लैग होता है।
00:04:09इसके विपरीत, सही ढंग से मेमोइज़ किया गया उदाहरण दिखाता है कि यदि हम अपने
00:04:15कंपोनेंट्स को मेमोइज़ करते हैं तो कितना काम बच जाता है।
00:04:16उन अनावश्यक रेंडर्स को छोड़ कर, हम मेन थ्रेड को खाली रखते हैं और फ्रेम रेट को
00:04:21बनाए रखते हैं ताकि हमें एकदम स्मूथ 60 फ्रेम प्रति सेकंड मिल सके।
00:04:25रेंडर कैस्केड उदाहरण में, हम देखते हैं कि क्या होता है जब आप
00:04:30useLayoutEffect के अंदर setState का उपयोग करते हैं।
00:04:31हर एक इंक्रीमेंट एक कैस्केड शुरू करता है क्योंकि useLayoutEffect सभी DOM म्यूटेशन के बाद
00:04:37सिंक्रोनस रूप से चलता है, लेकिन ब्राउज़र के पेंट करने का मौका मिलने से पहले।
00:04:42इसलिए यहाँ स्टेट अपडेट को ट्रिगर करके, आप React को कंपोनेंट ट्री को दोबारा प्रोसेस करने
00:04:47और ब्राउज़र को लेआउट की गणना दूसरी बार करने के लिए मजबूर कर रहे हैं, इससे पहले कि उपयोगकर्ता को
00:04:52पहला परिणाम भी दिखे।
00:04:53और यह बुरा है क्योंकि प्रभावी रूप से यह हर एक फ्रेम के लिए काम को दोगुना कर देता है,
00:04:58जिससे रेंडर लैग होता है जो सरल इंटरैक्शन को भी भारी बना सकता है।
00:05:02और फिर स्टाइल चर्न (style churn) का उदाहरण भी एक महत्वपूर्ण अवलोकन दिखाता है।
00:05:07क्या होता है जब हम एक साथ 600 अलग-अलग नोड्स के इनलाइन स्टाइल बदलते हैं?
00:05:13हमें तुरंत थ्रैशिंग सेक्शन में स्टॉल वार्निंग्स (stall warnings) दिखाई देती हैं, जो बताती हैं कि
00:05:18ब्राउज़र एक रिफ्लो लूप में फंस गया है।
00:05:21यह एक साथ 600 एलिमेंट्स की पोजीशन की गणना करने की कोशिश कर रहा है जबकि जावास्क्रिप्ट अभी भी
00:05:26बदलाव कर रहा है।
00:05:27इससे हमारे फ्रेम मेट्रिक्स के लिए बहुत खराब स्थिति पैदा होती है क्योंकि मेन थ्रेड
00:05:33पूरी तरह से भर चुका है।
00:05:34तो मुझे उम्मीद है कि ये सभी उदाहरण आपको दिखाते हैं कि आप अधिक सटीक वातावरण में बाधाओं की
00:05:38पहचान करने के लिए इस Storybook एड-ऑन का उपयोग कैसे कर सकते हैं।
00:05:41निश्चित रूप से, आप Lighthouse जैसे टूल का उपयोग कर सकते हैं, लेकिन Lighthouse एक व्यापक टूल है।
00:05:46यह आपको वह सूक्ष्म सटीकता नहीं देता जिससे आप देख सकें कि एक व्यक्तिगत कंपोनेंट
00:05:51आपके ऐप की परफॉरमेंस को कैसे प्रभावित करता है।
00:05:53मैं आपको वास्तव में इस एड-ऑन को डाउनलोड करने, इसे अपने Storybook सुइट में जोड़ने और
00:05:58इसके साथ प्रयोग करने के लिए प्रोत्साहित करता हूँ।
00:05:59एक बार जब आप पूरी तस्वीर देख लेते हैं कि आपके कंपोनेंट्स पर्दे के पीछे वास्तव में कैसे काम करते हैं,
00:06:03तो आपको बहुत सी मूल्यवान जानकारी मिल सकती है।
00:06:06तो दोस्तों, यह था नया GitHub Storybook परफॉरमेंस पैनल एड-ऑन
00:06:10संक्षेप में।
00:06:11आप इसके बारे में क्या सोचते हैं?
00:06:13और आप अपने एप्लिकेशन पर परफॉरमेंस को कैसे मापते हैं?
00:06:16हमें नीचे कमेंट्स में बताएं।
00:06:18और दोस्तों, अगर आपको इस तरह के तकनीकी ब्रेकडाउन पसंद हैं, तो कृपया
00:06:22वीडियो के नीचे लाइक बटन पर क्लिक करके और हमारे चैनल को सब्सक्राइब करके मुझे बताएं।
00:06:28मैं Better Stack से Andres हूँ और मैं आपसे अगले वीडियो में मिलूँगा।

Key Takeaway

GitHub का नया Storybook एड-ऑन डेवलपर्स को कंपोनेंट-स्तर पर सूक्ष्म परफॉरमेंस डेटा प्रदान करके प्रोडक्शन से पहले ही ऐप्स को तेज़ और अधिक कुशल बनाने में सक्षम बनाता है।

Highlights

GitHub ने Storybook के लिए एक नया और शक्तिशाली परफॉरमेंस एड-ऑन लॉन्च किया है।

यह टूल 'शिफ्ट-लेफ्ट' टेस्टिंग को बढ़ावा देता है, जिससे डेवलपर्स को कोडिंग के शुरुआती चरण में ही प्रदर्शन संबंधी समस्याओं को पकड़ने में मदद मिलती है।

एड-ऑन रीयल-टाइम मेट्रिक्स जैसे फ्रेम टाइमिंग, इनपुट रिस्पॉन्सिवनेस और मेमोरी प्रेशर को ट्रैक करता है।

यह विशेष रूप से DOM churn, thrashing और अनावश्यक React री-रेंडर्स (render cascades) की पहचान करने में सक्षम है।

इसमें P95 ड्यूरेशन और टोटल ब्लॉकिंग टाइम (TBT) जैसे उन्नत मेट्रिक्स शामिल हैं जो उपयोगकर्ता अनुभव की सटीक तस्वीर देते हैं।

Timeline

परिचय और एड-ऑन की मुख्य विशेषताएं

इस शुरुआती खंड में, GitHub द्वारा जारी Storybook के नए शक्तिशाली एड-ऑन का परिचय दिया गया है। वक्ता बताते हैं कि यह टूल कंपोनेंट परफॉरमेंस को टेस्ट करने के पारंपरिक तरीकों को पूरी तरह से बदल देगा। इसमें एक विस्तृत परफॉरमेंस पैनल शामिल है जो फ्रेम टाइमिंग, लेआउट स्टेबिलिटी और मेमोरी प्रेशर जैसे महत्वपूर्ण डेटा पॉइंट्स दिखाता है। यह वीडियो का मुख्य उद्देश्य स्थापित करता है कि कैसे यह एड-ऑन डेवलपर्स के लिए गेम-चेंजर साबित हो सकता है। अंत में, यह दर्शकों को एड-ऑन की विशिष्ट खूबियों को करीब से देखने के लिए आमंत्रित करता है।

शिफ्ट-लेफ्ट टेस्टिंग और ब्राउज़र इंटरैक्शन

यहाँ 'शिफ्ट-लेफ्ट' परफॉरमेंस टेस्टिंग के सिद्धांत को समझाया गया है, जो कहता है कि परफॉरमेंस की जांच डेवलपमेंट के शुरुआती दौर में ही होनी चाहिए। यह एड-ऑन ब्राउज़र के रेंडरिंग इंजन के साथ कंपोनेंट के इंटरैक्शन की रीयल-टाइम झलक देता है। वक्ता 'DOM churn' और 'thrashing' जैसी जटिल समस्याओं को परिभाषित करते हैं, जहाँ अनावश्यक एलिमेंट अपडेट ब्राउज़र को बार-बार गणना करने पर मजबूर करते हैं। यह खंड यह समझने के लिए महत्वपूर्ण है कि कैसे छोटे कोड बदलाव बड़े परफॉरमेंस अंतराल पैदा कर सकते हैं। यह डेवलपर्स को प्रोडक्शन में जाने से पहले ही सूचित निर्णय लेने में मदद करता है।

React और फ्रेमवर्क-विशिष्ट मेट्रिक्स

यह खंड बताता है कि कैसे यह एड-ऑन विभिन्न फ्रेमवर्क्स, विशेष रूप से React, के अनुसार खुद को ढाल लेता है। वक्ता 'रेंडर कैस्केड' और P95 ड्यूरेशन जैसे मेट्रिक्स पर चर्चा करते हैं, जो सबसे खराब स्थिति वाले उपयोगकर्ता अनुभव को दर्शाते हैं। यदि आप React का उपयोग नहीं कर रहे हैं, तो इसका 'यूनिवर्सल मोड' Vue, Svelte और वेब कंपोनेंट्स के लिए भी समान रूप से प्रभावी है। सर्वोत्तम परिणामों के लिए Chrome या Edge ब्राउज़र का उपयोग करने की सलाह दी गई है। यह हिस्सा टूल की बहुमुखी प्रतिभा और व्यापक फ्रेमवर्क समर्थन को रेखांकित करता है।

लाइव प्लेबुक और व्यावहारिक उदाहरण

वक्ता लाइव प्लेबुक के माध्यम से एनिमेटेड बॉक्स और भारी लिस्ट के उदाहरणों का उपयोग करके मेट्रिक्स को एक्शन में दिखाते हैं। यहाँ दिखाया गया है कि कैसे क्यूम्युलेटिव लेआउट शिफ्ट और DOM churn के कारण फ्रेम ड्रॉप होते हैं, जिससे उपयोगकर्ता अनुभव खराब होता है। 'एलिमेंट टाइमिंग' एट्रिब्यूट के महत्व को समझाया गया है, जो मुख्य कंटेंट के दिखने का सटीक समय बताता है। इसके अलावा, 'टोटल ब्लॉकिंग टाइम' (TBT) को एक बड़े चेतावनी संकेत के रूप में पेश किया गया है, जो दर्शाता है कि इंटरफ़ेस कब अनुत्तरदायी हो जाता है। यह खंड वास्तविक दुनिया की समस्याओं को पहचानने के लिए व्यावहारिक मार्गदर्शन प्रदान करता है।

मेमोइज़ेशन और स्टाइल चर्न का प्रभाव

यहाँ मेमोइज़ेशन (memoization) के लाभों को दिखाया गया है और बताया गया है कि कैसे अनावश्यक री-रेंडर्स को रोककर 60 FPS की सुगमता प्राप्त की जा सकती है। वक्ता useLayoutEffect के भीतर setState का उपयोग करने के जोखिमों को विस्तार से समझाते हैं, जो काम को दोगुना कर देता है। स्टाइल चर्न के उदाहरण में दिखाया गया है कि एक साथ 600 नोड्स को बदलने से ब्राउज़र 'रिफ्लो लूप' में फंस सकता है। यह तकनीकी गहराई डेवलपर्स को कोड अनुकूलन के ठोस तरीके समझने में मदद करती है। अंततः, यह स्पष्ट होता है कि कैसे सूक्ष्म कोड त्रुटियां पूरे ऐप की गति को धीमा कर सकती हैं।

Lighthouse से तुलना और निष्कर्ष

अंतिम खंड में, इस एड-ऑन की तुलना Lighthouse जैसे व्यापक टूल से की गई है, जहाँ इसे अधिक सूक्ष्म और सटीक बताया गया है। वक्ता सभी डेवलपर्स को इसे अपने Storybook सुइट में जोड़ने और इसके साथ प्रयोग करने के लिए दृढ़ता से प्रोत्साहित करते हैं। यह टूल व्यक्तिगत कंपोनेंट्स के पर्दे के पीछे के व्यवहार की पूरी तस्वीर प्रदान करता है। वीडियो का समापन दर्शकों से उनके अनुभव और परफॉरमेंस मापने के तरीकों पर सवाल पूछकर होता है। अंत में, लाइक और सब्सक्राइब करने की अपील के साथ तकनीकी ब्रेकडाउन समाप्त होता है।

Community Posts

View all posts