Rolf B: Per JS/Ajax auf mysql zugreifen oder wie löst man sowas?

Beitrag lesen

Hallo Pit,

wobei man hier auf die Performance achten muss. In JavaScript ist es kein Problem, auf jeden Tastendruck des Benutzers zu reagieren und Plausibilitäten laufen zu lassen.

Serverseitige Prüfungen sollte man zurückhaltend ausführen, Roundtrips kosten immer etwas Zeit und wenn Du viele User hast, die nach jedem Tastendruck eine Plausi abrufen, dann kann das deinen Server in die Knie zwingen. Im Falle eines Termindatums solltest Du die Prüfung also beim Verlassen des Feldes vornehmen, nicht vorher.

Und dann hast Du das Problem der Race-Conditions. Nimm an, dass ein User einen Wert eingibt, den Cursor im Eingabefeld stehen lässt und direkt auf Speichern klickt. Damit verlässt Du das Eingabefeldfeld -> change-Event fliegt -> es startet eine Serverplausi. Das Verlassen des Eingabefeldes findet VOR dem Klick-Handling des Submit-Buttons statt, du weißt dann noch gar nicht, dass es gleich darauf mit Submit weitergeht.

Diese Race-Condition musst Du verhindern. Da ich bisher von solchen Plausis die Finger gelassen habe, kann ich Dir dafür keine passenden Designpatterns aus der Tasche ziehen. Ich habe zwar eine Idee, aber die ist nicht erprobt und ich könnte sie hier nicht in 3 Sätzen erklären (nur als Stichworte: eine „globale Liste“ für zu erledigenden Validierungen aufbauen, in einem Submit-Event diese Queue löschen, per Promise.resolve().then() die Verarbeitung der Queue an das Ende des JavaScript Verarbeitungszyklus schieben). Global in Anführungszeichen, das kapselt man natürlich in einem Modul.

Die Nummer ist nicht trivial, wenn man es richtig machen will. Aber vielleicht mache ich mir ja auch unnötig einen Kopf und der Browser handelt das Problem automatisch?

Rolf

--
sumpsi - posui - clusi