2017-02-08 1 views
0

Ich lade in einer JSON-Datei in ein Array und übergibt dieses Array dann an jQuery Autocomplete, um es als Datenquelle zu verwenden.jQuery Autocomplete mit großem Array (9500) Leistung

Was ich versuche zu erreichen ist, wenn das Autocomplete-Textfeld Fokus hat alle verfügbaren Optionen angezeigt werden, und ich habe es geschafft, das funktioniert mit dem Code unten. Das Problem, das ich habe, ist, dass das Array etwa 9.500 Einträge hat und sehr langsam zu laden ist. Gibt es trotzdem eine Verbesserung der Leistung? Oder sind 9.500 einfach zu groß?

Laden JSON-Datei

 $.getJSON("./json/airportdata.json", function(data){ 
      for (var i = 0, len = data.length; i < len; i++) { 
       arrival_airports.push(data[i]); 
       //console.log(data[i]); 
      } 
     }); 

automatische Vervollständigung Code

 $("#ajax").autocomplete({ 
      source: departure_airports, 
      minLength: 3, 
      select: function(event, ui) { 
       $("#ajax").val(ui.item.value); 
      } 
     }); 

zur automatischen Vervollständigung auf Fokus Triggern

 $("#ajax").focus(function() { 
      $(this).autocomplete("search", ""); 
     }); 
+1

Sie nicht zeigen, wie Sie die Daten laden oder geben es – charlietfl

+0

Plugin @charlietfl sorry, wird diese Code-Schnipsel in jetzt hinzufügen. –

Antwort

0

yeah 9k-Zellen-Array könnte Ärger bedeuten. Gibt es einen besonderen Grund, dass Sie alle möglichen Ergebnisse im Voraus laden? Sie sollten wahrscheinlich beim Laden nach bestimmten Recordsets suchen. Wenn also ein Benutzer den Suchbegriff eintippt, sollten Sie nur die relevanten Ergebnisse ziehen. dh:

$('#search').autocomplete({ 
    source: 'serverSideToAcceptTheSearchPhrase.php', //you should expect the variable "term" to be sent via GET to this page on execution 
    minLength: 2, //optional > this will allow a trigger of the search only when 2 or more characters inserted 
    delay: 1000, // optional > this will allow a wait time of 1 sec between each keys before executing 
    select: function(event, ui) { 
     // function to trigger on "select" 
    }, 
}); 
+0

Der Grund, sie alle im Voraus zu laden, ist, dass das Design/die Anforderungen eine vollständige Liste enthält. Zu der Zeit nicht zu erkennen, würde es 9.500 von ihnen geben. Von dem, was ich sagen kann, wird es nicht um das Performance-Problem gehen, aber ich bin auch nicht so kenntnisreich in der Gegend und hoffte, dass es etwas gab, das ich nicht kannte. –