성능에 대해 걱정할 경우 계산 결과에서 반복되는 검색 결과를 반복하는 동안 볼 수없는 배열을 가질 수 있습니다. 또한 루프 내에서 반복적으로 jQuery를 사용하여 선택한다는 점에 유의하십시오. 이는 KO로 인한 속도 저하를 무효화한다고 생각합니다.
self.missedRecords = [];
self.matchedRecords = ko.computed(function() {
var searchQuery = $('.search-input').val().toLowerCase(),
transponders = self.transponders(),
matched = [];
// Clear out missed records
self.missedRecords.length = 0;
_.each(transponders, function(transponder) {
if (transponder.title.toLowerCase().indexOf(searchQuery) >= 0) {
matched.push(transponder);
} else {
self.missedRecords.push(transponder);
}
});
return matched;
});
나는 코드가 짧게 유지하기 위해 밑줄에서 _.each
을 사용했다. 이 방법의 단점은 missedRecords
에 대한 변경 사항이 UI에 바운드 될 수 없다는 점입니다 (예 : foreach
바인딩 인 경우). 당신이 일 빠른 (어)를 유지하려면 여전히 관찰, 그리고 할 수 missedRecords
배열을 필요로 할 경우
, 당신이 뭔가를 할 수 있습니다 :
self.missedRecords = ko.observableArray([]);
self.matchedRecords = ko.computed(function() {
var searchQuery = $('.search-input').val().toLowerCase(),
transponders = self.transponders(),
matched = [],
missed = [];
_.each(transponders, function(transponder) {
if (transponder.title.toLowerCase().indexOf(searchQuery) >= 0) {
matched.push(transponder);
} else {
missed.push(transponder);
}
});
// Clear out missed records, without triggering subscriptions
self.missedRecords().length = 0;
// Copy the local missed array to the KO observable array
// This will NOT trigger notifications
ko.utils.arrayPushAll(self.missedRecords(), missed);
// Tell KO that the observable array has mutated - this will trigger changes
// to anything observing the missedRecords array
self.missedRecords.valueHasMutated();
return matched;
});
또한 모두 computed
를 건너 뛸 수 있고 단지에 가입 배열의 상태가 변경됩니다. 예를 들어 : - 감사
self.missedRecords = ko.observableArray([]);
self.matchedRecords = ko.observableArray([]);
self.transponders.subscribe(function(newTransponders) {
var matched = [],
missed = [];
_.each(newTransponders, function(transponder) {
// Populate matched/missed local arrays
});
// Copy the arrays to the observableArray instances using the technique above
});
그냥 계산 된 2를 사용하면 조기 최적화 –