[PHP + JavaScript] Nach AJAX Call - mit PHP updaten oder Teile neu laden?

Dr. Wuah

Lt. Commander
Registriert
Mai 2005
Beiträge
1.277
Hallo zusammen,

ich habe mal eine Frage zur "Best Practice" hinsichtlich Umsetzung und Performance, vielleicht könnt ihr mir eure Meinung dazu sagen.

Zur Situation:
Ich arbeite gerade an einem Web Projekt. Auf einer der Seite werden verschiedene Tabellen aus einer MySQL Datenbank mittels PHP angezeigt. Diese Tabellen haben je mindestens eine Spalte mit Zahlen. Auf der gleichen Seite gibt es eine Übersicht, die die Summe der Zahlenspalte anzeigt.

Es gibt eine Funktion, die durch Buttonklick und ein erscheinendes Formular per ajax einzelne Tabellenzeilen aktualisieren oder neu erstellen kann. Das klappt auch alles gut. Bisher hänge ich neue Zeilen per Javascript an die Tabelle bzw ersetze veränderte Werte in der ursprünglichen Zeile und update die Datenbank entsprechend im Hintergrund.

Das Problem liegt jetzt beim aktualisieren der Übersichtsfelder: Bisher bleibt die alte Summe logischerweise bestehen, bis die Seite neu geladen wird. Was ich mich frage: ist es sinnvoller per Javascript nach dem Formularaufruf ebenfalls dieses Feld "per Hand" zu aktualisieren, oder sollte ich die Summe neu aus der Datenbank abfragen und ausgeben?

Insgesamt gibt es auf der Seite mehrere verschiedene Tabellen und Übersichten, ich frage mich, was die bessere Alternative ist.
 
Du liest Änderungen doch eh per JS ein. Es ist performanter nur die Aktualisierung aus dem JS für die Neukalkulierung der Übersicht zu verwenden als SQL zu bemühen.

Per JS: Du aktualisiert eine Zeile, damit auch den Wert der Zahl-Spalte dieser Zeile. In der Übersicht jetzt einfach den alten Wert subtrahieren und den neuen aufaddieren, fertig. Sind 2 Rechenoperationen (Das Anzeigen fällt nicht ins Gewicht, das müsste auch bei der SQL-Operation geschehen).

Per SQL: Du aktualisierst die Zeile per JS, schreibst den Wert in die DB (Kommunikationsoverhead, Zeitverlust durch Datenübertragung), lässt die DB den neuen Wert ausgeben (was erst auf das Update warten muss und anschließend den Wert ausgibt, schätzen wir freundlich 1 Rechenschritt) und den Wert zurückholen (Kommunikationsoverhead, Zeitverlust durch Datenübertragung).

Also was die Effizienz an Zeit und Ressourcen angeht: JS > SQL, weil 2xKommunikation+1Math länger dauert als 2Math. Erheblich länger. Hier reden wir von ca. 70ms (SQL) verglichen mit sehr sehr wenigen µs (glaube aber JS macht daraus ohnehin 1ms, kann mich auch irren). Mal abgesehen davon, dass du im JS nur eine Variable brauchst, beim SQL ein neues Übertragungsobjekt.


SQL kann aber unter Umständen trotzdem Vorteile haben: Wenn mehrere Nutzer die Datenbank "gleichzeitig" benutzen, kannst du so gleich Aktualisierungen anderer Nutzer abfragen. Allerdings ist die Performance dann deutlich geschmälert und du hast einen recht hohen Aufwand die geänderten Zeilen zu erkennen und zu ersetzen.

Prinzipiell würde ich immer so vorgehen: Wenn eine Aktion atomar ist und ohne Server auskommt, lass den Server aus dem Spiel. 1500Anfragen pro Sekunde von EINEM Client ist nicht ganz so geil für den Server, wenn mehrere Clients an ihn wollen. Selbst Smartphones, auf denen Rechenlast echt niedrig gehalten werden soll sind dankbar, wenn sie statt einer Kommunikation einfach nur 2 Zahlen berechnen müssen.
 
Es kommt aber auch darauf an, wie relevant die Daten sind. Sensible Daten sollte man nicht beim Client berechnen lassen, egal wie viel schneller das geht. Am Ende wird der Typ noch kreativ und manipuliert das Script...
 
Ist die Richtigkeit des Wertes kritisch? Dann hol ihn aus der DB. Ansonsten mach es im Frontend (also per JS) und markiere den Wert ggf. mit nem Hinweis, dass er eventuell nicht richtig ist oder sowas.
 
@Daaron: Wenn der Nutzer das Script manipuliert sind auch SQL-Daten kein Stück richtiger. Wenn er das versaubeuteln will, dann macht er das auch^^ Und da es sich nur um
Dr. Wuah schrieb:
eine Übersicht, die die Summe der Zahlenspalte anzeigt
handelt wird der Wert wohl kaum direkt im SQL gespeichert sondern auch dort jedes Mal berechnet.

Prinzipiell hast du natürlich recht, aber in diesem Fall sehe ich SQL nur bei Multi-Nutzer-Betrieb im Vorteil, weil man so die Änderungen anderer Nutzer erfassen könnte - allerdings zu einem hohen Preis.
 
Die Einwände für die Kritikalität der Daten sind gut. SoDaTierchen hat mich mit der Argumentation zur Performance auch überzeugt. Da die Daten zusätzlich nicht extrem kritisch sind, werde ich per js updaten.

Danke für die Hilfe :)
 
Zurück
Oben