[英]How can i improve performance of search script?
我有很多项目和一些输入的UL清单。 我的脚本监听输入的键,并显示或隐藏与输入字符串匹配的字段。
这是我的代码:
$(function(){
$('#srvSearchField').keyup(function(){
var value = $(this).val();
$('.srvClientBlock').each(function(){
var currentFieldValue = $(this).children('.srvClientName').html();
var exp = new RegExp(value);
if (currentFieldValue.match(exp)) {
$(this).show();
} else {
$(this).hide();
}
});
});
});
如何改善效能? 或者我应该在服务器上发送请求以找到匹配的值?
UPD:我决定使用Ajax来过滤客户端。
var url = "<?php echo $searchClientUrl;?>";
$(function(){
$('#srvSearchField').keyup(function(){
var request = $(this).val();
var callback = function(response) {
$('.srvClientBlock').hide();
var data = JSON.parse(response);
for (var i = 0; i < data.length; i++) {
$('#srvClient-' + data[i]).show();
}
};
$.post(url, {"request" : request}, callback);
});
});
谢谢大家的回答。
一些要点:
test
方法代替match
。 当然,仅当列表内容没有动态更改(或至少每次都需要重新构建缓存)时,才应用缓存。
在某些情况下,将每次搜索的请求发送到服务器才有意义:
但是它们需要足够的带宽来处理许多请求,并且延迟相对较小。 不过,您可以通过特殊的优化来解决这些问题。
// simple improvements, no caching:
$(function(){
$('#srvSearchField').keyup(function(){
var exp = new RegExp( $(this).val() );
$('.srvClientBlock').each(function(){
var $this = $(this);
var currentFieldValue = $this.children('.srvClientName').text();
$this[ exp.test(currentFieldValue) ? "show" : "hide" ]();
});
});
});
如果可以避免ajax请求,请这样做。 您可能需要使用它们,但是如果遇到客户端问题,浏览器只能处理那么多数据。
如果您需要处理ajax请求或大量数据,请将keydown事件设置为开始100-300 ms的超时,此超时将在每次后续的keydown中重置并重新启动,从而调用搜索功能。 这样,您的搜索将仅在用户空闲200毫秒(不多,但足以大大减少搜索次数)时运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.