उन जटिल अनुप्रयोगों के निर्माण के लिए, ध्यान रखें कि आपकी पसंद पर प्रदर्शन प्रभाव पड़ता है। इसके अलावा, मैं अधिक तकनीकी विवरण के साथ मार्क उत्तर को पूरा करना चाहता हूं:
$ टाइमआउट (कॉलबैक) वर्तमान पचाने के चक्र का इंतजार करेगा (यानी कोणीय अद्यतन सभी मॉडल और DOM), फिर वह अपने कॉलबैक को निष्पादित करेगा - संभावित रूप से कोणीय मॉडल को प्रभावित करेगा - फिर $apply
रूट $ गुंजाइश, और रीडेस्टेस्ट पर एक पूर्ण लॉन्च करें सब कुछ।
दूसरी ओर $ evalAsync (कॉलबैक) , कॉलबैक को वर्तमान, या अगले, पाचन चक्र में जोड़ देगा। जिसका अर्थ है कि यदि आप एक पाचन चक्र के भीतर हैं (उदाहरण के लिए किसी ng-click
निर्देश से बुलाए गए कार्य में ), तो यह किसी भी चीज का इंतजार नहीं करेगा, कोड तुरंत निष्पादित किया जाएगा। यदि आप एक अतुल्यकालिक कॉल के भीतर हैं, उदाहरण के लिए asetTimeout
, एक नया पाचन चक्र ( $apply
) शुरू हो जाएगा।
इसलिए प्रदर्शन के मामले में कॉल करना हमेशा बेहतर होता है $evalAsync
, यह , जब तक कि यह आपके लिए महत्वपूर्ण न हो कि आपके कोड को निष्पादित करने से पहले दृश्य अद्यतित है, उदाहरण के लिए यदि आपको कुछ डीओएम विशेषताओं जैसे कि तत्वों की चौड़ाई और इस तरह की आवश्यकता है।
यदि आप $ टाइमआउट, $ evalAsync, $ डाइजेस्ट, $ लागू होने के बीच अंतर के बारे में अधिक विवरण चाहते हैं, तो मैं आपको उस अन्य प्रश्न पर अपना उत्तर पढ़ने के लिए आमंत्रित करता हूं: https://stackoverflow.com/a/23102223/1501926
प्रलेखन को पढ़ना भी सुनिश्चित करें :
$ EvalAsync कोई गारंटी नहीं देता है कि जब अभिव्यक्ति निष्पादित होगी, तो केवल:
- यह उस फ़ंक्शन के बाद निष्पादित करेगा जो मूल्यांकन निर्धारित करता है (अधिमानतः डोम रेंडरिंग से पहले)।
- अभिव्यक्ति के निष्पादन के बाद कम से कम एक $ पच चक्र का प्रदर्शन किया जाएगा।
नोट: यदि इस फ़ंक्शन को $ डाइजेस्ट चक्र के बाहर कहा जाता है, तो एक नया $ डाइजेस्ट चक्र शेड्यूल किया जाएगा । हालांकि, यह हमेशा उस कोड को प्रोत्साहित किया जाता है जो $ लागू कॉल के भीतर से मॉडल को बदलता है। इसमें $ evalAsync के माध्यम से मूल्यांकन किया गया कोड शामिल है।