【发布时间】:2014-01-05 06:33:01
【问题描述】:
我有一个淘汰赛项目进展顺利,直到我开始使用它来处理更多数据。使用少于 50 条记录的数据集,这很棒。但是如果有 200 条、500 条甚至更多条记录,它就无法做到。
我已经阅读了所有我可以阅读的内容(包括Knockout.js incredibly slow under semi-large datasets),但我的问题无法通过模板解决。我正在使用 SlickGrid(并且无法切换到 ko.grid)并且当时尝试禁用部分屏幕,我真的认为这与网格有关。
在更新字段时会出现此问题。它会冻结屏幕一分钟或更长时间。它会在此过程中更新一些 Computed,但它们都不会花费任何显着的时间来运行。
我尝试限制 Computeds 以将它们从等式中删除,但没有帮助。
除了对数据进行分页以从不处理超过 50 条记录之外,有什么想法吗?
编辑:我能展示的最接近的是我所基于的这个小提琴:http://jsfiddle.net/rniemeyer/A9NrP/
我主要编辑了更新部分:
var data = ko.utils.unwrapObservable(settings.data); //just for subscription
很重,我使用了另一种机制来订阅更新。
它在 Fiddle 上运行良好,但在大规模上却不行。我目前的假设是,在一个记录发生变化后,所有可观察的数据都会被重新评估,即使是那些没有变化的。
【问题讨论】:
-
如果您可以为应用程序的有问题部分添加一个小提琴/或对问题进行等效模拟,这将有助于调试/推荐解决方案。
-
我很愿意,但这是不可能的;该项目超级大,简化它以将其放入 Fiddle 绕过了问题......对不起
-
这个问题可能与对更新的 observable 没有足够精细的控制有关。但没有孤立的测试用例,一切都只是猜测。
标签: knockout.js slickgrid