Hallo,
bin momentan dabei, einen AJAX-Chat umzusetzen. Klar macht man sich vorher Gedanken, aber so ganz genau konnte ich AJAX und seine Fähigkeiten bis vor Kurzem noch nicht einschätzen, sodass ich also an einigen Stellen einfach mal probieren muss.
Hat jemand noch eine Anregung, wie man den Datentransfer hinsichtlich. Performanz optimieren kann? Ich habs bisher so gelöst, dass zu Beginn ein Shared Memory-Bereich initialisiert wird, falls noch nicht geschehen. Anschließend wird mal der komplette Datenbankinhalt an bisherigen Zeilen ausgelesen und via innerHTML in einen IFRAME (Chat-Text-Bereich) eingebaut.
Beim Eintritt ins Dokument wird über onload ein Timer auf eine Update-Funktion gesetzt, die die aktuelle ID der "obersten" Chatzeile mit dem in JavaScript geführten Wert vergleicht - stimmen beide Werte überein, wird nichts gemacht, außer die Funktion bald wieder aufgerufen, ansonsten werden alle Zeilen mit ID > der im JavaScript gespeicherten ID gelesen und per innerHTML ausgegeben.
Wird eine Zeile geschrieben, werden die Daten per AJAX-HTTP-POST an ein eigens dafür vorgehenes Skript geschickt, das sie in die Datenbank schreibt und dabei auch gleich den ID-Wert im Shared Memory aktualisiert.
Das funktioniert so einigermaßen...
Tippt man wie ein Irrer drauf los, gerät an der Architektur was ins Schleudern und es kann passieren, dass auf weitere Eingaben nicht mehr reagiert wird. In der JavaScript-Konsole findet man auch vereinzelt Exceptions.
Man könnte das mit viel Semaphoren-Hinbiegerei bestimmt noch bisschen optimieren, aber ich mein, dass es bestimmt generell noch performantere Ansätze gibt, als jede Zeile in die Datenbank zu schreiben, wofür nach dieser Umsetzung jedesmal ein eigener POST-Request notwendig ist genauso wie, dass die aktuelle ID aus dem Shared Memory des Servers gelesen wird - wahrscheinlich immer noch besser als aus der Datenbank, aber gehts nicht auch noch flüssiger? Über eine Socketverbindung vielleicht oder gibts noch einen Trick, der mir überhaupt noch nicht eingefallen ist?
Gruß Gockel
bin momentan dabei, einen AJAX-Chat umzusetzen. Klar macht man sich vorher Gedanken, aber so ganz genau konnte ich AJAX und seine Fähigkeiten bis vor Kurzem noch nicht einschätzen, sodass ich also an einigen Stellen einfach mal probieren muss.
Hat jemand noch eine Anregung, wie man den Datentransfer hinsichtlich. Performanz optimieren kann? Ich habs bisher so gelöst, dass zu Beginn ein Shared Memory-Bereich initialisiert wird, falls noch nicht geschehen. Anschließend wird mal der komplette Datenbankinhalt an bisherigen Zeilen ausgelesen und via innerHTML in einen IFRAME (Chat-Text-Bereich) eingebaut.
Beim Eintritt ins Dokument wird über onload ein Timer auf eine Update-Funktion gesetzt, die die aktuelle ID der "obersten" Chatzeile mit dem in JavaScript geführten Wert vergleicht - stimmen beide Werte überein, wird nichts gemacht, außer die Funktion bald wieder aufgerufen, ansonsten werden alle Zeilen mit ID > der im JavaScript gespeicherten ID gelesen und per innerHTML ausgegeben.
Wird eine Zeile geschrieben, werden die Daten per AJAX-HTTP-POST an ein eigens dafür vorgehenes Skript geschickt, das sie in die Datenbank schreibt und dabei auch gleich den ID-Wert im Shared Memory aktualisiert.
Das funktioniert so einigermaßen...
Tippt man wie ein Irrer drauf los, gerät an der Architektur was ins Schleudern und es kann passieren, dass auf weitere Eingaben nicht mehr reagiert wird. In der JavaScript-Konsole findet man auch vereinzelt Exceptions.
Man könnte das mit viel Semaphoren-Hinbiegerei bestimmt noch bisschen optimieren, aber ich mein, dass es bestimmt generell noch performantere Ansätze gibt, als jede Zeile in die Datenbank zu schreiben, wofür nach dieser Umsetzung jedesmal ein eigener POST-Request notwendig ist genauso wie, dass die aktuelle ID aus dem Shared Memory des Servers gelesen wird - wahrscheinlich immer noch besser als aus der Datenbank, aber gehts nicht auch noch flüssiger? Über eine Socketverbindung vielleicht oder gibts noch einen Trick, der mir überhaupt noch nicht eingefallen ist?
Gruß Gockel
Kommentar