需要 Knockout ObservableArray 性能调整
Knockout ObservableArray Performance Tweak Needed
我希望提高我的敲除 table 绑定的性能。我目前的解决方案工作得非常快,但我更担心浏览器的开销,因为网络应用程序是 运行 在 iGel linux 终端上使用随 OS 安装的 FireFox。终端资源有限,此 Web 应用处于 24x7 生产环境中。
// View Model
self.trMachineData = ko.observableArray([]);
self.machinedata = function () {
return {
MachineData_Machine: ko.observable(''),
MachineData_ProcessDate: ko.observable(''),
MachineData_Description: ko.observable('')
};
};
// Page Interactions
for (var i = 0; i < data.d.DisplayData.length; i++) {
var trd = new vm.machinedata();
trd.MachineData_Machine(data.d.DisplayData[i].Machine);
trd.MachineData_ProcessDate(data.d.DisplayData[i].ProcessDate);
trd.MachineData_Description(data.d.DisplayData[i].Description);
vm.trMachineData.push(trd);
}
// HTML
<table>
<tr>
<td>Machine</td>
<td>Date</td>
<td>Description</td>
</tr>
<tbody data-bind="foreach: trMachineData">
<tr>
<td data-bind="text: MachineData_Machine"></td>
<td data-bind="text: MachineData_ProcessDate"></td>
<td data-bind="text: MachineData_Description"></td>
</tr>
</tbody>
</table>
看起来你根本不需要这三个项目是可观察的,你可以将它们一起存储在一个对象中。
此外,您可以直接更新您的可观察数组:
const tmpData = [] ;
for (var i = 0; i < data.d.DisplayData.length; i++) {
var trd = {};
trd.MachineData_Machine = data.d.DisplayData[i].Machine;
trd.MachineData_ProcessDate = data.d.DisplayData[i].ProcessDate;
trd.MachineData_Description = data.d.DisplayData[i].Description;
tmpData.push(trd);
}
vm.trMachineData(data)
然后在你的 table:
<table>
<tr>
<td>Machine</td>
<td>Date</td>
<td>Description</td>
</tr>
<tbody data-bind="foreach: trMachineData">
<tr>
<td data-bind="text: MachineData_Machine"></td>
<td data-bind="text: MachineData_ProcessDate"></td>
<td data-bind="text: MachineData_Description"></td>
</tr>
</tbody>
</table>
我希望提高我的敲除 table 绑定的性能。我目前的解决方案工作得非常快,但我更担心浏览器的开销,因为网络应用程序是 运行 在 iGel linux 终端上使用随 OS 安装的 FireFox。终端资源有限,此 Web 应用处于 24x7 生产环境中。
// View Model
self.trMachineData = ko.observableArray([]);
self.machinedata = function () {
return {
MachineData_Machine: ko.observable(''),
MachineData_ProcessDate: ko.observable(''),
MachineData_Description: ko.observable('')
};
};
// Page Interactions
for (var i = 0; i < data.d.DisplayData.length; i++) {
var trd = new vm.machinedata();
trd.MachineData_Machine(data.d.DisplayData[i].Machine);
trd.MachineData_ProcessDate(data.d.DisplayData[i].ProcessDate);
trd.MachineData_Description(data.d.DisplayData[i].Description);
vm.trMachineData.push(trd);
}
// HTML
<table>
<tr>
<td>Machine</td>
<td>Date</td>
<td>Description</td>
</tr>
<tbody data-bind="foreach: trMachineData">
<tr>
<td data-bind="text: MachineData_Machine"></td>
<td data-bind="text: MachineData_ProcessDate"></td>
<td data-bind="text: MachineData_Description"></td>
</tr>
</tbody>
</table>
看起来你根本不需要这三个项目是可观察的,你可以将它们一起存储在一个对象中。 此外,您可以直接更新您的可观察数组:
const tmpData = [] ;
for (var i = 0; i < data.d.DisplayData.length; i++) {
var trd = {};
trd.MachineData_Machine = data.d.DisplayData[i].Machine;
trd.MachineData_ProcessDate = data.d.DisplayData[i].ProcessDate;
trd.MachineData_Description = data.d.DisplayData[i].Description;
tmpData.push(trd);
}
vm.trMachineData(data)
然后在你的 table:
<table>
<tr>
<td>Machine</td>
<td>Date</td>
<td>Description</td>
</tr>
<tbody data-bind="foreach: trMachineData">
<tr>
<td data-bind="text: MachineData_Machine"></td>
<td data-bind="text: MachineData_ProcessDate"></td>
<td data-bind="text: MachineData_Description"></td>
</tr>
</tbody>
</table>