Loading…
Loading…
एक झिलमिलाता कर्सर, एक फ़्रोज़न सर्च बॉक्स, और एक `debounce(300)` बैंड-ऐड जो आपके ऐप को यूज़र पर आहें भरने पर मजबूर कर देता है। आइए बात करते हैं कि आपका यह परफॉर्मेंस फिक्स असल में क्यों रूड है।
मैंने एक सर्च बॉक्स को सबसे उबाऊ तरीके से मरते हुए देखा। तीन अक्षर, एक झिलमिलाता कर्सर जो अपने डिजिटल वजूद पर विचार कर रहा था, और फिर लगभग आधे सेकंड बाद सर्च रिजल्ट्स एक अपराधी की तरह स्क्रीन पर डंप हो गए। प्रोफाइलर ने स्क्रिप्टिंग पर उंगली उठाई, जीरा टिकट ने स्पीड की मांग की, और जो पुल रिक्वेस्ट आखिरकार मर्ज हुई वह एक क्लासिक, आलसी बैंड-ऐड था: debounce(300)। अचानक, UI फ्रीज़ का पता बदल गया। यह असली टाइपिंग के दौरान होना बंद हो गया और ठीक उसी पल होने लगा जब यूज़र रुका, जिससे ऐसा सॉफ्टवेयर बन गया जो ऐसा महसूस कराता है कि जैसे ही आप अपना विचार पूरा करते हैं, वह आप पर भारी आहें भर रहा है।

debounce(300) सिर्फ एक फैंसी डिले हैडेवलपर्स debounce(300) जैसे मनमाने टाइमर पर भरोसा करते हैं क्योंकि यह मेन थ्रेड की भीड़भाड़ से बचने का एक त्वरित रास्ता लगता है। हम इनपुट हैंडलर्स पर 300-मिलिसेंट का विराम लगाते हैं और इसे ऑप्टिमाइजेशन कहते हैं, और दूसरा कॉफी कप उठाने से पहले अपनी पीठ थपथपाते हैं। वास्तव में, आप केवल बॉटलनेक को एक्टिव कीस्ट्रोक्स से हटाकर उस सटीक क्षण पर एक अचानक, झकझोर देने वाले एग्जीक्यूशन ब्लॉक में स्थानांतरित कर रहे हैं जब कोई टाइप करना बंद करता है।
📌 मुख्य बिंदु: एक सर्च इनपुट कभी भी टाइपिंग की गति के कारण वास्तव में धीमा नहीं होता है; यह सुस्त इसलिए महसूस होता है क्योंकि हम ब्राउज़र को रेंडरिंग लाइफसाइकिल का सम्मान किए बिना मेन थ्रेड पर भारी DOM अपडेट को सिंक्रोनस रूप से प्रोसेस करने के लिए मजबूर करते हैं।
आधुनिक ब्राउज़र निष्क्रिय कैनवास नहीं हैं जो आँख बंद करके आपके कस्टम स्क्रिप्ट के बताने का इंतज़ार करते हैं कि क्या करना है। उनके पास परिष्कृत आंतरिक प्राथमिकता प्रणाली होती है जो यूज़र इंटरैक्शन की तात्कालिकता के आधार पर लेआउट, स्टाइलिंग और पेंटिंग को शेड्यूल करती है। जब आप इनपुट को भारी मैनुअल टाइमर में लपेटते हैं, तो आप इंजन की अंतर्निहित बुद्धिमत्ता को सक्रिय रूप से ओवरराइड करते हैं और कृत्रिम बॉटलनेक बनाते हैं।
debounce(300) मौजूदा पेंट दबाव की परवाह किए बिना कॉलबैक को आँख बंद करके टास्क क्यु (queue) में धकेल देता है।"सर्च कभी धीमी नहीं थी। यह अभद्र (rude) थी। इसने मेन थ्रेड पर इकलौता रास्ता ले लिया और काम पूरा होने तक वहीं डटी रही।"
इनपुट लैग को ठीक करने के लिए क्रूड टाइमआउट के साथ लड़ने के बजाय ब्राउज़र के साथ मिलकर काम करने की आवश्यकता होती है। हमें इस बात पर मौलिक रूप से पुनर्विचार करने की आवश्यकता है कि हमारे फ्रंटएंड घटकों के माध्यम से डेटा कैसे प्रवाहित होता है। यहाँ आलसी पैच का सहारा लिए बिना आपकी प्रतिक्रियाशीलता (responsiveness) को अपग्रेड करने के ठोस तरीके दिए गए हैं:
requestAnimationFrame का उपयोग करें।अगली बार जब आपके प्रोफाइलिंग टूल किसी सुस्त इनपुट को चिह्नित करें, तो एक और टाइमआउट जोड़ने की लालसा का विरोध करें। आपका एप्लिकेशन कैसा प्रदर्शन करेगा जब आप आखिरकार ब्राउज़र से लड़ना बंद कर देंगे और इसके नेटिव शेड्यूलिंग इंजन को अपना काम करने देंगे?
यह अंतिम कीस्ट्रोक के बाद 300 मिलीसेकंड के लिए आपके इवेंट हैंडलर के निष्पादन (execution) में देरी करता है, जो UI फ्रीज़ को खत्म करने के बजाय स्थानांतरित कर देता है।
इसे शेयर करें
यह लेख उपयोगी लगा? अपने दोस्तों के साथ शेयर करें।
Rate this article
Leave a comment
आपको यह लेख कैसा लगा?
संबंधित विषय
आपको यह भी पसंद आएगा
आपके लिए चुनी गई खबरें

जानिए कैसे स्वचालित कोडिंग सहायकों ने सॉफ्टवेयर इंजीनियरिंग का रूप बदल दिया है, जिससे डेवलपर्स का ध्यान मैनुअल सिंटेक्स टाइप करने से हटकर मशीन-जनरेटेड आर्किटेक्चर की समीक्षा करने पर केंद्रित हो गया है।





Enjoy this article?
Get fresh stories delivered to your inbox every morning.