Combobox bringt Browser zum Absturz

Pancake

Lt. Junior Grade
Registriert
Nov. 2013
Beiträge
309
Moin,
Ich habe auf einer HTML Seite eine Combobox, die durch einen entsprechenden Aufruf mit Werten aus einer Datenbank gefüllt wird.
Combobox füllen läuft ja so ab:

<option value="1">1 Test</option>
<option value="2">2 Test</option>
<option value="3">3 Test</option>

Jetzt besteht aber das Problem, dass exakt 192.300 Datensätze in der Tabelle sind und in die Combobox geladen werden müssen. Die Webapplikation versucht jetzt also 192300 mal oben genannte Code auf die HTML Seite zu bringen. Dadurch stürzen sämtliche Browser ab.
Ist es möglich die Combobox auf einem anderen Wege mit den Datensätzen zu füllen, so dass eben die HTML Seite nicht aus über 192300 Zeilen besteht? Eventuell was mit javascript machbar?

mfg Nico
 
Jetzt stell dir mal, das würde so funktionieren. Was glaubst du, wie ein Benutzer sich aus 200000 Einträgen was aussuchen soll? Der wird garantiert nicht alle Einträge durchgehen und 20 Minuten suchen und scrollen, bis er was gefunden hat.

Das Problem ist nicht die Combobox, sondern das Konzept!

Gib dem User ein Inputfeld, das eine Textsuche via AJAX auf der Datenbank ausführt. Das geht definitiv ohne Absturz, ist deutlich schneller und ist einfacher zu bedienen.
 
Der Benutzer hat die Möglichkeit innerhalb der Combobox zu selektieren. Nur ist es nicht mehr möglich die Seite an Sich aufzurufen
 
Ich glaube benneque wollte damit sage: Das geht so nicht und das ist auch gut so.

Ansonsten halte ich die Lösung von benneque auch auf jeden Fall für sinnvoll.
 
@TE

Also du verlangst sozusagen vom Benutzer, dass er sich duch ca. 193 TAUSEND Auswahlmöglichkeiten klicken soll?
Da würde ich sagen, gut, dass das kein Browser mitmacht ;)
Ich denke nicht, dass das im Sinne des Erfinders ist, und würde benneque zustimmen.
 
würde auch eher das ganze überdenken.. und es ist ein select ;)
 
Dann noch mal anders: Was glaubst du, wie der Benutzer diese Combobox benutzen wird / soll?

Im Grunde gibt's nur 2 Möglichkeiten:
1. Der Benutzer weiß was er sucht: Dann will er einfach den Anfang des Wortes eingeben und damit die Auswahl einschränken. Das geht prima mit einem AJAX Typeahead oder sonstigen AJAX Lösungen.
2. Der Benutzer weiß nicht was er sucht: Dann bringt die Combobox ihn auch nicht weiter. Keiner(!) wird sich 200000 Auswahlmöglichkeiten durchlesen. Falls es doch möglich sein soll, irgendwie durchzuscrollen, schau dir mal sowas wie infinite scroll an. Dann werden die Daten nachgeladen, wenn man das Ende der Liste erreicht hat.

Und nun du: Wie soll der User die Combobox benutzen? Und warum? Was für Art von Daten? etc. pp.
 
eventuel die ergebnisse aufgrund von irgendwelchen nutzerangaben soweit vorfiltern, dass der benutzer nur sehr wenige auswahl möglichkeiten hat.. wobei 200000??? worum handelt es sich da? :D
 
Das sind Aufträge auf die sich ein Mitarbeiter buchen kann.
Der Kunde kann aufgrund von betriebsinternen Abläufen keine Vorselektierung genehmigen (In Form von Favoriten o.ä)
Normalerweise haben Kunden bis zu 1000 Aufträge und diese lassen sich wunderbar und ganz einfach mit dem aktuellen Stand der Dinge benutzen (Textsuche ist möglich und Box enthält dann eben nur noch die gefilterten Aufträge).
AJAX werde ich mir ansehen und schauen ob sich der Aufwand realisieren lässt. Irgendjemand in diesem Betrieb wird das vielleicht können :D
 
eine kunde hat auftrag .. also auftrag gehört einem kunden und nicht allen.. also kann man schon mal nach kunden filtern.. ein mitarbeiter sollte doch einem auftrag zugewiesen sein um da zeiten drauf zu buchen.. also nur die mitarbeiter aufträge eines bestimmen kunden anzeigen.. das sollte das ganze doch drastisch verkleinern
 
ne so einfach ist das nicht
Unser Kunde hat ganz viele weitere Kunden für die er ganz viele einzelne Bearbeitungsgsschritte für ein Produkt hat. insgesamt knapp 200000. Wenn unser Kunde nun sagt, dass theoretisch jeder seiner Mitarbeiter sich auf jeden Bearbeitungsschritt buchen kann und das auch können soll. Dann kommt bei einem sehr großen Betrieb eben entsprechende Datenmenge zusammen.
 
So, erstmal vorweg, warum dein Kram crasht....
Bei gut 200.000 <option>-Elementen, die den DOM befüllen, schmiert jeder Browser ab, weil er den Mist einfach vor lauter Last nicht mehr rendern kann. Es sprengt schlichtweg die verfügbaren Ressourcen. Der Browser muss schließlich zu jeder Zeit den gesamten DOM im Auge behalten.

Warum wird "Befüll ich den <select> halt per JavaScript" nicht gehen?
Weil du hier 200.000 neue DOM-Elemente eintragen willst. Das vernichtet alle Ressourcen und lässt den Browser crashen.

Ich hatte mal den Fall, dass eine mehrseitige Produktliste mit je 20 Produkten pro Seite (klassische Pagination halt) durch JS verbessert werden sollte. Wenn du runter scrollst, sollten im Hintergrund die nächste Seite geladen werden und die nächsten 20 Produkte sich hinter den bestehenden 20 einreihen.
Lief auch scheinbar wunderbar, nur hatte das Script ne Macke. Es hat Seite 2 2x, Seite 3 4x, Seite 4 16x,... geladen udn die erhaltenen Elemente UNSICHTBAR in den DOM gelegt. Wirklich sichtbar war jeweils nur der nächste Schwall Produkte.
Langer Rede kurzer Sinn: Je nach Rechenpower ist der Browser dann irgendwo zwischen 500 und 2000 Produkten endgültig kollabiert.


So... Und wie du dein spezifisches Problem jetzt lösen solltest?
Zu allererst: NICHT so, wie du es aktuell vor hast.
Verpass deinen Daten eine anständige relationale Struktur. Verwende mehrere Tabellen, verwende JOINs, verwende Indizes. Dann filtere nach diesen Indizes und joine nur, was wirklich wichtig ist.

Kleiner Denkanstoß:
- Es gibt viele Kunden
- Jeder Kunde hat viele Projekte
- Jedes Projekt hat viele Schritte
- Schritte können theoretisch von anderen Schritten abhängen, müssen aber nicht

So. Wie würdest du einem Mitarbeiter also jetzt einen spezifischen Arbeitsschritt zuweisen?
 
Zurück
Oben