我正在从骨干集合中的服务器加载一些初始数据。我设置了一个搜索输入,它会触发对服务器的 AJAX 调用,并在每个 keyup 处返回解析的 JSON。
我希望仅在客户端进行搜索。到目前为止,我已经设置了此代码(该功能发生在 #search 输入中的 keyup 上):
todos 是一个骨干.marionette 集合
$('.content-search').on('keyup', '#search', function(e){
e.preventDefault();
var search = $('#search').val().toLowerCase();
todos.update(initialData.todos);
var json = todos.toJSON();
var filteredJSON = filterJSON(json, search);
dcis.update(filteredJSON);
}
function filterJSON(arr, part) {
return arr.filter(function(obj) {
return Object.keys(obj)
.some(function(k) {
console.log(obj[k]);
if(typeof(obj[k]) == 'string'){
return obj[k].toLowerCase().indexOf(part) !== -1;
}
});
});
};
它非常缓慢。实际上,使用 AJAX 调用调用服务器比使用过滤客户端更快!
任何想法为什么我的代码这么慢?JSON 相当大(500 多个条目)