我具有在搜索框中显示数据的功能,我使用的是Select2,该功能还不错,但是即使我想单击数据,但要在搜索框中查看数据时速度却很慢
为您提供信息,我将Select2与一个大表(> 20 000个条目)一起使用。 如何解决此问题以避免显示数据的时间?
<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 loadJson(error,values, select2Data){
root = values;
var select2_data = select2Data; // select2Data contains 22500 lines
root.x0 = height / 6;
root.y0 = 0;
_callerNode=root;
root.children.forEach(collapse);
tracePathAndNode(root);
var query = {}
$("#search").select2({
templateResult: function (item) {
var term = query.term || '';
if ( term=='') return item.text;
if (item.loading) {
return item.text;
}
return markMatch(item.text, term);
}
, language: "fr"
, language: {
searching: function (params) {
// Intercept the query as it is happening
query = params;
return 'Searching…';
}
}
,placeholder: "Zone de recherche"
,data: select2_data
,width: '100%'
});
}
function markMatch (text, term) {
// Find where the match is
var match = text.toUpperCase().indexOf(term.toUpperCase());
var $result = $('<span></span>');
// If there is no match, move on
if (match < 0) {
return $result.text(text);
}
// Put in whatever text is before the match
$result.text(text.substring(0, match));
// Mark the match
var $match = $('<span class="select2-rendered__match"></span>');
$match.text(text.substring(match, match + term.length));
// Append the matching text
$result.append($match);
// Put in whatever is after the match
$result.append(text.substring(match + term.length));
return $result;
}
.
.
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;}
}
var allRhJson;
var select2_data_all;
var currentTypeSelection='ALL';
// loader settings
var opts = {
lines: 9, // The number of lines to draw
length: 9, // The length of each line
width: 5, // The line thickness
radius: 14, // The radius of the inner circle
color: '#EE3124', // #rgb or #rrggbb or array of colors
speed: 1.9, // Rounds per second
trail: 40, // Afterglow percentage
className: 'spinner', // The CSS class to assign to the spinner
};
var target = document.getElementById("tree-container");
var spinner = new Spinner(opts).spin(target);
d3.json("getJson.jsp?dataType=rh", function(data) {
spinner.stop();
allRhJson=data;
select2_data_all = extract_select2_data(allRhJson,[],0)[1];
loadJson(null,allRhJson, select2_data_all ) ;
});
$("#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!");
}
})
d3.select(self.frameElement).style("height", "800px");