2011-04-04 23 views
1

我想提高基于JQuery的搜索的速度,我已经实现了here。此搜索在具有以下规格的客户端计算机上速度非常慢。 Intel Dual Core Processor 2.0 GHz2 GB RAM提高基于jQuery的搜索的速度

的搜索代码是这样的:

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', ''); 
    }); 
} 

请你告诉我,我能做些什么来提高搜索的速度。用户通常必须按一个键,然后等待几秒钟以过滤下面的记录...

回答

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'); 
    }); 

也就是说,如果我没犯了一个错误,因为这些线路没有经过测试。

+0

感谢您的意见,肯定会有所帮助。必须看到它对性能有什么影响? – 2011-04-06 05:18:59

+0

标记为答案,因为我无法想出比这更好的解决方案... – 2011-04-15 10:59:24