JavaScript-Dauproblem...
Geizhals » Forum » Programmierung » JavaScript-Dauproblem... (49 Beiträge, 339 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
JavaScript-Dauproblem...
13.04.2006, 13:03:13
Hi !

Bin wieder mal am Rumprimitiveln - diesmal wird's ein HTML/JS-Teil.
Ich versuche mal, das Problem zu reduzieren:

Gegeben sei eine Datenbank, in der es pro Guppe bis zu 100 Kundennamen gibt.

Ein Mitarbeiter soll jetzt in einem HTML-Formular nach Auswahl der Gruppe einen Kunden in eine Inputbox eingeben - wobei er implizit gleich neue Anlegen können soll.

Bisher hatte er eine freie Inputbox zur Verfügung, wobei natürlich das Problem entsteht, daß 3 Buchende denselben Kunden verschieden schreiben - und dadurch mehrere Einträge in der DB entstehen.

Mein Lösungsansatz wäre grob jetzt folgender:

  • Nach Auswahl der Gruppe wird ein XMLHttpRequest zum Server geschickt, der eine Liste der bekannten Kunden in der Gruppe holt.
  • Die Kunden werden dem Eingebenden in einem DIV oder so präsentiert. Wenn er auf einen klickt, soll der automatisch eingetragen werden
  • ansonsten kann er weiter frei eingeben


Folgende Probleme erwarte ich dabei:
1.) Das dauernde Requesten der bekannten Kunden macht ja wohl nur Sinn, wenn man es mit Caching am Client verheiratet. Der Client könnte sich also in einem Array merken, daß es in Gruppe "GRUPPE_1" zb die Kunden "Müller","Meier",... gibt.
Mir ist jetzt völlig unklar, wie ich eine Obergrenze des Cachings implementieren soll...

  • Wie erkenne ich, wann ich zuviele gecacht habe und wieder welche nach LRU wegwerfen soll ?
  • Bekomme ich aus JS meine Speicherauslastung raus ?
  • Oder soll ich eine willkürliche Grenze ziehen mit zB 1000 Kunden und danach die ältesten rauswerfen ?
Dann werden sowohl die Benutzer mit sehr alten als auch die mit sehr neuen Rechnern unglücklich sein ... Wie löst man sowas richtig ?

2.) Wenn parallel eingebucht wird, soll es möglich sein, daß

  • zB Benutzer A einen neuen Kunden in GRUPPE2 anlegt und
  • Benutzer B den automatisch auch in seiner Vorschlagsliste sieht, wenn er einen in Gruppe2 anlegen will.

Das bedeutet also, daß es eine Möglichkeit geben muß, daß Benutzer A den Cache von Benutzer B invalidiert. Wie löst man das ?
Mein billigster Lösungsansatz wäre,

  • daß Benutzer A einen eigenen Request an den Server schickt, wenn er einen neuen Kunden anlegt.
  • Der Server könnte eine SerialNumber/Sequence (ähnlich wie bei DNS) pro Gruppe haben, die er dann hochzählt.
  • Jeder Benutzer würde dann pro Buchung die SerialNumber der gerade aktuellen Gruppe am Server holen müssen -
  • und könnte so feststellen, wann er den eigenen Gruppencache invalidieren muß.

Kommt mir einfach aber beshissen vor.
Ein anderen Fall wäre, daß sich der Server merkt, welcher Client welche Stände kennt - und nur die Differenzen/neuen an den Client mitschickt. Kommt mir aber stressig und umständlich vor... Lösungsansätze ?

Ach ja, Gruppen gibt es rund 7000 - also es ist ausgeschlossen, daß man alles (Gruppen+Kunden) an den Client überträgt, vor allem, weil es dann mit der Adresse weitergeht  ;-)

13.04.2006, 13:05 Uhr - Editiert von gepeinigter_aon_neukunde, alte Version: hier
Antworten PM Übersicht Chronologisch
 
Melden nicht möglich
..
Re(2): JavaScript-Dauproblem...
13.04.2006, 14:55:56
Bei etwas einfacherem (Einer Partie mit Kundennummern) wurde es so gelöst, daß ein JS-Sourcefile generiert wurde a la

PLZ[1]=1200;Name[1]='Bubu';Adresse[1]='Otto'
.....

(Wobei 1 die Kundennummer wäre).

Das Problem mit den 100 Kunden pro Gruppe wäre, daß er eben die 100 bei jeder Eingabe abrufen muß... Und danach die passenden Adressen, ...

Im Endeffekt will ich das ganze mit einer "Auto-Completion" in den Eingabefeldern verheiraten - dann wird's echt supi... Und da komm ich dann eh nicht dran vorbei.

Nachdem für mich AJAX-Gefriemel zeitaufwändig ist (weil neu für mich und ich JS /hasse/) - will ich das lieber gleich komplett machen anstatt nachher was drüberpflanzen zu müssen, was immer stressig ist. Außerdem bin ich grade dabei, meine PHP-Bibliotheken so anzupassen, daß ich in Zukunft einfachst AJAX-Bauteile zusammenstöpseln kann (so wie jetzt die "normalen" HTML/PHP/JS-Teile) - und gerade beim Framework bauen sollte man ja schon wissen, was man später wie lösen will...




Und natürlich will ich rumspielen |-D|-D|-D - außerdem geht's mir wie wohl jedem Ajax-Coder: Ich werde nach Stunden bezahlt ;-)

EDIT:
Diese Kundennummer-JS-Gschicht war schweinelangsam beim ersten Öffnen... Da macht AJAX schon Sinn (bis zu 12k Kundennummern)

EDIT²:
Ich bin ja absolut kein Webdesigner... Aber nach dem, was ich so mitbekommen habe Thema Behaviour Layer und so macht so eine Implementierung ja absolut Sinn via AJAX, oder ?

13.04.2006, 15:20 Uhr - Editiert von gepeinigter_aon_neukunde, alte Version: hier
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
....
Re(4): JavaScript-Dauproblem...
13.04.2006, 16:22:34
Eher letzteres... Und ja, es soll so ähnlich wie bei google suggestions enden (plus zusätzlich eben der Vorschlagsliste)

Also gehen wir's mal durch, wie ich es mir dachte:
Gruppen sind sowieso am Client gespeichert.

Wenn die Gruppe "27" ausgewählt wurde (es werden immer viele Buchungen in derselben Gruppe erfolgen) - dann sollen eben nur die Kunden von Gruppe27 kommen. Wenn er sie beim ersten mal via AJAX holt, könnte er sie sich in einen Array wegspeichern. (Das werde ich nun wohl doch über den Page-Cache lösen).

Der Witz ist eben, daß meist wenige Gruppen Benutzt werden - da macht Cachen schon Sinn (insbesondere da es nur maximal 100 Elemente pro Gruppe sind)...

Ziel ist
- Reduktion des NW-Verkehrs (die XML-Antwort der größten Gruppe sind immerhin 4K) - und im Endausbau werden ca. 50 User drauf arbeiten.
- schnelleres Arbeiten beim Bucher (bis zu 800 Buchungen pro Tag und Bucher)
- Serverentlastung (der Server ist ja jetzt schon mit seinem bisherigen sehr beschäftigt).
- Ergänzung unseres PHP-Frameworks um einfache Methoden um andere Teile zu AJAXifizieren ;-)
- Umstellungen vieler bestehender "normaler" POST-Formulare um den Server weiter zu entlasten, wenn wir alles davor im griff haben.

NW-Anbindung ist /traurigerweise/ echt Thema... Ich habe bisher auch noch nie irgendwelche kommerziellen Kunden gesehen, die einen 400MB-pro-Monat-Tarif hatten (und jetzt kenne ich solche) - und glaub mir, ich habe es /ehrlich/ versucht, die zu einem Wechsel - wurscht wohin - zu bewegen.

Ad DBA:
Die Kompetenz des DBA dort ist praktisch nur durch sein überdimensioniertes männliches Sexualorgan sowie seine traumhafte Erscheinung erreichbar - das bin ich ;-). Nöö, aus DB-Sicht paßt's schon.

EDIT:
Das saubere js-Teil wäre nett... Würde mich freuen (wenn es frei ist)

13.04.2006, 16:23 Uhr - Editiert von gepeinigter_aon_neukunde, alte Version: hier
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
.
Re: JavaScript-Dauproblem...
18.04.2006, 18:34:51
Hi!

Deine Methode ist zwar extrem "web2"-like, aber tierisch unergonomisch.
Die Leute wollen reintippen - ohne Hemmungen, Wartezeiten, sich ändernden und meist falschen Auto-Suggests etc., und dann auf Enter hauen. Dieses "zähe" Verhalten beim Tippen weil ständig JS arbeitet, oder der Server wie blöde ackert, bringt genau das Gegenteil von "usability".

Ich mach das so, daß es ein Eingabefeld gibt, in dem der Anwender mehrere Suchbegriffe (mit Wildcards) erfassen kann, und erst nach einem vom Anwender bestimmten Schritt (auf Enter hauen), etwas passiert - dafür dann aber etwas wirklich "gscheites".
Denn dann wird der Suchbegriff am Server zerlegt und die Adressensuche bezieht sich auf fast alle Felder der Adresse. Inklusive Notizfeld. Und phonetisch optimiert.
Z.Bsp.: Meier Wien Antonig* 12
Würde alle "Maier", "Mayer" oder "Meier" in der Antonigasse 12 in Wien bringen.
Der Anwender bekommt dann eine Liste mit Adressen, sortiert nach der Trefferquote, sofern die Quote über einen Mindestwert liegt. Maximal aber 5 Adressen. Der Fokus liegt auf der Adresse mit der höchsten Trefferquote und kann einfach mit Enter übernommen werden.
Andernfalls kann direkt zur Neuanlage gewechselt werden.

Um die notwendige Performance zu erreichen, wird bereits beim Abspeichern einer Adresse, über einen DB-Trigger der Eintrag analysiert und dann die phonetischen Einzelteile indiziert.
So merkt man auch bei 34000 Kunden so gut wie keine Verzögerung, und die Anzahl an Doppeleinträgen hält sich wirklich in Grenzen.



Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung