我有一个在搜索区域中显示数据的功能,该功能很好,但是即使我单击一个数据,当我想在搜索区域中查看数据时,速度也很慢。
数据加载时间很慢,因为请求中有22500行,是否有可能纠正此问题,例如添加仅显示100行的函数。
如何解决此问题,谢谢
<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet" />
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.full.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/i18n/fr.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src="https://cdn.rawgit.com/eligrey/FileSaver.js/e9d941381475b5df8b7d7691013401e171014e89/FileSaver.min.js"></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/spin.js/2.0.1/spin.min.js'></script>
.
.
.
function searchTree(obj,search,path){
var newSearch = search.replace(/ *\[ Resp:[^)]*\] */g, "");
var newSearch1 = search.replace(/ *\( [^)]*\) */g, "");
if(obj.desc === newSearch && newSearch1){
path.push(obj);
return path;
}
else if(obj.children || obj._children){
var children = (obj.children) ? obj.children : obj._children;
for(var i=0;i<children.length;i++){
path.push(obj);
var found = searchTree(children[i],newSearch && newSearch1,path);
if(found){
return found;
}
else{ path.pop();}
}
}
else{ return false;}
}
.
.
.
$("#search").on("select2:select", function(e) {
var data = e.params.data.text;
var paths = searchTree(root,data,[]);
if(typeof(paths) !== "undefined"){
openPaths(paths);
}
else{
alert(data+" auncun résultat!");
}
})
答案 0 :(得分:0)
好像您正在做递归正则表达式的东西,听起来很慢。加快速度的基础是缓存重复的工作。因此,请看一下为什么要执行如此复杂的正则表达式,并查看是否可以找到一种方法来缓存事物,从而不必每次都进行如此昂贵的调用,或者找到一种方法来做到这一点完全可以工作。
就像,您似乎正在某个树的所有子节点上运行它。如果树中的节点在每次调用之间都没有变化,那么也许您可以准备节点并将它们置于更易于搜索的数据格式中,从而不必每次都对它们运行递归正则表达式。