【发布时间】:2021-02-16 21:23:10
【问题描述】:
实现的自定义过滤器运行良好,但我遇到了 SlickGrid js 的性能问题。在应用自定义过滤器并向网格添加新的整体后,过滤器将再次应用于整个(已经)过滤的结果集。在我看来,过滤器应该只应用于添加的项目。
我查看了文档,但找不到任何提示如何控制这种行为。
有没有人有任何想法或面临同样的问题?
提前致谢
【问题讨论】:
标签: javascript performance datagrid slickgrid
实现的自定义过滤器运行良好,但我遇到了 SlickGrid js 的性能问题。在应用自定义过滤器并向网格添加新的整体后,过滤器将再次应用于整个(已经)过滤的结果集。在我看来,过滤器应该只应用于添加的项目。
我查看了文档,但找不到任何提示如何控制这种行为。
有没有人有任何想法或面临同样的问题?
提前致谢
【问题讨论】:
标签: javascript performance datagrid slickgrid
假设你使用的是DataView,那么过滤算法本质上是:
var idx = 0;
for (var i = 0, ii = items.length; i < ii; i++) {
if (filter(items[i], filterArgs, dataView, i)) {
filteredItems[idx++] = items[i];
}
}
filteredItems var 是 DataView 的本地变量,因此您需要修改 DataView 并使用 getter 公开它,然后:
if (filter(items[newItemIndex], filterArgs, dataView, newItemIndex)) {
filteredItems[filteredItems.length] = items[newItemIndex];
}
或者您可以为 DataView 添加一个专门针对此用例的新方法。
或者您可以在addItem 方法中添加第二个参数,例如addToFilter,以便在出现的refresh() 之前执行此功能。
【讨论】: