我刚刚开始使用Knockout.js(一直想尝试一下,但现在我终于有了借口!) - 然而,当我将一个表绑定到一个相对较小的一组时,我遇到了一些非常糟糕的性能问题数据(约400行左右).
在我的模型中,我有以下代码:
this.projects = ko.observableArray( [] ); //Bind to empty array at startup
this.loadData = function (data) //Called when AJAX method returns
{
for(var i = 0; i < data.length; i++)
{
this.projects.push(new ResultRow(data[i])); //<-- Bottleneck!
}
};
Run Code Online (Sandbox Code Playgroud)
问题是for上面的循环大约需要30秒左右,大约需要400行.但是,如果我将代码更改为:
this.loadData = function (data)
{
var testArray = []; //<-- Plain ol' Javascript array
for(var i = 0; i < data.length; i++)
{
testArray.push(new ResultRow(data[i]));
}
};
Run Code Online (Sandbox Code Playgroud)
然后for循环在眨眼间完成.换句话说,pushKnockout observableArray对象的方法非常慢.
这是我的模板:
<tbody data-bind="foreach: …Run Code Online (Sandbox Code Playgroud)