इनर HTML सेट करना समकालिक है, जैसा कि सबसे अधिक परिवर्तन आप DOM के लिए कर सकते हैं। हालांकि, प्रतिपादन वेबपेज एक अलग कहानी है।
(याद रखें, DOM "डॉक्यूमेंट ऑब्जेक्ट मॉडल" के लिए खड़ा है। यह सिर्फ एक "मॉडल" है, डेटा का प्रतिनिधित्व करता है। उपयोगकर्ता अपनी स्क्रीन पर जो देखता है, वह उस मॉडल की एक तस्वीर है कि उसे कैसे दिखना चाहिए। इसलिए, मॉडल को तुरंत बदलना नहीं है तस्वीर बदलें - अपडेट होने में थोड़ा समय लगता है।)
जावास्क्रिप्ट चलाना और वेबपेज को रेंडर करना वास्तव में अलग से होता है। इसे सरलता से डालने के लिए, पहले पेज पर जावास्क्रिप्ट के सभी रन (इवेंट लूप से - अधिक विस्तार के लिए इस उत्कृष्ट वीडियो की जांच करें ) और फिर उसके बाद ब्राउज़र उपयोगकर्ता के देखने के लिए वेबपेज में किसी भी परिवर्तन का प्रतिपादन करता है। यही कारण है कि "ब्लॉकिंग" इतना बड़ा सौदा है - कम्प्यूटेशनल रूप से सघन कोड चलाने से ब्राउज़र को "रन जेएस" स्टेप और "रेंडर द पेज" चरण में जाने से रोकता है, जिससे पेज फ्रीज या हकलाने लगता है।
क्रोम की पाइपलाइन इस तरह दिखती है:
जैसा कि आप देख सकते हैं, सभी जावास्क्रिप्ट पहले होते हैं। तब पृष्ठ स्टाइल हो जाता है, बाहर रखा जाता है, चित्रित किया जाता है, और कंपोज़ किया जाता है - "रेंडर"। यह सभी पाइपलाइन हर फ्रेम को निष्पादित नहीं करेगी। यह इस बात पर निर्भर करता है कि कौन से पृष्ठ तत्व बदले गए, यदि कोई हो, और उन्हें फिर से कैसे प्रस्तुत करने की आवश्यकता है।
नोट: alert()
जावास्क्रिप्ट स्टेप के दौरान भी सिंक्रोनस और निष्पादित होता है, यही कारण है कि वेबपेज में परिवर्तन देखने से पहले अलर्ट डायलॉग दिखाई देता है।
अब आप पूछ सकते हैं कि "होल्ड करें, वास्तव में पाइपलाइन में उस 'जावास्क्रिप्ट' चरण में क्या चलता है? क्या मेरा सभी कोड 60 बार प्रति सेकंड चलता है?" जवाब "नहीं" है, और यह जेएस ईवेंट लूप कैसे काम करता है, इस पर वापस जाता है। JS कोड केवल तभी चलता है जब वह स्टैक में होता है - इवेंट श्रोताओं, टाइमआउट, जैसी चीजों से। पिछला वीडियो देखें (वास्तव में)।
https://developers.google.com/web/fundamentals/performance/rendering/