javascript - 加速 jQuery/Javascript 搜索功能

标签 javascript jquery performance search

我有超过 3000 个具有唯一名称的项目的列表。它们都包裹在 UL 标签内,如下所示:

<ul>
    <li><a href="#"> Item_ID125167</a></li>
    <li><a href="#"> Item_ID146324</a></li>
</ul>

然后我有一个像这样的搜索输入:

<input type="text" id="searchfield" class="form-control" placeholder="Search">
<span class="input-group-addon">
    <button type="submit" id="searchButton" onclick="filterByName()">
        <span class="glyphicon glyphicon-search"></span>
    </button>
</span>

最后是隐藏/显示匹配项的函数:

function filterByName() {
  $("li").each(function(index) {
    if ($(this).children('a').text().toUpperCase().indexOf($("#searchfield").val().toUpperCase()) > -1) {
      $(this).css('display', "");
    } else {
      $(this).css('display', "none");
    }
  });
}

使用老式 Android 手机处理超过 3000 个项目时,感觉有点慢。搜索功能有更好的解决方案吗?

最佳答案

加快速度意味着您应该尽可能地重用资源

var $list = {}; // initialize an empty global scope variable to keep your elements in
function filterByName(searchString) {
  //reusing $list will prefent you from walking the dom each time
  $list.each(function(index, el) {
    el.style.display = el.title.indexOf(searchString) > -1 ? "list-item" : "none";
  });
}

function loadList() {
  $list = $('#results').find('li'); //faster than $('#results > li');
  $list.each(function(index, el) {
      //save the uppercase search values in a propery to search faster
      //this saves you from running .toUpperCase() on every search
      var text = el.textContent || el.innerText;
      el.setAttribute('title', text.trim().toUpperCase()); //using title makes a faster search later
      $list[index]=el;
  }); 
}

$(function() {
    loadList();
  $('#searchButton').click(function(e){
    e.preventDefault();
    //prepariung the search sring here saves processing during search
    filterByName($("#searchfield").val().trim().toUpperCase());
    return false;
  });
  //if your list is build dynamicly simple run loadList() every time changes to the list content may happen
});

查看工作 fiddle https://jsfiddle.net/q1x7ujex/

关于javascript - 加速 jQuery/Javascript 搜索功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43994162/

相关文章:

javascript - React 可重用状态修改方法或组件

javascript - 基金会 : how to switch between small and medium reveal modal?

javascript - 将参数值组合到 Jquery 中的变量名

javascript - 什么更快 - $().closest() 还是原生 while 循环?

c# - 为什么在排序输入上插入到我的树中比随机输入更快?

performance - Int32 与 Float64 在 Crystal 中的表现

javascript - 如何只允许数字?

javascript - 尝试以错误的方式关闭?

javascript - 如果我将 jQuery 放置在将某些 HTML 注入(inject) DOM 到 $ ('document' ).ready() 中时将被使用,这是一个问题吗?

jquery - 在 JQuery 对话框中启用按钮