DOMContentLoaded और लोड इवेंट
स्क्रैपलेस स्क्रैपिंग ब्राउज़र स्वचालन कार्यप्रवाह के लिए प्रबंधित क्रोमियम सत्र प्रदान करता है जिन्हें सटीक दस्तावेज़ और संसाधन तैयारी संकेतों की आवश्यकता होती है।
TL;DR
- DOMContentLoaded का मतलब है कि प्रारंभिक एचटीएमएल को पार्स किया गया और डिफर्ड स्क्रिप्ट चलाए गए। यह हर छवि, स्टाइलशीट पृष्ठभूमि संपत्ति, या उप-संसाधन का इंतजार नहीं करता।
- विंडो लोड इवेंट सामान्य जीवन चक्र में बाद में होता है। यह दस्तावेज़ और इसके उत्साहित रूप से लोड किए गए निर्भर संसाधनों के पूरा होने की प्रतीक्षा करता है।
- किसी भी इवेंट से यह प्रमाणित नहीं होता कि कोई अनुप्रयोग एक विशिष्ट क्रिया के लिए तैयार है। क्लाइंट रेंडरिंग, असिंक्रोनस डेटा, एनीमेशन, और लेज़ी लोडिंग इसके बाद जारी रह सकते हैं।
- स्वचालन को सबसे पहले महत्वपूर्ण स्थिति का इंतजार करना चाहिए। एक चयनकर्ता, अनुप्रयोग की स्थिति, या प्रतिक्रिया आमतौर पर एक वैश्विक पृष्ठ इवेंट की तुलना में अधिक सटीक होती है।
- लेट श्रोता को दस्तावेज़.readyState की जांच करनी चाहिए। एक असिंक्रोनस लोड की गई स्क्रिप्ट DOMContentLoaded पहले ही चलने के बाद चल सकती है।
जीवन चक्र दायरा क्यों महत्वपूर्ण है
DOMContentLoaded और लोड इवेंट के बीच का विकल्प यह प्रभावित करता है कि ब्राउज़र स्थिति को कैसे उजागर करते हैं, सामग्री को कैसे प्रदर्शित करते हैं, या स्वचालित क्रिया कब सुरक्षित है, यह तय करते हैं। एक सटीक परिभाषा टीमों को संकीर्ण संकेत को एक सार्वभौमिक उत्तर के रूप में मानने से रोकती है। यह परीक्षण विफलताओं को पहचानना भी आसान बनाती है क्योंकि अपेक्षित ब्राउज़र व्यवहार एक प्रलेखित जीवन चक्र, एपीआई, या प्रणाली की सीमा से जुड़ा होता है।
वेब स्वचालन के लिए व्यावहारिक प्रश्न हमेशा “क्या पृष्ठ तैयार है?” या “क्या ब्राउज़र वास्तविक दिख रहा है?” से संकीर्ण होता है। अगला कदम एक नियंत्रण को सक्षम करने, एक फ्रेम को नेविगेशन पूरा करने, एक घटक को उसके आंतरिक पेड़ को संलग्न करने, या एक रेंडरिंग सतह को निरंतर बनाए रखने की आवश्यकता हो सकती है। नीचे के अनुभाग इस अवधारणा को अवलोकनीय जांचों में बदलते हैं बजाय इसके कि पुरानी कहावतों पर भरोसा करें।
संक्षिप्त उत्तर
DOMContentLoaded तब सक्रिय होता है जब ब्राउज़र ने प्रारंभिक एचटीएमएल दस्तावेज़ को पार्स किया है और वह स्क्रिप्ट निष्पादित की है जो इवेंट से पहले पार्सिंग एल्गोरिदम की आवश्यकता होती है। विंडो लोड इवेंट तब सक्रिय होता है जब दस्तावेज़ और इसके उत्साहित रूप से लोड किए गए निर्भर संसाधनों का लोडिंग पूरा हो गया है। एक सामान्य पृष्ठ में, DOMContentLoaded पहले आता है और लोड बाद में आता है।
यह MDN DOMContentLoaded संदर्भ बताता है कि इवेंट छवियों का इंतज़ार नहीं करता है और डिफर्ड स्क्रिप्ट्स का इंतज़ार करता है। यह उस कोड के लिए एक उपयोगी संकेत बनाता है जिसे DOM वृक्ष की आवश्यकता होती है लेकिन हर दृश्य संपत्ति पर निर्भर नहीं होता। स्टाइलशीट्स अभी भी समय को अप्रत्यक्ष रूप से प्रभावित कर सकते हैं जब स्क्रिप्ट्स उनका इंतज़ार करती हैं।
अंतर जीवन चक्र क्षेत्र के बारे में है, पृष्ठ की गुणवत्ता के बारे में नहीं। एक पार्स किया गया DOM अभी भी प्लेसहोल्डर्स को शामिल कर सकता है। एक लोड किया गया पृष्ठ अभी भी सॉकेट खोल सकता है, अधिक डेटा ला सकता है, या लेज़ी घटकों को प्रदर्शित कर सकता है। सही इवेंट इस पर निर्भर करता है कि अगली ऑपरेशन को क्या आवश्यक है।
DOMContentLoaded से पहले क्या होता है
एचटीएमएल पार्सर मार्कअप पढ़ता है और DOM बनाता है। एक पारंपरिक स्क्रिप्ट जिसकी न तो डिफर या असिंक्रोनस होती है, वह इसे लाने और निष्पादित करते समय पार्सिंग को रोक सकती है। डिफर्ड स्क्रिप्ट्स बिना पार्सिंग को रोकते हुए लाए जाते हैं और पार्सिंग के बाद चलाए जाते हैं, DOMContentLoaded से पहले। मॉड्यूल स्क्रिप्ट्स संबंधित डिफर्ड व्यवहार का पालन करते हैं। असिंक्रोनस स्क्रिप्ट्स उपलब्ध होने पर चलते हैं और उसी क्रम की गारंटी स्थापित नहीं करते हैं।
जब DOMContentLoaded जारी होता है, दस्तावेज़.readyState इंटरैक्टिव में बदल चुका होता है। प्रारंभिक मार्कअप से तत्व प्रश्नों के लिए उपलब्ध होते हैं, और पार्सिंग जीवन चक्र द्वारा आवश्यक डिफर्ड कार्य चल चुका होता है। कोड इवेंट हैंडलर्स को संलग्न कर सकता है, घटकों को प्रारंभ कर सकता है, या दस्तावेज़ का निरीक्षण कर सकता है बिना उन कार्यों को प्रभावित करने वाली बड़ी छवियों का इंतज़ार किए।
एक स्क्रिप्ट जिसे डायनामिक रूप से लोड किया गया हो, इवेंट के बाद चल सकती है। मजबूत प्रारंभिककरण कोड दस्तावेज़.readyState की जांच करता है: यदि दस्तावेज़ अभी भी लोड हो रहा है, तो यह एक DOMContentLoaded श्रोता को पंजीकृत करता है; अन्यथा यह तुरंत चलता है। इससे एक श्रोता को ऐसे इवेंट से जोड़ने का मौन विफलता रोकता है जो पहले ही हुआ हो।
लोड इवेंट क्या जोड़ता है
यह MDN विंडो लोड संदर्भ लोड को उस बिंदु के रूप में परिभाषित करता है जब पूरा पृष्ठ लोड हो गया है, जिसमें निर्भर संसाधन जैसे स्टाइलशीट, स्क्रिप्ट, छवियाँ और एम्बेडेड फ्रेम शामिल हैं जो उत्साहित लोड में भाग लेते हैं। इवेंट विंडो पर दस्तावेज़ जीवन चक्र के लिए चलता है।
लोड तब उपयोगी होता है जब कोड वास्तव में अंतर्निहित छवि आयामों, पूर्ण आईफ्रेम लोडिंग, या एक दृश्य कैप्चर पर निर्भर करता है जिसमें उत्साहित संसाधन शामिल होना चाहिए। यह उन इंटरैक्शनों के लिए अधिक सावधान है जिन्हें केवल एक फॉर्म या नेविगेशन नियंत्रण की आवश्यकता होती है। हर संपत्ति का इंतज़ार करना लेटेंसी जोड़ सकता है बिना विश्वसनीयता में सुधार किए।
लेज़ी लोडिंग पूरे पृष्ठ की अवधारणा को जटिल बनाती है। लेज़ी लोडिंग के लिए चिह्नित छवियाँ और आईफ्रेम प्रारंभिक लोड इवेंट से पहले लाए नहीं जा सकते। अनुप्रयोग भी टाइमर्स, उपयोगकर्ता इंटरैक्शन, पर्यवेक्षकों, या घटक प्रभावों से बाद में नेटवर्क अनुरोध शुरू कर सकते हैं। लोड एक परिभाषित जीवन चक्र चरण को बंद करता है; यह अनुप्रयोग को स्थायी रूप से समाप्त नहीं करता है।
स्वचालन के लिए समय की तुलना
DOMContentLoaded चुनना भारी चित्रण, एनालिटिक्स, या दीर्घकालिक संसाधन गतिविधियों वाले पृष्ठों पर प्रतीक्षा समय को कम कर सकता है। इवेंट के बाद, स्वचालन एक लक्षित तत्व या अनुप्रयोग की स्थिति के लिए प्रतीक्षा कर सकता है। लोड चुनना उन कार्यप्रवाहों को सरल बना सकता है जिन्हें उत्साहित दृश्य संपत्तियों की आवश्यकता होती है, लेकिन यह अभी भी असिंक्रोनस अनुप्रयोग डेटा को चूक सकता है और उस कार्य से संबंधित संसाधनों के लिए प्रतीक्षा कर सकता है।
सर्वश्रेष्ठ स्वचालन प्रतीक्षा वह सबसे पहले संकेत है जो प्रमाणित करता है कि अगला कदम सुरक्षित है। एक खोज बक्से पर क्लिक करने के लिए, उस बॉक्स का दृश्य और सक्षम होना प्रतीक्षा करें। एक परिणाम सूची निकालने के लिए, सूची के कंटेनर और पूरे अनुप्रयोग की स्थिति का इंतजार करें। एक छवि गैलरी कैप्चर करने के लिए, प्रासंगिक छवियों की घोषणा करने का इंतजार करें और बिना शून्य अंतर्निहित आयाम होना चाहिए।
वैश्विक घटनाएँ उपयोगी दिशा-निर्देश मील के पत्थर हैं, न कि यूनिवर्सल तत्परता चेक। एक संवेदनशील नेविगेशन इवेंट को एक लक्षित आश्वासन के साथ मिलाएं। यह विफलताओं को निदानात्मक बनाता है: एक अनुपस्थित चयनकर्ता बताता है कि अपेक्षित UI कभी प्रकट नहीं हुआ, जबकि एक सामान्य नेविगेशन टाइमआउट केवल यह कहता है कि एक व्यापक स्थिति पूरी नहीं हुई।
SPAs, हाइड्रेशन, और डेटा फेचिंग
एक सिंगल-पेज एप्लिकेशन एक छोटा HTML कवच प्राप्त कर सकता है, DOMContentLoaded तक पहुंच सकता है, और केवल तब रूट डेटा लाने और घटकों को हाइड्रेट करने के लिए। लोड इवेंट तब भी पहले फायर हो सकता है जब एप्लिकेशन की अंतिम सामग्री प्रकट होती है यदि इसके महत्वपूर्ण फेचेस JavaScript से जीवनचक्र संसाधन सेट स्थापित होने के बाद शुरू होते हैं।
हाइड्रेशन इवेंट लिस्नर्स और सर्वर-जनित मार्कअप में स्टेट जोड़ता है। एक तत्व से पहले मौजूद हो सकता है जब यह इंटरएक्शन के लिए सही ढंग से प्रतिक्रिया नहीं करता है। परीक्षणों को एक ऐसा एप्लिकेशन-दृश्य तत्परता मार्कर, एक सक्षम नियंत्रण, या एक स्थिर स्थिति के लिए इंतज़ार करना चाहिए जो पूरी हाइड्रेशन को दर्शाता है। केवल उपस्थिति अपर्याप्त हो सकती है।
स्ट्रीमिंग और संवर्धित रेंडरिंग अंतिम-पृष्ठ अवधारणा को और भी कम उपयोगी बनाते हैं। सामग्री टुकड़ों में आ सकती है, और उपयोगकर्ता-दृश्य क्षेत्र अलग-अलग समय पर उपयोगी हो सकते हैं। प्रत्येक ऑपरेशन को एक राज्य संक्रमण के रूप में मानें: नेविगेशन ने दस्तावेज़ बनाया, एक घटक इंटरएक्टिव बन गया, एक अनुरोध ने डेटा को भरा, और एक नियंत्रण कार्यशील बन गया।
HTML मानक तैयारियों की रूपरेखा कैसे बनाता है
यह HTML दस्तावेज़ तत्परता एल्गोरिदम लोड, इंटरएक्टिव, और पूर्ण अवस्थाएँ परिभाषित करता है और बताता है कि तत्परता घटनाएँ कब कतारबद्ध होती हैं। DOMContentLoaded इंटरएक्टिव चरण से संबंधित है जो पार्सिंग कार्य के बाद है, जबकि लोड दस्तावेज़ के पूरा होने की प्रक्रिया का पालन करता है।
readyState को समझना इवेंट-क्रम के प्रश्नों को डिबग करने में मदद करता है। लोडिंग का मतलब है कि पार्सिंग चल रही है। इंटरएक्टिव का मतलब है कि पार्सिंग पूरी हो गई है लेकिन उप-संसाधन अभी भी लोड हो सकते हैं। पूर्ण का मतलब है कि दस्तावेज़ और प्रासंगिक उप-संसाधन लोड जीवनचक्र को पूरा कर चुके हैं। ये अवस्थाएँ अवलोकनीय स्नैपशॉट हैं, और कोड को अभी भी अपनी एप्लिकेशन पूर्वापेक्षाएँ परीक्षण करनी चाहिए।
प्रदर्शन मापने के लिए, ब्राउज़र नेविगेशन टाइमिंग अलग-अलग DOMContentLoaded और लोड टाइमस्टैम्प का खुलासा करता है। अंतर संसाधन लागत को प्रकट कर सकता है, लेकिन न तो मेट्रिक अकेले यह वर्णित करता है कि उपयोगकर्ता कार्य को कब पूरा कर सकता है। जीवनचक्र मेट्रिक्स को कार्य-उन्मुख उपायों के साथ जोड़ें जैसे कि प्राथमिक सामग्री या इंटरएक्टिव नियंत्रण कब उपलब्ध होता है।
अगले तत्परता संकेत का चयन करें
उस सबसे छोटे शर्त या कॉन्फ़िगरेशन के साथ शुरू करें जो साबित करता है कि कार्य आगे बढ़ सकता है। मानकों के अनुकूल ब्राउज़र व्यवहार को बनाए रखें, फिर प्रोफ़ाइल नियंत्रण केवल वहाँ जोड़ें जहाँ कार्यप्रवाह की आवश्यकता हो। ब्राउज़र निर्माण और प्रासंगिक स्थिति को रिकॉर्ड करें ताकि बाद में भिन्नताओं को समझाया जा सके। एक दोहराने वाला अवलोकन एक विस्तृत दावा से अधिक उपयोगी है कि एक पृष्ठ, फ्रेम, प्रदर्शन, या फिंगरप्रिंट बस "समाप्त" या "सुरक्षित" है।
- अगले क्रिया को परिभाषित करें। यह स्पष्ट रूप से बताएं कि स्क्रिप्ट या उपयोगकर्ता को प्रतीक्षा या कॉन्फ़िगरेशन कदम के बाद क्या करना चाहिए।
- एक अवलोकनीय संकेत चुनें। एक ब्राउज़र प्रॉपर्टी, जीवनचक्र स्थिति, तत्व की शर्त, या रेंडरिंग परिणाम पसंद करें जो उस क्रिया का सीधे समर्थन करता है।
- संबंधित मूल्यों को सुसंगत रखें। ब्राउज़र, ऑपरेटिंग-सिस्टम, स्क्रीन, स्थानीय, ग्राफिक्स, और सत्र सेटिंग्स को एक संभावित वातावरण का वर्णन करना चाहिए।
- सामान्य एप्लिकेशन व्यवहार को मान्य करें। एक गोपनीयता या स्वचालन हस्तक्षेप को API या घटक को चुपचाप तोड़ना नहीं चाहिए जिसका वह परिवर्तन करता है।
- निदानात्मक साक्ष्य कैद करें। एक चेक विफल होने पर प्रासंगिक URLs, स्थितियाँ, कंसोल संदेश, और कॉन्फ़िगरेशन नाम सहेजें।
निष्कर्ष
DOMContentLoaded एक पार्स की गई, स्क्रिप्ट-तैयार दस्तावेज़ को चिह्नित करता है, जबकि लोड प्रारंभिक उत्सुक संसाधन जीवनचक्र की पूर्णता को चिह्नित करता है। DOMContentLoaded सामान्यतः एक बेहतर प्रारंभिक नेविगेशन मील का पत्थर है; लोड तब उपयोगी होता है जब अगला कदम उत्सुक संपत्तियों पर निर्भर करता है। विश्वसनीय स्वचालन तब एक विशिष्ट तत्व, डेटा स्थिति, या एप्लिकेशन स्थिति के लिए इंतजार करता है बजाय इसके कि वैश्विक इवेंट को कुल तत्परता का प्रमाण मान लिया जाए।
यह स्क्रेपलेस स्क्रैपिंग ब्राउज़र दस्तावेज़ बताता है कि प्रबंधित ब्राउज़र सत्र कैसे कॉन्फ़िगर किए जाते हैं, जबकि स्क्रैपिंग ब्राउज़र उत्पाद अवलोकन ब्राउज़र स्वचालन सतह का वर्णन करता है। ये संसाधन अधिकृत कार्यप्रवाह में अवधारणा लागू करने के लिए उत्पाद संदर्भ प्रदान करते हैं।
क्या आप अधिक सटीक पृष्ठ प्रतीक्षाएँ उपयोग करने के लिए तैयार हैं?
ब्राउज़र रेंडरिंग, सत्र कॉन्फ़िगरेशन, और स्वचालन अवसंरचना को प्रबंधित क्रोमियम वातावरण में ले जाएँ।
आज साइन अप करें और पाएं $5 का मुफ्त क्रेडिट — कोई क्रेडिट कार्ड की आवश्यकता नहीं.
अपने $5 क्रेडिट का दावा करें →अक्सर पूछे जाने वाले प्रश्न
कौन सा पहले फायर करता है, DOMContentLoaded या लोड?
DOMContentLoaded सामान्यतः पहले फायर होता है क्योंकि यह सभी उत्सुक चित्रों और निर्भर संसाधनों के लिए प्रतीक्षा नहीं करता है जो लोड इवेंट में शामिल होते हैं।
क्या DOMContentLoaded स्थगित स्क्रिप्ट के लिए प्रतीक्षा करता है?
हाँ। स्थगित स्क्रिप्ट और मॉड्यूल स्क्रिप्ट पार्सिंग के बाद और DOMContentLoaded से पहले निष्पादित होते हैं, दस्तावेज़ के स्क्रिप्ट-प्रसंस्करण नियमों के अधीन।
क्या लोड.lazy-loaded चित्रों के लिए प्रतीक्षा करता है?
जरूरी नहीं। स्वदेशी लेज़ी लोडिंग द्वारा स्थगित संसाधन प्रारंभिक विंडो लोड इवेंट के बाद लोड हो सकते हैं।
ब्राउज़र स्वचालन को कौन सा इवेंट उपयोग करना चाहिए?
पृष्ठ के साथ संगत सबसे पहले के जीवनचक्र इवेंट का उपयोग करें, फिर अगली क्रिया के लिए आवश्यक विशिष्ट तत्व या एप्लिकेशन स्थिति का प्रतीक्षा करें।