मैं अपने एंगुलरजेएस ऐप के पाचन चक्र के प्रदर्शन को कैसे माप सकता हूं?


82

कोणीयज पाचन चक्र की अवधि को मापने का एक सरल तरीका क्या है? पाचन चक्र के प्रदर्शन का विश्लेषण करने के लिए विभिन्न तरीके मौजूद हैं, हालांकि प्रत्येक अपने स्वयं के पिटफल्स के साथ आता है:

  • क्रोम प्रोफाइलर: बहुत सारे विवरण, एक आसान तरीके से पचाने वाले चक्र को नहीं तोड़ते हैं
  • बतरंग (AngularJS ब्राउज़र प्लगइन): बहुत अधिक उपरि, धीमी गति से ताज़ा दर, बड़े ऐप्स के साथ विस्फोट होता है।

... एक बेहतर तरीका होना चाहिए? 1!

जवाबों:


148

यहाँ एक रहस्य है। क्रोम देव उपकरणों में, एक सीपीयू प्रोफ़ाइल चलाएं। आपके द्वारा कैप्चर करने से रोकने के बाद, स्क्रीन के निचले भाग में "हैवी (बॉटम अप)" के बगल में एक नीचे त्रिकोण है। त्रिकोण पर क्लिक करें और "ज्वाला चार्ट" चुनें। एक बार जब आप फ्लेम चार्ट मोड में होते हैं, तो आप डाइजेस्ट साइकल को देखने के लिए ज़ूम और पैन कर सकते हैं कि वे कितनी देर लगते हैं, और वास्तव में क्या फ़ंक्शन कहा जा रहा है। ज्वाला चार्ट पृष्ठ लोड समस्याओं, एनजी-दोहराने प्रदर्शन समस्याओं, चक्र समस्याओं को पचाने के लिए अविश्वसनीय रूप से उपयोगी है! मैं वास्तव में नहीं जानता कि मैं फ्लेम चार्ट से पहले कैसे डिबग और प्रोफ़ाइल करने में सक्षम था। यहाँ एक उदाहरण है:

क्रोम देव टूल्स में फ्लेम चार्ट


10
धन्यवाद। बस यह कोशिश की और यह बहुत उपयोगी लगता है। क्या आप किसी प्रदर्शन समस्या का पता लगाने और उसे सुधारने के लिए एक साइट पर एक संक्षिप्त डेमो वीडियो का उपयोग कर सकते हैं? यह बहुत दिलचस्प होगा। एक बार फिर धन्यवाद।
सोफिरियो

3
ऐसा लगता है कि बस "चार्ट" कहा जाता है और क्रोम के वर्तमान (v। 51.0) संस्करण में थोड़ा अलग दिखता है।
मार्क स्ट्रोब

Google ने संक्षिप्त विडियो के साथ एक विस्तृत ट्यूटोरियल जारी किया है: Developers.google.com/web/tools/chrome-devtools/…
Vaiden

41

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


कंसोल में निम्न टाइप करें:

angular.element(document).injector().invoke(function($rootScope) { 
  var a = performance.now(); 
  $rootScope.$apply(); 
  console.log(performance.now()-a); 
})

परिणाम आपको पाचन चक्र की अवधि, मिलीसेकंड में देगा। जितनी छोटी संख्या, उतना अच्छा।


ध्यान दें:

डॉमी ने टिप्पणियों में नोट किया: angular.element(document) यदि आप ng-appआरंभीकरण के लिए निर्देश का उपयोग करते हैं तो ज्यादा उपज नहीं होगी । उस स्थिति में, ng-appइसके बजाय तत्व प्राप्त करें । जैसे करकेangular.element('#ng-app')

आप भी आजमा सकते हैं:

angular.element(document.querySelector('[ng-app]')).injector().invoke(function($rootScope) { 
  var a = performance.now(); 
  $rootScope.$apply(); 
  console.log(performance.now()-a); 
})

इस मामले में कुछ भी नहीं बदलता है, इसलिए कोई भी वॉचर्स नहीं चलता है, कुछ भी दोबारा नहीं बनाया जाता है आदि आपको "वास्तविक" नंबर नहीं मिलते हैं।
एक बेहतर ऑलिवर

2
बेशक वे "वास्तविक" संख्या हैं। आप गलत हैं, $ rootScope कर रहे हैं। $ apply। () आपके सभी वॉचर्स को यह पता लगाने के लिए पुनः निर्धारित करता है कि क्या वे बदल गए हैं (अन्यथा कोणीय कैसे पता चलेगा कि कुछ भी नहीं बदला है?)।
गिल बिरमान

हो सकता है कि हम मतलब कुछ अलग, तो मैं बस डॉक्स बोली: The listener is called only when the value from the current watchExpression and the previous call to watchExpression are not equal। आपका कोड किसी भी श्रोता को ध्यान में नहीं रखता है। और कोणीय श्रोताओं के बहुत सारे बनाता है। $apply()जब कुछ भी नहीं बदला है तो आप कभी भी फोन नहीं करेंगे , इसलिए आपके परिणाम केवल कहानी का आधा हिस्सा बताते हैं। परिस्थितियों के आधार पर यह कम दिलचस्प हो सकता है;)
एक बेहतर जैतून

1
यह कल्पना करें: आपके पास 1000 घड़ी अभिव्यक्ति हैं, उनमें से सभी का मूल्यांकन किया जाएगा, लेकिन परिणामस्वरूप एक "श्रोता" आग लगाएगा। क्या आप घड़ी की अभिव्यक्ति के प्रदर्शन, या श्रोताओं के बारे में अधिक चिंतित हैं?
गिल बिरमान

1
angular.element(document)यदि आप ng-appआरंभीकरण के लिए निर्देश का उपयोग करते हैं तो अधिक उपज नहीं होगी । उस स्थिति में, ng-appइसके बजाय तत्व प्राप्त करें । जैसे कि angular.element('#ng-app')...
डोमी


14

आप कोणीय-प्रदर्शन का भी उपयोग कर सकते हैं

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

कोणीय प्रदर्शन स्क्रीनशॉट

विस्मयादिबोधक: मैं विस्तार का लेखक हूं


मैंने इसे स्थापित किया है, लेकिन इसका उपयोग कैसे करना है, इसका पता नहीं लगाया है। क्या आपके एक्सटेंशन ने Chrome के प्रोफाइलर के साथ फ़ंक्शंस जोड़े हैं? धन्यवाद।
gm2008 18

जब आप डेवलपर उपकरण खोलते हैं तो आपके पास उस पर उस दृश्य के साथ "कोणीय" टैब होना चाहिए।
निकोलस जोसेफ

जवाब के लिए धन्यवाद। एक्सटेंशन को सफलतापूर्वक बनाने के लिए, मुझे Python, VCBuild.exe, Windows SDK को भी इंस्टॉल करना होगा। शायद आप अपने मैनुअल में जोड़ सकते हैं।
gm2008

मैं Mac OsX के अंतर्गत हूं इसलिए मुझे इस बात का कोई पता नहीं है कि विंडोज के लिए क्या आवश्यक है। हो सकता है कि आपने जो किया है, उसका वर्णन करने के लिए आप रेपो पर एक पुल अनुरोध कर सकते हैं। जानकारी के लिए धन्यवाद !
निकोलस जोसेफ

"फंक्शन टाइमिंग" क्या करता है? मैंने कुछ मॉड्यूल के नाम दर्ज किए, लेकिन ऐसा कुछ भी नहीं हुआ।
राओल

5

पाचन चक्र पर नज़र रखने के लिए एक आसान उपकरण @kentcdodds द्वारा उत्कृष्ट एनजी-आँकड़े उपकरण के माध्यम से पाया जा सकता है । यह थोड़ा दृश्य तत्व जैसा बनाता है, और इसे बुकमार्कलेट के माध्यम से भी लागू किया जा सकता है। इसे jsfiddle जैसे iFrames के अंदर भी इस्तेमाल किया जा सकता है।

अच्छा पाचन चक्र यहाँ छवि विवरण दर्ज करें

अपने पृष्ठ के कोणीय पाचन / घड़ियों के बारे में आँकड़े दिखाने के लिए थोड़ी सी उपयोगिता। इस लाइब्रेरी में वर्तमान में चार्ट बनाने के लिए एक सरल स्क्रिप्ट है (नीचे देखें)। यह एक मॉड्यूल भी बनाता है जिसे angularStatsएक निर्देश कहा जाता है angular-stats जिसका उपयोग आपके द्वारा निर्दिष्ट पृष्ठ पर एक विशिष्ट स्थान पर कोणीय आँकड़े लगाने के लिए किया जा सकता है।

Https://github.com/kentcdodds/ng-stats पर मिला


2

आप UX Profiler का उपयोग कर सकते हैं

  • उपयोगकर्ता लेनदेन दृश्य, यानी CLICK और इसके कारण होने वाली सभी गतिविधि (अन्य ईवेंट, XHRs, टाइमआउट) एक साथ समूहीकृत।
  • संपूर्ण उपयोगकर्ता लेन-देन और / या इसके भागों का समय मापन (जैसा कि उपयोगकर्ता को लगता है)।
  • संयुक्त एसिंक्रोनस स्टैक ट्रेस।
  • ध्यान केंद्रित Profiler - प्रोफाइल सिर्फ समस्याग्रस्त घटना।
  • कोणीय 1.x एकीकरण।

यहाँ छवि विवरण दर्ज करें


1

सख्त मोड के लिए, एक पचाने का नाभिक, इसे क्रोम में f12 कंसोल में चलाएं

angular.element(document).injector().invoke(['$rootScope',function($rootScope) { var a = performance.now(); $rootScope.$apply(); return performance.now()-a; }])

0

ऊपर वर्णित उपकरण पहले से ही आपको पाचन लूप के प्रदर्शन को मापने का विचार देते हैं अधिकांश आयातकों ने पाचन चक्र के प्रदर्शन को बढ़ाने के लिए अंक दिए हैं

  • सभी अदृश्य तत्वों को छिपाने के लिए बारीकी से स्क्रॉल घटनाओं की निगरानी करें और देखने
    वालों की संख्या को कम करें।

  • अन्य सभी घटनाओं के लिए प्रबंधनीय $ पचाने वाले चक्र हैं।

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