提高基于jquery的搜索速度

时间:2011-04-04 08:24:54

标签: jquery optimization search filter

我想提高我实施的基于JQuery的搜索的速度here。在具有以下规范的客户端计算机上,此搜索速度极慢。 Intel Dual Core Processor 2.0 GHz2 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', '');
    });
}

请告诉我如何提高搜索速度。用户通常必须按一个键然后等待几秒钟来过滤下面的记录...

1 个答案:

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

也就是说,如果我没有犯错误,因为这些行未经测试。