Frage

In meiner Website erweiterte Suchmaske gibt es etwa 15 Felder, die ein Feld zur automatischen Vervollständigung benötigen.
Ihr Inhalt ist alles abhängig von jeweils anderen Wert (also wenn man gefüllt, der Inhalt des andere wird in Abhängigkeit von dem Wert der ersten ändern).
Die meisten Felder haben eine riesige Menge an Möglichkeiten (1000 Einträge zumindest).

Zur Zeit einen Ajax-Aufruf machen, wenn der Benutzer für eine halbe Sekunde stoppt eingeben. Dieser Ajax-Aufruf macht einen kurzen Anruf zu meinem Lucene Index und gibt eine Reihe von JSon Objekten. Das Verfahren selbst ist wirklich schnell, aber es ist die Verbindung und die Übertragung von Daten, die zu langsam sind.

Wenn ich an anderen Stellen suchen (sagen Facebook), ihr die automatische Vervollständigung ist sofort. Ich schätze sie die möglichen Werte in ihrem HTML setzen, so dass sie nicht über eine Rundreise zu tun. Aber ich mit den Datenmengen befürchte ich bin Handhabung, ist dies keine Option.

Irgendwelche Ideen?

War es hilfreich?

Lösung

  1. Zurück nur x Top-Ergebnisse.
  2. Holen Sie sich einige Trends über, was die Nutzer Kommissionierung, und um auf dieser Grundlage, vorzugsweise automatisch.
  3. Cache Ergebnisse für jede URL & Tastenkombination, so dass Sie nicht haben zu Round-Trip wenn Sie noch geholt bereits das Ergebnis vor.
  4. teilen Cache mit allen autocompletes, die die gleiche URL & Tastenkombination.
  5. Natürlich, ermöglichen gzip-Kompression für die JSON, und sicherzustellen, dass Sie Ihre Einstellung Cache-Header für einige zwischenzuspeichern Zeit. Die Zeit hängt von Ihrer Geschwindigkeit der Veränderung von der automatischen Vervollständigung Antwort.
  6. die JSON optimieren die zu herabs das absolut Nötigste. Nicht herabs alles, was Sie brauchen nicht.

Andere Tipps

Sind Sie alle Ergebnisse für die Möglichkeiten der Rückkehr oder nur die Top 10 als JSON-Objekte.

Ich bemerke eine Menge Leute eine große Anzahl von Ergebnissen zurück auf den Bildschirm schicken, aber dann zeigen nur die ersten paar. Durch das Senden einer kleinen Anzahl von Ergebnissen zurück, können Sie die Datenübertragung reduzieren.

Zurück top „X“ Ergebnisse, anstatt die gesamte Liste, um wieder auf der Anzahl der Optionen zu schneiden? Vielleicht wollen Sie auch versuchen, und in einigem Trending setzen zu verfolgen, was Benutzer aus der Liste wählen, so können Sie versuchen, die oben „X“, um die am häufigsten verwendeten / die meisten relvant. Sie können immer Ihre wichtigste Liste zurückzukehren zuerst, dann die vollständige Liste zurück, wenn sie nach wie vor zu kämpfen hat.

Neben den Satz von Ergebnissen zu einem Top-X-Set zur Begrenzung betrachtet Caching ermöglicht auf den Antworten der AJAX-Requests (was bedeutet, GET zu verwenden und die URL einfach).

Es ist erstaunlich, wie oft Benutzer ein Zeichen zurückzugehen dann genau den gleichen Inhalt Abtippen enden. Auch, indem öffentliche und serverseitige Caching Sie könnte die gesamte Rund trup Zeit beschleunigen.

  • Cache die Ergebnisse in System.Web.Cache
  • Verwenden Sie eine Lucene-Cache
  • Verwenden Sie GET nicht als IE POST-Caches dieses
  • Nur eine Teilmenge der Ergebnisse greifen (10 als Menschen vorschlagen)
  • Versuchen Sie, einen anständigen 3rd-Party-Autocomplete-Widget wie das YUI einer

Rückgabe der Top-N-Einträge ist ein guter Ansatz. Aber wenn Sie wollen / müssen zurückkehren alle die Daten, würde ich versuchen, und begrenzen die Daten gesendet werden und das JSON-Objekt selbst.

Zum Beispiel:

„Das hier Unternehmen mit einem langen Namen“ wird „Das hier Unternehmen ...“ (Sie die Punkte setzen im Namen Client-Seite - wieder; übertragen ein Minimum an Daten).

Und was das JSON-Objekt geht:

{n: "This Here Company", v: "1"}

... Wobei "n" wäre der Name und "v" kann der Wert wäre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top