我有一個淘汰賽應用程序,我有可寫的已計算觀測量的層次結構像下面的性能問題:有很多淘汰賽嵌套寫computeds
function InvoiceVM() {
self.isSelected = ko.observable()
self.selectedAmount = ko.computed(function() {
if (self.isSelected())
return self.usdBalance;
else
return 0;
}
}
function CompanyVM() {
self.invoices = ko.observableArray()
self.totalSelectedAmount = ko.computed(function() {
var total = 0;
for (var i = 0; i < self.invoices().length; i++) {
total += self.invoices()[i].selectedAmount();
}
return total;
});
self.isSelected = ko.computed({
read: function() {
var isSelected = true;
for (var i = 0; i < self.invoices().length; i++) {
if (!self.invoices()[i].isSelected())
isSelected = false;
}
return isSelected;
},
write: function (value) {
for (var i = 0; i < self.invoices().length; i++)
self.invoices()[i].isSelected(value);
},
deferEvaluation: true,
owner: self
})
}
function ParentVM() {
self.companies = ko.observableArray()
self.isSelected = ko.computed({
read: function() {
var isSelected = true;
for (var i = 0; i < self.funds().length; i++) {
if (!self.companies()[i].isSelected()) {
isSelected = false;
break;
}
}
return isSelected;
},
write: function (value) {
for (var i = 0; i < self.companies().length; i++) {
var currentCompany = self.companies()[i];
for (var j = 0; j < currentCompany.invoices().length; j++)
currentCompany.invoices()[j].isSelected(value);
}
},
deferEvaluation: true
});
}
的問題是,當parentVM選擇(通過複選框)需要30-40秒才能渲染所有複選框並更新總金額。大約有4500個發票和大約274家公司(但只有公司正在展示,發票隱藏使用display:none)。我嘗試使用延遲更新插件限制觀察對象,無論是否使用deferEvaluation選項,都通過jQuery手動選擇複選框(這不適用於雙向綁定)。有沒有人有關於加速這個過程的建議?在此先感謝您的幫助!
考慮切換模板引擎。 –
另外,您可以修改底層數組和批量更改,然後手動通知更改(如果有幫助)。 –
你推薦什麼模板引擎? – mets19