【发布时间】:2017-05-16 06:41:54
【问题描述】:
我有一个包含 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 多个项目。搜索功能有更好的解决方案吗?
【问题讨论】:
-
使用 find() 代替 children()。 Find 使用本机浏览器功能,通常速度更快。
-
我的建议是不要在单个页面上显示所有 3000 个项目,而是将它们拆分为页面(分页技术),以便每个页面显示 50-100 个项目。通过这样做,您可以显着减少循环的开销并大大提高性能。实际上,没有人愿意滚动查看长列表,这就是为什么所有在线购物网站都使用分页技术的原因
-
搜索是否仍然能够从分页的第 20 页快速挑选项目?
-
它应该在服务器端执行。您在服务器上有 3000 个项目,当有人按名称搜索特定项目时,该名称将在已存在 3000 个项目的服务器上查看,并返回结果以显示在浏览器中
-
这种技术在每个地方(谷歌、易趣、亚马逊......)都实现了,所以您需要做的就是向服务器发送请求,让服务器进行过滤工作,然后将结果返回给您并显示这些结果浏览器,简单快速
标签: javascript jquery performance search