我想提高我实施的基于JQuery的搜索的速度here。在具有以下规范的客户端计算机上,此搜索速度极慢。 Intel Dual Core Processor 2.0 GHz
与2 GB RAM
。
搜索代码是:
function applyFilter(evt) {
if (!evt) evt = e.which;
if (evt.keyCode == 13)
return false;
$('table#tblTestRequest tr').css('display', 'none');
$('table#tblTestRequest tr:first').css('display', '');
var tbFilterVal = $('#txtFilter').val().toLowerCase();
filter($('table#tblTestRequest tr:has(span)'), tbFilterVal);
$('#txtFilter').focus();
evt.cancelBubble = true;
}
function filter(selector, query) {
query = $.trim(query); //trim white space
query = query.replace(/ /gi, '|'); //add OR for regex query
$(selector).each(function() {
($(this).text().search(new RegExp(query, "i")) < 0) ? $(this).css('display', 'none') : $(this).css('display', '');
});
}
请告诉我如何提高搜索速度。用户通常必须按一个键然后等待几秒钟来过滤下面的记录...
答案 0 :(得分:1)
您不需要为每个对象创建一个RegExp对象。只需为查询创建一个RegExp对象,并在每个对象的文本上使用它的test
方法。这也消除了与0进行比较的需要。我不知道这些优化是否足够,但它应该有所帮助。
基本上,你替换了这些行:
$(selector).each(function() {
($(this).text().search(new RegExp(query, "i")) < 0) ? $(this).css('display', 'none') : $(this).css('display', '');
});
与
var pat = new RegExp(query, "i");
$(selector).each(function() {
(pat.test($(this).text()) ? $(this).css('display', '') : $(this).css('display','none');
});
也就是说,如果我没有犯错误,因为这些行未经测试。