क्या रिएक्शन.जेएस में वर्चुअल डोम की तरह शैडो डोम फास्ट है?


86

क्या मेरी परियोजनाओं में शैडो डोम लागू करने से उन्हें रिएक्ट द्वारा उपयोग किए जाने वाले वर्चुअल डोम की तरह तेज हो जाएगा?

जवाबों:


125

वर्चुअल डोम

Virtual DOM, DOM के अनावश्यक परिवर्तनों से बचने के बारे में है, जो महंगे प्रदर्शन-वार हैं, क्योंकि DOM में परिवर्तन आमतौर पर पृष्ठ के पुन: प्रतिपादन का कारण बनते हैं। वर्चुअल DOM एक बार में लागू होने के लिए कई बदलावों को इकट्ठा करने की अनुमति देता है, इसलिए हर एक परिवर्तन फिर से रेंडर करने का कारण नहीं बनता है, बल्कि DOM के लागू होने के बाद केवल एक बार री-रेंडरिंग होता है।

छाया डोम

छाया डोम ज्यादातर कार्यान्वयन के अंतराल के बारे में है। एक एकल कस्टम तत्व अधिक-या-कम जटिल तर्क को अधिक-या-कम जटिल DOM के साथ जोड़ सकता है। मनमाने ढंग से जटिलता का एक संपूर्ण वेब अनुप्रयोग एक आयात द्वारा एक पृष्ठ में जोड़ा जा सकता है <body><my-app></my-app>लेकिन पुन: प्रयोज्य और सरल घटकों को भी कस्टम तत्वों के रूप में लागू किया जा सकता है जहां आंतरिक प्रतिनिधित्व छाया डोम में छिपा हुआ है <date-picker></date-picker>

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

छाया डोम और प्रदर्शन

हालाँकि, शैडो DOM प्रदर्शन के बारे में नहीं है, लेकिन इसके प्रदर्शन निहितार्थ भी हैं। क्योंकि शैलियों को स्कोप किया गया है, ब्राउज़र पृष्ठ के केवल सीमित क्षेत्र (एक कस्टम तत्व की छाया DOM) को प्रभावित करने के लिए कुछ परिवर्तनों के बारे में धारणा बना सकता है, जो पुन: रेंडरिंग के बजाय इस तरह के घटक के क्षेत्र में फिर से प्रतिपादन को सीमित कर सकता है पूरा पृष्ठ।

यही कारण है कि >>>, /deep/और ::shadowसीएसएस कॉम्बिनेटर, जो छाया डोम सीमाओं पर शैलियों को लागू करने की अनुमति देते थे, पदावनत कर दिए गए थे और जल्द ही क्रोम से हटाए जाने वाले थे (अन्य ब्राउज़रों ने उन्हें कभी नहीं बनाया था)। इन कॉम्बिनेटरों का अस्तित्व केवल पिछले पैराग्राफ में वर्णित अनुकूलन के प्रकार को रोकता है।

Angular2 दोनों दुनिया के फायदे का उपयोग करता है।

यह यूनिडायरेक्शनल डेटा प्रवाह का उपयोग करता है और केवल मॉडल पर परिवर्तन का पता लगाता है। यदि यह पता लगाता है कि यह कारण बनता है डोम अद्यतन करने बाइंडिंग के द्वारा अद्यतन और जैसे संरचनात्मक निर्देशों बनाने जा करने के लिए बदल जाता है *ngFor, *ngIf... डोम अद्यतन करें। इसलिए DOM केवल तभी अपडेट होता है जब मॉडल वास्तव में बदल जाता है।

Angular2 छाया डोम (केवल ViewEncapsulation.Nativeजिसके साथ वर्तमान में डिफ़ॉल्ट नहीं है) का उपयोग ब्राउज़र द्वारा प्रदान की गई शैली एन्कैप्सुलेशन क्षमताओं का उपयोग करने के लिए करता है, या (वर्तमान डिफ़ॉल्ट) बस मूल छाया और डोम और सीएसएस चर तक वर्कअराउंड के रूप में घटकों में जोड़े गए पुनर्लेखन शैलियों द्वारा शैली एनकैप्सुलेशन का अनुकरण करता है। (गतिशील वैश्विक शैली परिवर्तनों के लिए) व्यापक रूप से उपलब्ध हो जाते हैं।


8
... और DOM धीमा नहीं है। तुम हो। korynunn.wordpress.com/2013/03/19/the-dom-isnt-slow-you-are
मैटिया एस्टोरिनो

कुछ व्यावहारिक उत्तर अधिक अर्थ जोड़ सकते हैं।
कोड

@ कोड क्या आप याद कर रहे हैं? प्रदर्शन के बारे में प्रश्न आमतौर पर सामान्य रूप से काफी व्यर्थ होते हैं। यदि आपको वास्तव में जानने की जरूरत है, तो एक बेंचमार्क बनाएं जो आपके उपयोग के मामले को कवर करता है।
गुंटर Zöchbauer

70

नहीं, शैडो डोम और वर्चुअल DOM असंबंधित हैं, हालांकि कुछ इसी तरह का नाम दिया गया है:

वर्चुअल डोम: विभेदक कारणों से DOM की दो प्रतियां (मूल, और अद्यतन) रखने की अवधारणा। रेंडर करने से पहले, रिएक्ट दो ऑब्जेक्ट्स को यह निर्धारित करने के लिए अलग करता है कि क्या यह वास्तविक डोम ट्री में अपडेट (एस) लागू करना चाहिए। इससे प्रदर्शन में वृद्धि होती है, क्योंकि हम केवल उस दृश्य के हिस्से को अपडेट कर रहे हैं जिसकी आवश्यकता है, न कि पूरी स्क्रीन।

शैडो डोम: W3C द्वारा प्रस्तावित वेब कंपोनेंट्स स्पेक्स का एक हिस्सा , जो मूल रूप से छोटे डोम तत्वों और सीएसएस शैलियों को एक ही डोम तत्व में शामिल करने की अनुमति देता है:

उदाहरण छाया डोम तत्व

<video width="300" height="150" />

हालाँकि, <video>वास्तव में निम्नलिखित तत्वों को इनकैप्सुलेट करता है:

<div>
   <input type="button" style="color: blue;">Play
   <input type="button" style="color: red;">Pause
   <source src="myVideo.mp4">
</div>

इसलिए शैडो डोम का उपयोग करके, हम अपने वेब तत्व के कार्यान्वयन विवरण को छिपाने में सक्षम हैं, और केवल उप-तत्वों (यानी height, width) के लिए आवश्यक जानकारी के साथ गुजरते हैं , जो, संभवतः भ्रामक रूप से, propsघटकों को पारित करने के ReactJS मुहावरे के समान है। ।

के माध्यम से दी गई जानकारी :


क्या आपका मतलब है कि शैडो डोम का प्रदर्शन DOM की तरह है लेकिन यह सिर्फ एनकैप्सुलेटेड है?
Hmoo_oomH

3
@Hmoo_oomH मेरी समझ यह है कि शैडो डोम पठनीयता के लिए अधिक है - जैसा कि हम एक उच्च-ऑर्डर तत्व (जैसे <video>) के पीछे जटिल वेब तत्वों के कार्यान्वयन के विवरण छिपा रहे हैं , लेकिन प्रदर्शन लाभ की कोई उम्मीद नहीं है।
लक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.