我有一个链接到一个充满 Facebook 朋友的商店的列表。它包含大约 350 条记录。列表顶部有一个搜索字段,它在 keyup 上触发以下功能:
filterList: function (value) {
// console.time(value);
if (value === null) return;
var searchRegExp = new RegExp(value, 'g' + 'i'),
all = Ext.getStore('Friends'),
recent = Ext.getStore('Recent'),
myFilter;
all.clearFilter();
recent.clearFilter();
// console.log(value, searchRegExp);
myFilter = function (record) {
return searchRegExp.test(record.get('name'));
}
all.filter(myFilter);
recent.filter(myFilter);
// console.timeEnd(value);
},
现在,这在 ST2.1.1 上可以正常工作,但因为我将应用程序升级到了 ST2.2。它真的很慢。它甚至使 Safari 在 iOS 上冻结和崩溃......
这是日志给出的:
t /t/gi Friends.js:147
t: 457ms Friends.js:155
ti /ti/gi Friends.js:147
ti: 6329ms Friends.js:155
tit /tit/gi Friends.js:147
tit: 7389ms Friends.js:155
tito /tito/gi Friends.js:147
tito: 7137ms
有谁知道为什么它现在会这样,或者有没有人有更好的过滤方法。
更新
clearFilter
使用参数调用true
似乎可以加快速度,但还没有以前那么快。
更新
它实际上与过滤商店无关。
它与渲染列表项有关。Sencha 显然为我在商店中的每条记录创建一个列表项,而不是仅仅创建几个列表项并重用它们
它的行为方式是否有明显的原因?