2014-06-08 16 views
6

कोणीय में बेहतर क्या है - एक चर या फ़ंक्शन से जुड़ने के लिए। विशेष रूप से:कोणीय: स्कोप वैरिएबल बनाम फ़ंक्शन

  • क्या डायजेस्ट कॉल या फ़ंक्शन के लिए बनाए गए अतिरिक्त घड़ियों के कारण कोई प्रदर्शन जुर्माना है?
  • क्या स्कोप फ़ंक्शंस के लिए कोई सिफारिशें हैं और क्या नहीं करना चाहिए?

    <!-- With function --> 
    <button ng-disabled="noDataFoo()">Add</button> 
    
    <!-- With variable --> 
    <button ng-disabled="noDataFlag">Add</button> 
    

    बैकअप नियंत्रक:

दो विकल्पों के लिए उदाहरण

app.controller('sample', function($scope, $http) { 
    $scope.noDataFlag = true; 

    $scope.noDataFoo = function() { 
     return !$scope.data; 
    }; 

    $http('/api/getdata').success(function(data) { 
     $scope.data = data; 
     $scope.noDataFlag = false; 
    }; 
}); 

उत्तर

2

मैं कुछ परीक्षण किए गए और गिना कितनी बार समारोह विभिन्न परिस्थितियों में कहा जाता है। ऐसा होता है, फ़ंक्शन को बाध्यकारी करने की संख्या कहा जाता है, कभी-कभी संख्या में दोगुनी होती है और ऐसा लगता है कि प्रत्येक बाहरी गतिविधि, पृष्ठ रीलोड या बटन क्लिक या AJAX कॉल की तरह होता है।

सरल शब्दों में, यदि आप <button ng-disabled="noDataFoo()"> और फिर HTML में {{noDataFoo()}} है, समारोह पेज लोड पर 4 बार बुलाया जाएगा, फिर एक और 2 या 4 बार कुछ $http सेवा डेटा लाता है, और एक अन्य 2 या 4 बार कुछ करता है, तो अन्य बटन क्लिक किया गया था। प्रयोगों से, संख्या 2 है यदि noDataFoo बदलती नहीं है और 4 अगर यह बदलती है। वैसे, यह एक और नियंत्रक पर क्लिक के लिए रखता है।

मेरा निष्कर्ष है: त्वरित कार्यों से जुड़ना ठीक है। लंबे समय तक बाइंडिंग की संख्या को कम रखना बेहतर होता है। और यहां तक ​​कि लंबे समय तक परिणाम को कैश करना और "मैन्युअल" कैश अपडेट को संभालना बुद्धिमानी है।

+0

यह पुराना है, लेकिन मुझे लगता है कि आपके द्वारा बताए गए कुछ कारणों के लिए स्कोप चर पहली पसंद होना चाहिए। – bhantol

2

मैं एक जावास्क्रिप्ट प्रदर्शन विशेषज्ञ या कुछ भी, नहीं कर रहा हूँ, लेकिन मेरी भोली राय होगी कि चर बाहर होगा मेयबे द्वारा कुछ नैनोसेकंड द्वारा फ़ंक्शन निष्पादित करें क्योंकि यह 2 चरण की प्रक्रिया है।

इसके अलावा, उपरोक्त उदाहरण बस के रूप में आसानी से हो सकता है का उपयोग कर पूरा:

<button ng-disabled="!data">Add</button> 
+0

आपके उत्तर के लिए बहुत बहुत धन्यवाद। मैं देखता हूं कि मैंने अपने इरादों को पूरी तरह से समझाया नहीं है। मेरी चिंता यह है - कितनी बार कोणीय समारोह की गणना करता है। शायद कार्यों के लिए बाध्यकारी नहीं होने के लिए कोणीय सिफारिश मौजूद है। प्रश्न में उदाहरण सरलीकृत है, एप्लिकेशन फ़ंक्शन में लंबा है और यह कई एपीआई से रिटर्न वैल्यू पर निर्भर करता है। जो स्थिति को प्रबंधित करने में कठोर बनाता है ... –

संबंधित मुद्दे