आश्चर्य की बात यह है कि आमतौर पर यह कोई समस्या नहीं है, ब्राउज़र को हजारों बाइंडिंग के साथ भी समस्या नहीं है, जब तक कि अभिव्यक्ति जटिल न हों। how many watchers are ok to have
2000
का सामान्य उत्तर है।
समाधान:
यह काफी AngularJS 1.3
के बाद से आसान है, के बाद से one-time
बाइंडिंग कोर में अब कर रहे हैं।
- एक बार चर के बाध्यकारी।
हम द्रष्टा को रोकने के लिए एक बार बंधन (::)
निर्देश का उपयोग अवांछित चर को देखने के लिए कर सकते हैं। यहां, चर केवल & पर एक बार देखेगा, इसके बाद यह उस चर को अपडेट नहीं करेगा।
- पाचन चक्र को मैन्युअल रूप से रोकें।
HTML:
<ul ng-controller="myCtrl">
<li ng-repeat="item in Lists">{{lots of bindings}}</li>
</ul>
नियंत्रक कोड:
app.controller('myCtrl', function ($scope, $element) {
$element.on('scroll', function() {
$scope.Lists = getVisibleElements();
$scope.$digest();
});
});
$digest
के दौरान, आप Lists
वस्तु में परिवर्तन में केवल रुचि रखते हैं, अलग-अलग करने के लिए परिवर्तन नहीं आइटम नहीं है। फिर भी, कोणीय अभी भी परिवर्तन के लिए हर एक दर्शक से पूछताछ करेगा।
stop
और pause
के लिए निर्देश डाइजेस्ट:
app.directive('stopDigest', function() {
return {
link: function (scope) {
var watchers;
scope.$on('stop', function() {
watchers = scope.$$watchers;
scope.$$watchers = [];
});
scope.$on('resume', function() {
if (watchers)
scope.$$watchers = watchers;
});
}
};
});
अब, नियंत्रक कोड बदला जाना चाहिए:
<ul ng-controller="listCtrl">
<li stop-digest ng-repeat="item in visibleList">{{lots of bindings}}</li>
</ul>
app.controller('myCtrl', function ($scope, $element) {
$element.on('scroll', function() {
$scope.visibleList = getVisibleElements();
$scope.$broadcast('stop');
$scope.$digest();
$scope.$broadcast('resume');
});
});
संदर्भ डॉक्टर:https://coderwall.com/p/d_aisq/speeding-up-angularjs-s-digest-loop
धन्यवाद।
ऐसे में ऐसा कोई तरीका नहीं है, लेकिन आपत्तिजनक रूप से आपके पास {{{:: myVar}} जैसे पृष्ठ से वॉचर को कम करने के लिए बाइंडोन निर्देश हो सकता है, जो अपडेट के बाद केवल एक बार और उसके बाद मूल्य के लिए देखेगा एक मान –
मैं एक बार बाध्यकारी का उपयोग नहीं कर सकता। यह चर से घड़ी को हटा देगा और मुझे दो तरह की बाध्यकारी की आवश्यकता है क्योंकि मैं इनपुट बॉक्स –
के लिए एनजी-मॉडल चर का उपयोग कर रहा हूं शायद '$ watchCollection' – malix