STATUS IS UPवेबसाइट अनुकूलन विकि
25तेज़ करें
प्रदर्शन और डिलीवरी / तेज़ करें

JavaScript प्रदर्शन: मेन-थ्रेड का काम कम करें

ऐसा JavaScript खोजें जो पेज में रुकावट या देरी पैदा करता है अथवा अनावश्यक काम करता है, और इंटरैक्शनों की सुरक्षा करें।

JavaScript प्रदर्शन: मेन-थ्रेड का काम कम करें — दृश्य मार्गदर्शक
पढ़ें
8 मिनट
स्रोत
5
पुनः सत्यापित करें
2027-03-27
समीक्षित
वरिष्ठ वेब प्रदर्शन समीक्षक (Senior Web Performance Reviewer)
संक्षिप्त उत्तर

निर्णय से शुरू करें।

किसी वास्तविक पेज और इंटरैक्शन को मापकर मेन-थ्रेड का काम कम करें, फिर सबसे बड़ी और बार-बार होने वाली लागत को ठीक करें। मेन थ्रेड अधिकतर पेज JavaScript और इंटरफ़ेस से जुड़े काम को एक समय में एक टास्क के रूप में चलाता है। 50 मिलीसेकंड से लंबा टास्क long task माना जाता है; इसलिए टैप, क्लिक, स्क्रॉल या पेंट उसके पीछे कतार में लग सकता है। शुरुआत में चेकआउट, खोज, नेविगेशन, फॉर्म और अन्य संवेदनशील यात्राओं पर ध्यान दें।

प्रत्येक लागत के लिए, उसे हटाएँ, आवश्यकता होने तक टालें, छोटे बैचों में बाँटें, या सीमित गणनाएँ Web Worker पर ले जाएँ। तत्काल प्रतिक्रिया मेन थ्रेड पर रखें, लेकिन एनालिटिक्स और अन्य गैर-आवश्यक फ़ॉलो-अप को स्थगित करें। हर तीसरे-पक्ष के टैग को एक निर्भरता मानें और उसका एक मालिक तय करें। सीमित मोबाइल CPU पर पुनः परीक्षण करें और महत्वपूर्ण फ़्लो के लिए रोलबैक योजना तैयार रखें।

दृश्य मार्गदर्शक

काम को एक प्रणाली के रूप में देखें।

व्यक्तिगत तकनीकों पर अमल करने से पहले लेख के निर्णयों को जोड़ने के लिए इस मानचित्र का उपयोग करें।

SIUतेज़ करें
01कोड बदलने से पहले एक ग्राहक जर्नी प्रोफाइल करें
02ट्रेस को काम की कतार के रूप में पढ़ें
03ज़रूरी समय पर कम कोड शिप करें
04काम को तोड़ें ताकि ब्राउज़र जवाब दे सके
01

कोड बदलने से पहले एक ग्राहक जर्नी प्रोफाइल करें

एक महत्वपूर्ण रूट और इंटरैक्शन चुनें, जैसे नेविगेशन खोलना, परिणाम फ़िल्टर करना, या फॉर्म सबमिट करना। Chrome DevTools Performance पैनल में इसे साफ़ ब्राउज़र स्थिति से रिकॉर्ड करें। क्रिया को दोहराएँ और एक थ्रोटल्ड-CPU रन के साथ-साथ डेवलपमेंट-मशीन रन भी कैप्चर करें; डेस्कटॉप ट्रेस कम पॉवर्ड फोन पर डिसरप्टिव काम छुपा सकते हैं।

ट्रेस का उपयोग एक संकुचित हाइपोथेसिस परीक्षण के लिए करें, न कि बंडल रिपोर्ट से किसी कंपोनेंट को दोष देने के लिए। Main फ्लेम चार्ट में, चौड़े बार अधिक समय लेते हैं और स्टैक्ड बार कॉल स्टैक दिखाते हैं। किसी Task पर लाल त्रिकोण एक संभावित long task को दर्शाता है; उसे चुनकर initiating-code लिंक का पालन करें। सार्थक परिवर्तन के लिए पहले और बाद के ट्रेसेस सहेजें।

क्षण कैप्चर करें

क्रिया से ठीक पहले रिकॉर्ड करें और दृश्यमान परिणाम के बाद रोकें।

एक दोहराने योग्य केस का उपयोग करें

रूट, अकाउंट स्थिति और क्रिया क्रम को सुसंगत रखें।

एक मालिक नामित करें

प्रत्येक शीर्ष लागत को उसे बदल सकने वाली टीम या वेंडर के लिए असाइन करें।

02

ट्रेस को काम की कतार के रूप में पढ़ें

एक long task जाँच का थ्रेशोल्ड है, पूर्ण निदान नहीं। W3C Long Tasks specification 50 मिलीसेकंड या उससे अधिक समय वाले टास्क की रिपोर्ट करती है। एक टास्क के नीचे JavaScript मूल्यांकन, इवेंट हैंडलर, स्टाइल पुनर्गणना, लेआउट, या पेंट देखिए। कॉल स्टैक यह पहचानता है कि कहाँ से शुरू करना है; टाइमिंग दिखाती है कि समस्या कोड, रेंडरिंग, या तीसरे-पक्ष frame में है।

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

क्षण अलग करें

स्टार्टअप पार्सिंग के लिए अलग उपचार चाहिए बनाम पोस्ट-टैप हैंडलर के लिए।

रेंडरिंग का निरीक्षण करें

रिफ़ैक्टर करने से पहले बार-बार होने वाले style-write और layout-read पैटर्न खोजें।

बेसलाइन रखें

ट्रेस, परिदृश्य, और शीर्ष लागत को वर्क आइटम के साथ अटैच करें।

03

ज़रूरी समय पर कम कोड शिप करें

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

सोचें कि क्या किसी कंपोनेंट को पूरा क्लाइंट-साइड फ़्रेमवर्क चाहिए, क्या कोई यूटिलिटी मौजूदा क्षमता को डुप्लिकेट करती है, और क्या स्टैटिक HTML + छोटा एनहांसमेंट काम कर देगा। देरी किए गए मॉड्यूल की फॉलबैक स्थिति का परीक्षण करें। पेज वैकल्पिक क्षमता को सुंदरता से स्थगित करे, न कि एक मृत कंट्रोल दिखाए।

रूट बजट बनाएं

दस्तावेज़ करें कि किसी रूट पर कौन सी स्क्रिप्ट्स की अनुमति है और क्यों।

इरादा पर लोड करें

इसे वैकल्पिक एडिटर्स, मानचित्र, प्लेयर, या रिपोर्टिंग व्यूज़ के लिए विचार करें।

महत्वपूर्ण पाथ की सुरक्षा करें

प्रमाणीकरण, पहुंच, भुगतान, और फॉर्म पूर्णता का परीक्षण करें; जहाँ कंट्रोल प्रभावित हों वहां योग्य समीक्षा लें।

04

काम को तोड़ें ताकि ब्राउज़र जवाब दे सके

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

जहाँ समर्थित हो, scheduler.yield() मेन थ्रेड को नियंत्रण लौटाता है और बाद में काम जारी रखता है; इसे फीचर-डिटेक्ट करें और असमर्थ ब्राउज़रों के लिए फॉलबैक उपयोग करें। हर छोटे ऑपरेशन के बाद yield न करें: इसका ओवरहेड होता है और यह समापन समय बढ़ा सकता है। माप के आधार पर सीमाएँ चुनें, रद्द करने की क्षमता बरकरार रखें, और पुराने परिणामों को नए स्टेट की जगह लेने से रोकें।

UI को पहले रखें

नॉनविजिबल फॉलो-अप से पहले स्वीकृति या प्रगति दिखाएँ।

समय के आधार पर बैच करें

हर आइटम के बाद नहीं, बल्कि मापी गई समय-सीमा पार होने से पहले yield करें।

पुराने शॉर्टकट से बचें

वर्तमान web.dev मार्गदर्शन isInputPending() पर आधारित नई रणनीति की सलाह नहीं देता।

05

कंप्यूट को वर्कर पर ले जाएँ, इंटरफ़ेस को नहीं

एक Web Worker एक बैकग्राउंड थ्रेड पर स्क्रिप्ट चलाता है जो मुख्य निष्पादन थ्रेड से अलग होता है। यह महंगी पार्सिंग, डेटा ट्रांसफ़ॉर्मेशन, खोज इंडेक्सिंग, और ऐसी अन्य गणनाओं के लिए उपयुक्त है जिन्हें सीधे इंटरफ़ेस एक्सेस की आवश्यकता नहीं होती। एक परिभाषित इनपुट भेजें, परिभाषित परिणाम लौटाएँ, और रेंडरिंग तथा दृश्य राज्य परिवर्तन मेन थ्रेड पर रखें।

वर्कर्स सार्वभौमिक नहीं हैं। वे सीधे DOM को नहीं बदल सकते और Window का उपयोग नहीं कर सकते, और सामान्य संदेश संचार में डेटा कॉपी होता है। वर्कर निर्माण, डेटा मूवमेंट, और एरर समन्वय एक छोटी गणना पर लागत बढ़ा सकते हैं। पूरे इंटरैक्शन को मापें, अनावश्यक वर्कर्स को समाप्त करें, और यदि वर्कर काम विफल हो तो फॉलबैक डिज़ाइन करें।

अलग-थलग काम चुनें

ऐसे गणना से शुरू करें जिनका इनपुट और आउटपुट सीरियलाइज़ेबल और टैस्टेबल हो।

संदेशों का वर्ज़न रखें

पुराने फ़िल्टर, रूट, या क्रिया के लिए बनाए गए परिणामों को अस्वीकार करें।

पहुँचयोग्यता बनाए रखें

सामान्य इंटरफ़ेस के माध्यम से सार्थक प्रगति संप्रेषित करें।

06

तीसरे-पक्ष JavaScript को प्रोडक्शन निर्भरता की तरह गवर्न करें

Analytics, विज्ञापन, एक्सपेरिमेंट्स, सोशल एम्बेड्स, वीडियो प्लेयर्स, और सपोर्ट विजेट रिक्वेस्ट्स, JavaScript मूल्यांकन, iframes, और निर्भरताएँ जोड़ सकते हैं। एक वेंडर स्क्रिप्ट आवश्यक हो सकती है, लेकिन यह एप्लिकेशन टीम के प्रत्यक्ष नियंत्रण के बाहर है और प्रदर्शन, गोपनीयता, सुरक्षा, और निरंतरता को प्रभावित कर सकती है। इसके उद्देश्य, रूट्स, लोडिंग कंडीशन, अनुमोदक, सहमति आवश्यकता, और हटाने के मालिक का इन्वेंटरी बनाएं।

जहाँ परिस्थितियाँ और अनुबंध अनुमति दें, एक प्रतिनिधि पेज की तुलना एक तीसरे-पक्ष ओरिजिन के साथ और बिना करके करें। प्रदर्शन टूल महंगे मूल्यांकन, पेलोड्स, और long-task attribution को उजागर कर सकते हैं। केवल तब एक हल्का या देरी किया हुआ इंटीग्रेशन रखें जब उसके दस्तावेजीकृत मूल्य से मापी गई लागत न्यायोचित हो। जब कोई वैकल्पिक निर्भरता धीमी या अनुपस्थित हो, तो कोर कंटेंट और प्राथमिक ट्रांज़ैक्शन काम की पुष्टि करें।

ब्लास्ट रेडियस सीमित करें

एक टैग केवल उन रूट्स और स्थितियों पर लोड करें जिन्हें इसकी आवश्यकता है।

चेंज कंट्रोल की समीक्षा करें

टैग-मैनेजर परिवर्तन में प्रदर्शन, गोपनीयता, सुरक्षा, और रोलबैक समीक्षा शामिल करें।

हटाने का स्विच रखें

किसी नॉन-क्रिटिकल इंटीग्रेशन को कैसे अक्षम करें इसे दस्तावेज़ और टेस्ट करें।

07

प्रतिक्रिया क्षमता को रिलीज़ सुरक्षा-चेक बनायें

महत्वपूर्ण जर्नी के लिए उस सफल ट्रेस को हल्के रिग्रेशन चेक में बदलें। शामिल इंटरैक्शन, डिवाइस या CPU सीमाएँ, अपेक्षित प्रतिक्रिया और समीक्षक निर्धारित करें। इसे बंडल और तीसरे-पक्ष की इन्वेंटरी की समीक्षा के साथ जोड़ें, ताकि कोई नया पैकेज या टैग चुपचाप मेन-थ्रेड का काम फिर से न जोड़ दे।

Status Is UP इस साक्ष्य का उपयोग सक्रिय अनुकूलन और सुरक्षित सुधार के लिए करता है, न कि लाइव उपलब्धता मॉनिटरिंग की जगह लेने के लिए। उच्च-जोखिम परिवर्तन से पहले रोलबैक तैयार रखें और रिलीज़ के बाद महत्वपूर्ण फ़्लो सत्यापित करें। परिणाम डिवाइस, नेटवर्क, ब्राउज़र, सामग्री, और अकाउंट स्थिति के अनुसार भिन्न होते हैं; थ्रेशोल्ड को गार्डरेल समझें, गारंटी नहीं।

महत्त्वपूर्ण बदलावों को गेट करें

साझा नेविगेशन, चेकआउट, खोज, या बड़े बंडलों के लिए पहले और बाद के ट्रेसेस की आवश्यकता रखें।

रोलबैक का अभ्यास करें

उस फ़ीचर फ़्लैग, टैग सेटिंग या डिप्लॉयमेंट वर्ज़न की पहचान रखें जो पहले से सही सिद्ध हुए व्यवहार को बहाल कर सके।

नियमित रूप से पुनरीक्षित करें

बड़े रिलीज़, वेंडर परिवर्तन, या डिवाइस-मिक्स शिफ्ट के बाद पुनः प्रोफाइल करें।

कार्य / सत्यापित करें

आपका व्यावहारिक टू-डू गाइड।

  1. 01

    एक महत्वपूर्ण इंटरैक्शन चुनें

    रूट, क्रिया, अपेक्षित प्रतिक्रिया, और ग्राहक प्रभाव का नाम रखें।

    सत्यापित करें: एक टेस्ट नोट में रूट, अकाउंट स्थिति, क्रिया, ब्राउज़र, और डिवाइस या CPU सेटिंग रिकॉर्ड है।
  2. 02

    एक बेसलाइन रिकॉर्ड करें

    साफ़ स्थिति से DevTools Performance में इंटरैक्शन रिकॉर्ड करें।

    सत्यापित करें: टीम Main फ्लेम चार्ट के साथ ट्रेस को पुन: देख सकती है।
  3. 03

    ब्लॉकिंग काम खोजें

    long tasks, कॉल स्टैक्स, रेंडरिंग, और तीसरे-पक्ष गतिविधि का निरीक्षण करें।

    सत्यापित करें: प्रत्येक शीर्ष लागत की अवधि, स्रोत या ओरिजिन, रूट, और मालिक दर्ज है।
  4. 04

    अनावश्यक स्क्रिप्ट हटाएँ

    अनयूज़्ड पैकेज, रिटायर्ड एक्सपेरिमेंट्स, डुप्लिकेट, और अनावश्यक रूट कोड हटाएँ।

    सत्यापित करें: हटाने के बाद बिल्ड और क्रिटिकल जर्नी काम करती है।
  5. 05

    वैकल्पिक फीचर्स को देरी करें

    केवल तब वैकल्पिक क्षमता बाद में लोड करें जब उसकी देरी की स्थिति उपयोगी बनी रहे।

    सत्यापित करें: नए पेज के परीक्षण में लोडिंग, विफलता या फॉलबैक शामिल हो।
  6. 06

    लंबे टास्क को विभाजित करें

    काम को बैच करें और तत्काल इंटरफ़ेस प्रतिक्रिया के बाद yield करें।

    सत्यापित करें: एक नया ट्रेस दिखाता है कि तुलनीय इंटरैक्शन पथ में long task नहीं है और सही परिणाम बरकरार है।
  7. 07

    एक वर्कर का आकलन करें

    केवल परिभाषित संदेशों वाले सीमाबद्ध गणना को ही मूव करें।

    सत्यापित करें: एंड-टू-एंड टाइमिंग, त्रुटियाँ, स्टेल परिणाम, और क्लीनअप का टेस्ट किया गया है।
  8. 08

    तीसरे-पक्ष का ऑडिट करें

    उद्देश्य, मालिक, शर्त, सहमति, लागत, और अक्षम करने की प्रक्रिया रिकॉर्ड करें।

    सत्यापित करें: हर क्रिटिकल-रूट टैग के लिए रखो, सीमित करो, देरी करो, या हटाओ का निर्णय है।
  9. 09

    सीमित परिस्थितियों पर परीक्षण करें

    थ्रोटल्ड CPU और प्रतिनिधि ब्राउज़रों या डिवाइसेज़ पर दोहराएँ जहाँ संभव हो।

    सत्यापित करें: तुलना एक ही परिदृश्य उपयोग करती है और सामग्री भिन्नताओं को नोट करती है।
  10. 10

    रोलबैक के साथ रिलीज़ करें

    ट्रेस, स्वीकृति जाँच, और रिवर्सल निर्देश रिलीज़ से जोड़ें।

    सत्यापित करें: एक नामित मालिक बिना किसी अनलिखित खोजबीन के पहले से सही सिद्ध हुए व्यवहार को बहाल कर सकता है।
चर्चा विषय

निजी डेटा नहीं — ट्रेडऑफ़ की तुलना करें।

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

  1. 01

    कौन सा इंटरैक्शन लोडिंग रिपोर्ट में स्वीकार्य दिखा लेकिन वास्तविक टैप या क्लिक प्रोफ़ाइल करने पर धीमा साबित हुआ?

  2. 02

    आप कैसे निर्णय लेते हैं कि कोई तीसरे-पक्ष फीचर अपनी मापी गई मेन-थ्रेड लागत के लिए न्यायोचित है?

  3. 03

    कौन सा रोलबैक मैकेनिज़्म एक प्रदर्शन रिग्रेशन को बिना किसी क्रिटिकल जर्नी को बाधित किए उलटना सबसे आसान बनाता है?

लोकप्रिय / प्रामाणिक संसाधन

स्रोत सामग्री खोलें।

web.devOptimize long tasks ↗

long tasks, yielding, scheduler.yield(), fallbacks, और yield ओवरहेड समझाता है।

समीक्षित 2026-09-27
Chrome for DevelopersAnalyze runtime performance ↗

रिकॉर्डिंग, फ्लेम-चार्ट विश्लेषण, long-task पहचान, और स्रोत जांच दिखाता है।

समीक्षित 2026-09-27
MDN Web DocsWeb Workers API ↗

वर्कर्स, संदेश संचार, और डायरेक्ट-DOM सीमा परिभाषित करता है।

समीक्षित 2026-09-27
web.devLoad Third-Party JavaScript ↗

तीसरे-पक्ष स्क्रिप्ट ऑडिट और मापन मार्गदर्शन प्रदान करता है।

समीक्षित 2026-09-27
W3CLong Tasks API ↗

long tasks, थ्रेशोल्ड, और attribution को परिभाषित करता है।

समीक्षित 2026-09-27

स्रोत नीति। यह लेख आधिकारिक ब्राउज़र, मानक, और वेब-प्लेटफ़ॉर्म दस्तावेज़ों का उपयोग करता है जिन्हें संपादकीय टीम ने पढ़ा है। यह माप को गारंटी से अलग करता है और असमर्थित दावों को छोड़ता है।

त्वरित स्पष्टीकरण

सामान्य प्रश्न।

लंबा JavaScript टास्क क्या माना जाता है?

W3C Long Tasks specification 50 मिलिसेकंड या उससे अधिक को अपनी रिपोर्टिंग थ्रेशोल्ड के रूप में उपयोग करती है। यह जाँच करने का संकेत है, न कि यह प्रमाण कि छोटी टास्क हानिरहित हैं। कारण की पुष्टि ट्रेस में करें।

क्या कोड स्प्लिटिंग हमेशा JavaScript प्रदर्शन बेहतर करेगी?

नहीं। स्प्लिटिंग स्टार्टअप काम घटा सकती है लेकिन प्रथम-उपयोग में देरी जोड़ सकती है। इसे रूट-विशिष्ट या वैकल्पिक कोड के लिए उपयोग करें, और सीमित परिस्थितियों में उस फीचर का परीक्षण करें।

क्या हर महँगी फंक्शन को Web Worker में चलाना चाहिए?

नहीं। वर्कर्स उन अलग-थलग, CPU-भारी गणनाओं के लिए उपयुक्त हैं जिनके परिभाषित संदेश हों। वे सीधे DOM नहीं बदल सकते, डेटा ट्रांसफ़र की लागत समय लेती है, और छोटे टास्क मेन थ्रेड पर तेज़ी से खत्म हो सकते हैं।

Status Is UP Editorial Team · अपटाइम एनेबलमेंट संपादक (Uptime Enablement Editors)

समीक्षित: वरिष्ठ वेब प्रदर्शन समीक्षक (Senior Web Performance Reviewer). प्रकाशित: 2026-09-27; अद्यतन: 2026-09-30.