मान लीजिए मैं 5000 वस्तुओं (बूलियन मूल्यों के साथ) जो मैं टेम्पलेट में ng-repeat
करने के लिए है की एक सरणी है:कस्टम फ़िल्टर बनाम नियंत्रक प्रदर्शन की तुलना में फिल्टर समारोह
$scope.arr = [
{
"value": true
},
{
"value": false
},
{
"value": false
}
//and so on
]
अब, मैं फिल्टर करने के लिए इस ng-repeated
सरणी चाहते हैं एक गतिशील चर के आधार पर, 'show_filter' कहें, जिसे मैं कहीं और स्थापित कर रहा हूं।
यदि 'show_filter' को 'सभी' पर सेट किया गया है, तो मैं सभी ऑब्जेक्ट्स दिखाना चाहता हूं। यदि यह गलत (बूलियन मान) पर सेट है तो मैं वस्तुओं को 'मान' कुंजी सेट के साथ गलत दिखाना चाहता हूं। जब 'show_filter' सत्य पर सेट किया जाता है तब भी वही होता है।
1. बिल्ड कस्टम फ़िल्टर:
फिल्टर:
मैं इस तरह छानने कार्य के लिए एक कस्टम फ़िल्टर लिखते थे
तो, दो दृष्टिकोण देखते हैं
app.filter('filterArr', function() {
return function(arr, show_filter) {
var filtered_arr = [];
if(show_filter != 'All') { //if show_filter is a boolean value
for(var i = 0; i < arr.length; i++) {
if(arr[i].value == show_filter) {
filtered_arr.push(arr[i]);
}
}
return filtered_arr;
}
else {
return arr; //return the entire array if show_filter is set to 'All'
}
}
})
टेम्पलेट:
obj in arr | filterArr : show_filter
2. लिखें नियंत्रक में एक फिल्टर समारोह:
फिल्टर:
$scope.filterObjects = function(arr) {
var filtered_arr = [];
if($scope.show_filter != 'All') { //if $scope.show_filter is a boolean value
for(var i = 0; i < arr.length; i++) {
if(arr[i].value == $scope.show_filter) {
filtered_arr.push(arr[i]);
}
}
return filtered_arr;
}
else {
return arr; //return the entire array if show_filter is set to 'All'
}
}
टेम्पलेट:
obj in filterObjects(arr)
उपर्युक्त दो तरीकों में से कौन सा तेज़ होगा? मैंने प्रत्येक डायजेस्ट लूप के लिए हर बार कस्टम फ़िल्टर कोड निष्पादित किया है और न केवल $scope.show_filter
में किए गए परिवर्तनों के लिए, जो मुझे काफी अक्षम मानने के लिए प्रेरित करता है। हालांकि मुझे यकीन नहीं है कि दोनों तरीकों के बीच तेज़ कौन सा है।
आपके पास दो समान कार्य हैं और आप पूछते हैं कि सबसे तेज़ कौन सा है? यदि आपका मतलब है कि जिसे कम से कम कई बार कहा जाता है, तो शायद आपने पहले से ही अपने प्रश्न का उत्तर दिया है? – davidkonrad
मुझे नहीं पता कि दूसरे फ़ंक्शन को कितनी बार बुलाया जाता है। –
सबसे तेज़ विकल्प फ़िल्टर किए गए सरणी को 'ngRepeat' में बेनकाब करना है। दूसरे कार्य को प्रत्येक पाचन चक्र में बुलाया जाना चाहिए। – zeroflagL