Maddoggy: JQuery - Autocomplete Plugin - Speicheroptimierung

Hallo zusammen,

ich stehe hier vor einem, vielleicht eher konzeptionellen, Problem bei dem mir im Moment der richtige Ansatz fehlt.

In einer Suchmaske verwende ich das JQuery Autocompleter Plugin um eine Autovervollständigung zu realisieren. Auf Rechnern mit viel Speicher ist alles kein Problem. Bei Rechnern mit etwas weniger Speicher wird die Bedinung schnell sehr hakelig. Bei der Autovervollständigung wird eine Liste von mehreren hundert Elementen erzeugt welche auch am Anfang alle angezeigt werden müssen.
Das Problem ist das alle Elemente in einem Listen-Objekt gehalten werden und daher dem Client irgendwann der Speicher ausgeht.

Die einzigste Idee die ich im Moment noch habe ist folgende.

  • Immer nur den Teil der Liste im Speicher halten die auch zu sehen ist. Wird nach unten gescrollt lade ich das nächste Teilstück nach.
    Nur ist dieses Vorgehensweise sicherlich sehr komplex zu entwickeln und ich bin mir nicht sicher ob es überhaupt so ohne weiteres mit JQuery möglich ist.

Ich suche jetzt eine alternative Idee zur Speicheroptimierung oder eine ganz andere Möglichkeit so lange Listen auf kleinen Rechnern zu realisieren.

Besten Dank und Grüße

Alex

  1. Hi,

    Bei der Autovervollständigung wird eine Liste von mehreren hundert Elementen erzeugt welche auch am Anfang alle angezeigt werden müssen.

    das verstehe ich nicht. Was nutzt ein Autokomplete, dessen Ergebnisse immer noch unüberschaubar bleiben? Warum zeigst Du die Liste nicht erst _nach_ einer konkreteren Einschränkung an?

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
    1. das verstehe ich nicht. Was nutzt ein Autokomplete, dessen Ergebnisse immer noch unüberschaubar bleiben? Warum zeigst Du die Liste nicht erst _nach_ einer konkreteren Einschränkung an?

      Weil ein Teil der Anforderung ist ;). Der eigentliche Sinn des Eingabefelds ist es ein formatiertes und strukturiertes Dropdownfeld zu erzeugen. Es gibt also mehrere Kategorien mit jeweils mehreren Unterkategorien. Zusätzlich soll sich die Liste entsprechend der Eingabe reduzieren. Also praktisch eine Autocompleter-Fuktionalität.

      Grüße

      Alex

  2. Auf Rechnern mit viel Speicher ist alles kein Problem. Bei Rechnern mit etwas weniger Speicher wird die Bedinung schnell sehr hakelig. Bei der Autovervollständigung wird eine Liste von mehreren hundert Elementen erzeugt welche auch am Anfang alle angezeigt werden müssen.

    Das verstehe ich nicht: Hunderte HTML-Elemente sind überhaupt kein Problem und belegen nur minimal Speicher. Es sei denn, sie sind unglaublich umfangreich, haben unzählige Kindelemente oder dort sind Grafiken oder gar aktive Inhalte eingebunden.
    Ich halte es daher für unwahrscheinlich, dass es an zu wenig Speicher liegt, dass deine Liste »hakelig« bedienbar ist. Vielmehr könnte es das Durchsuchen einer großen Liste sein, was je nach Prozessor einfach langsamer abläuft. Wird die Suche serverseitig oder clientseitig erledigt?

    Das Problem ist das alle Elemente in einem Listen-Objekt gehalten werden und daher dem Client irgendwann der Speicher ausgeht.

    Was muss das für ein ultrakomplexes und umfangreiches Listen-Objekt sein, das den Speicher des Browsers platzen lässt?

    Immer nur den Teil der Liste im Speicher halten die auch zu sehen ist.

    Warum »hältst« du überhaupt irgendwas im Speicher?

    Ein üblicher Auto-Completer lädt ein Stück HTML-Code vom Server nach. Der wird ins DOM einmontiert, dafür werden bestehende DOM-Elemente entfernt.

    Bei dieser Vorgehensweise wird überhaupt nichts im Speicher gehalten.

    Mathias

    1. Das verstehe ich nicht: Hunderte HTML-Elemente sind überhaupt kein Problem und belegen nur minimal Speicher. Es sei denn, sie sind unglaublich umfangreich, haben unzählige Kindelemente oder dort sind Grafiken oder gar aktive Inhalte eingebunden.

      Sorry, ich habs etwas doof formuliert. Die "Elemente" sind Elemente eines Javascript Objekts. Dieses Object ist Bestandteil des Autocompleter Plugins.

      Ich halte es daher für unwahrscheinlich, dass es an zu wenig Speicher liegt, dass deine Liste »hakelig« bedienbar ist. Vielmehr könnte es das Durchsuchen einer großen Liste sein, was je nach Prozessor einfach langsamer abläuft. Wird die Suche serverseitig oder clientseitig erledigt?

      Das ist eine gute Idee, die werde ich mal weiterverfolgen. Die Suche wird clientseitig erledigt, insofern könntest du recht haben. Allerdings beginnt das haken ja schon wenn die Liste zum ersten mal aufklappt... Ich werde der Sache aber mal nachgehen.

      Was muss das für ein ultrakomplexes und umfangreiches Listen-Objekt sein, das den Speicher des Browsers platzen lässt?

      »» Immer nur den Teil der Liste im Speicher halten die auch zu sehen ist.

      Warum »hältst« du überhaupt irgendwas im Speicher?

      Ein üblicher Auto-Completer lädt ein Stück HTML-Code vom Server nach. Der wird ins DOM einmontiert, dafür werden bestehende DOM-Elemente entfernt.

      Bei dieser Vorgehensweise wird überhaupt nichts im Speicher gehalten.

      Bei dem JQuery Autocompleter Plugin ist das Vorgehen etwas anders: Erst wird mittels Ajax eine komplette Liste aller Elemente als einfache textliste vom Server abgerufen. Diese List wird dann vom Plugin in ein JS Objekt gewandelt. Das Objekt wird im Speicher gehalten und wird zur Darstellung der Liste und zum finden der passenenden Elemente benutzt.
      Ich könnte auch relative einfach das Suchen auf serverbasierend umstellen. Das werde ich mal testen und mich nochmal melden.
      Wird aber sicherlich Anfang nächster Woche.

      Viele Grüße
      Alex