улучшить скорость поиска на основе jquery - PullRequest
1 голос
/ 04 апреля 2011

Я хочу повысить скорость поиска на основе JQuery, который я реализовал здесь . Этот поиск становится чрезвычайно медленным на клиентском компьютере, имеющем следующие спецификации. 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', '');
    });
}

пожалуйста, скажите мне, что я могу сделать, чтобы улучшить скорость поиска. Пользователь обычно должен нажать одну клавишу, а затем подождать несколько секунд, чтобы отфильтровать записи ниже ...

1 Ответ

1 голос
/ 05 апреля 2011

Вам не нужно создавать объект 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');
    });

То есть, если я не ошибся, поскольку эти строки не проверены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...