2012-04-24 90 views
2

我已经有了一个相当复杂的应用程序,一个视图模型具有记录列表:可怕的性能对象

app.records = ko.observableArray([]) 

使用AJAX我抓住一些JSON从服务器将其填充到阵列中:

$.getJSON("/api/records", function(data){ 
    app.records($.map(data, function(item){ 
     r = new Record(item); 
     return r; 
    }); 
}); 

这对于我的测试数据集中的至少6个项目非常有用。该应用几乎立即加载。但我也有一个创造新的记录按钮,做到这一点:

$.post("/api/records", {}, function(record){ 
    r = new Record(record); 
    console.log("About to push..."); 
    app.records.push(r); 
    console.log("Pushed the new record."); 
}); 

第一个日志行瞬间出现,但第二线大约需要8秒出现。评论推动使操作有效地立即。我相信这个问题是由于我有相当多的相当复杂的计算变量引起的;我认为这一推动正在导致它重新计算一切。然而,奇怪的是,在页面加载时添加六个测试项目是即时的。

任何人都可以给我一些提示来调试吗?该应用程序不处于我可以轻松共享代码或构建隔离问题的JSFiddle的状态。我不愿意盲目地评论一下线路,看看是否有什么解决问题,因为这可能需要很长时间。有没有人有任何想法?或者至少是一个总体战略? :)

(我目前使用的2.1候选发布;与淘汰赛2.0出现的问题,以及)

回答

0

好了,你的理论有关计算观测造成性能问题似乎是合理的。使用“二分搜索”策略评论他们可能是本地化问题的最快方法。或者您可以将日志记录添加到您计算的所有observables中。