Angular2 में उत्पादन और विकास मोड के बीच अंतर क्या है?


जवाबों:


76

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

विकास मोड में, दूसरे परिवर्तन का पता लगाने के दौरान, एंगुलर कुछ गहरी वस्तु तुलना भी करता है जो उत्पादन में मॉडल परिवर्तन का पता लगाने के लिए नहीं करेगा।

अपडेट करें:

विकास मोड में, एचटीएमएल सैनिटाइज़र सेवा बाइंडिंग से मान स्ट्रिप्स [innerHTML]="..."या जब कंसोल को एक संकेत भी मुद्रित किया जाता है [ngStyle]="..."। इसे भी देखें: RC.1 में बाइंडिंग सिंटैक्स का उपयोग करके कुछ शैलियों को नहीं जोड़ा जा सकता है


5
यदि मैं उत्पादन मोड या विकास मोड में चल रहा हूं तो मुझे कैसे पता चलेगा?

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

6
इसके अलावा, यदि आप देव मोड में चल रहे हैं और अपने ब्राउज़र में कंसोल खोलें तो इसमें एक संदेश छपा होगा, जिसमें लिखा होगा "कोणीय 2 विकास मोड में चल रहा है। उत्पादन मोड को सक्षम करने के लिए कॉल enableProdeMode ()।" यदि आप पहले से ही उत्पादन मोड में हैं, तो आपको यहां कुछ भी दिखाई नहीं देगा।
c.dunlap

36

ApplicationRef.tick () स्थिति के लिए डॉक्स :

विकास मोड में, tick()यह सुनिश्चित करने के लिए एक दूसरा परिवर्तन पता लगाने का चक्र (TTL = 2) भी करता है ताकि कोई और परिवर्तन का पता न चले। यदि इस दूसरे चक्र के दौरान अतिरिक्त परिवर्तन किए जाते हैं, तो ऐप में बाइंडिंग के साइड-इफेक्ट्स होते हैं, जिन्हें एकल परिवर्तन पहचान पास में हल नहीं किया जा सकता है। इस मामले में, कोणीय एक त्रुटि फेंकता है, क्योंकि एक कोणीय आवेदन में केवल एक परिवर्तन खोज पास हो सकता है, जिसके दौरान सभी परिवर्तन का पता लगाने को पूरा करना होगा।

कारण यह है कि हमारे पास अतिरिक्त परिवर्तन नहीं हो सकते क्योंकि उत्पादन मोड में, परिवर्तन का पता लगाना केवल एक बार चलता है, जिसका अर्थ है कि घटक ट्री के प्रत्येक घटक की एक बार जांच की जाती है (TTL = 1) ... ऊपर से, गहराई से-प्रथम गण। इसलिए, उदाहरण के लिए, चाइल्ड कंपोनेंट की इनपुट प्रॉपर्टी में बदलाव के कारण कुछ अन्य प्रॉपर्टी में बदलाव होता है, जो पेरेंट कंपोनेंट को व्यू / टेम्प्लेट में बांधी जाती है, पेरेंट कंपोनेंट का व्यू अपडेट नहीं होगा (क्योंकि चेंज डिटेक्शन दोबारा नहीं आएगा। उत्पादन मोड में मूल घटक ... "वन पास" ट्री ट्रैवर्सल के कारण)। यह केवल अगली बार कुछ घटना घटित होने पर अद्यतन हो जाएगा और परिवर्तन का पता लगाने फिर से चलाता है - लेकिन यह बहुत देर हो चुकी है!

यहां एक प्लंकर है जो नियम का उल्लंघन करता है - एक बच्चे के घटक में एक setइनपुट संपत्ति पर एक विधि होती है जो एक अन्य इनपुट संपत्ति को संशोधित करती है। हां, यह एक आकस्मिक उदाहरण है, लेकिन इसे अगले की तुलना में समझना आसान है:

एक अन्य परिदृश्य जहां आप इस समस्या में भाग सकते हैं, स्टेटफुल पाइप के साथ है। यदि आपकी समस्या है तो इस उत्तर को देखें ।

आपको अपनी समस्या (दूसरे SO प्रश्न में) का वर्णन करना चाहिए। इसे ठीक करने का एक तरीका होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.