Frage

Ich hatte geplant, jquery die automatische Vervollständigung für eine Website zu verwenden und haben eine Testversion implementiert. Im mit jetzt einem Ajax-Aufruf eine neue Liste von Strings für jede Zeicheneingabe abzuzurufen. Das Problem ist, dass es wird ziemlich langsam, 1,5s, bevor die neue Liste aufgefüllt wird. Was ist der beste Weg, die automatische Vervollständigung schnell zu machen? Im mit CakePHP und nur einen Fund und mit einem Limit von 10 Stück zu tun.

War es hilfreich?

Lösung

diesem Artikel - darüber, wie flickr macht die automatische Vervollständigung eine sehr gute Lese ist. Ich hatte ein paar „wow“ Erfahrungen zu lesen.

  

"Das Widget lädt eine Liste aller   Ihre Kontakte, in JavaScript, in   unter 200 ms (dies gilt auch für   Mitglieder mit 10.000 Kontakten). Im   Um dieses Niveau zu erhalten   Leistung, mussten wir komplett   überdenken, wie wir Daten aus dem Sende   Server an den Client. "

Andere Tipps

Versuchen Sie, Ihre Liste Objekt zu tun, anstatt die Abfrage im Fluge Vorbelastung.

Auch die Autocomplete hat eine 300 ms Verzögerung standardmäßig.
Vielleicht die Verzögerung entfernen

$( ".selector" ).autocomplete({ delay: 0 });

1,5-Sekunden-Intervalle sind sehr breit Lücken einen Autocomplete Service zu dienen.

  1. Zum einen optimieren Sie Ihre Abfrage und db Verbindungen. Versuchen Sie, Ihre DB-Verbindung halten lebendig mit Memory-Caching.
  2. Verwenden Ergebnis Caching-Methoden, wenn Ihre Service ist sehr verwendet Wieder fetchs zu ignorieren.
  3. Verwenden Sie eine Client-Cache (eine JS-Liste) die alten Anforderungen auf dem Client zu halten. Wenn Benutzertypen zurück und löscht, wird es gehen, nützlich sein. Die Ergebnisse werden anstelle von Back-End-Punkt aus dem Frontend-Cache kommen.
  4. Regex-Filterung auf der Client-Seite wird nicht teuer sein, können Sie ihm eine Chance geben.

Bevor einige Optimierungen tun sollten Sie zunächst analysieren, wo der Flaschenhals ist. Versuchen Sie herauszufinden, wie lange jeder Schritt (Eingang → Anfrage → db Abfrage → Antwort → Anzeige) erfolgt. Vielleicht hat die CakePHP Implementierung eine Verzögerung nicht eine Anforderung für jedes eingegebene Zeichen zu senden.

Das eigentliche Problem für die Geschwindigkeit in diesem Fall glaube ich, ist die Zeit, die Abfrage auf der Datenbank ausgeführt dauert. Wenn es keine Möglichkeit gibt, die Geschwindigkeit Ihrer Abfrage zu verbessern dann die Suche vielleicht erstreckt, um weitere Elemente mit einigen hoch bewerteten Ergebnissen darin enthalten können Sie eine Suche durchführen, alle andere Zeichen, und filtriert durch 20-30 Ergebnisse auf der Client-Seite.

Dies kann das Auftreten von Leistung verbessern, aber bei 1,5 Sekunden, würde ich zunächst versuchen, die Abfrage Geschwindigkeit zu verbessern.

Other than that, wenn Sie uns einige weitere Informationen geben kann ich in der Lage sein, können Sie eine spezifischere Antwort zu geben.

Viel Glück!

Server-Seite auf PHP / SQL ist langsam.

Verwenden Sie PHP / SQL nicht. Meine zum automatischen Vervollständigung auf C ++ geschrieben und verwendet Hash-Tabellen zum Nachschlagen. Siehe Leistung hier .

Dies ist Celeron-300-Computer, FreeBSD, Apache / FastCGI.

Und, sehen Sie, läuft schnell auf riesigen Wörterbücher. 10.000.000 Datensätze ist kein Problem.

Außerdem unterstützt Prioritäten, dynamische Übersetzungen und weitere Funktionen.

Autocomplete sich nicht langsam ist, obwohl Ihre Implementierung sicher sein könnte. Das erste, was ich überprüfen, würde der Wert Ihrer Option Verzögerung ist (siehe jQuery docs). Als nächstes würde ich Ihre Anfrage überprüfen: Sie könnten nur wieder 10 Datensätze werden zu bringen, aber tun Sie einen Scan riesigen Tisch, diese 10 Datensätze zu bekommen? Bringen Sie eine Menge von Datensätzen aus der Datenbank in einer Sammlung zurück und dann 10 Objekte aus der Sammlung nehmen stattdessen serverseitige Paging zu tun, auf der Datenbank? Ein einfacher Index könnte helfen, aber Sie gehen zu müssen, einige Tests zu tun, um sicher zu sein.

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