Forum: PC-Programmierung Mit Ajax Tabelle dauernd aktualisieren


von Manuel (Gast)


Lesenswert?

Ihr wisst sicherlich, dass Facebook sich dauernd selbst aktualisiert. Am 
bekanntesten ist diese rote Zahl beim oberen Menü die anzeigt wieviele 
neue Nachrichten es gibt oder auch nicht.

Ich habe vor so etwas auch in meiner Webseite einzubauen, nur mir 
Tabelleneinträge.

Ich habe mir dazu ein Tutorial zu Ajax angeschaut und weiß wie das alles 
funktioniert und so. Meine Frage ist die: Wenn ich im 500ms Intervall 
immer in Javascript ein php script aufrufe und damit prüfe ob eine 
bestimmte Variable in der Datenbank gesetzt ist oder nicht, ist es dann 
nicht irgendwie zu aufwendig für den Anwender? Schließlich läuft ja 
Javascript beim Clienten und meine Angst ist, dass dies die Performance 
des PC's des Clienten (wenn mehrere solcher Seiten gleichzeitig offen 
sind) stark beeinflussen kann.

Wie macht das eig facebook wenn eine neue Nachricht einkommt?
Meiner Meinung nach muss es da so eine Art dauerhafte Abfrage beim 
Server geben, denn der Server kann ja üblicherweise nicht automatisch, 
wenn sich etwas in der Datenbank ändert, sich mit dem Clientn verbinden 
und ein Ereignis auslösen. Das geht nicht.

Kurz und bündig: Würde das den PC bzw den Browser des Clienten 
überbeanspruchen wenn ich mehrer solcher dauerhaften Abfragen mache?

Lg

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Alle aktionen gehen vom Client aus - http gibt mehr nicht her.
Also zyklische Abfragen.

500 ms wären etwas deftig ...

Dem Client ist das egal, aber die Anfrage an den Server muß auch durch 
das
Web geschleust, ausgewertet und beantwortet werden. Fratzenbuch wird das
über ein  Timerevent im Client machen, schau doch einfach mal im 
Quelltext
der Seite nach.

von Andreas B. (andreasb)


Lesenswert?

Also ich habe das auch schon selbst implementiert, der Trick ist relativ 
einfach, du machst einen Ajax Request auf, blockierst den aber auf dem 
Server, du sendest dann z.B. alle 30 Sekunden ein Leerzeichen, somit 
bleibt die Connection offen.

Sobald du wirklich Änderungen senden willst, sendest du z.B. dein JSON 
Object, und schliesst die Connection.

Genau dann erhält der Client die Antwort, verarbeitet die, und öffnet 
einen neuen Request, der dann wider vom Server blockiert wird.

Ich habe den Facebook Chat noch nie genauer angeschaut, gehe aber davon 
aus, dass der genau so funktioniert.


Andere Möglichkeit sind natürlich Websockets. (Sind relativ neu, habe 
ich selbst noch nie verwendet)

http://de.wikipedia.org/wiki/WebSocket


mfg Andreas

: Bearbeitet durch User
von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Andreas B. schrieb:
> Also ich habe das auch schon selbst implementiert, der Trick ist relativ
> einfach, du machst einen Ajax Request auf, blockierst den aber auf dem
> Server, du sendest dann z.B. alle 30 Sekunden ein Leerzeichen, somit
> bleibt die Connection offen.

Mache ich auch so ähnlich. Ich schicke so eine Art Progress-Bar
zurück. Elegant ist das nicht ...

von A. B. (funky)


Lesenswert?

https://www.facebook.com/notes/facebook-engineering/under-the-hood-facebook-messenger-for-firefox/10151175913223920

fb verwendet anscheinend websockets.


mit ajax alle 1s eine Anfrage ist sicherlich auch vertretbar. kommt halt 
auch auf die seite an, und mit wieviel besuchern man rechnet. FB muss da 
sicherlich mehr mit seinen Resourcen haushalten, als eine Popel-Seite 
mit 5 gleichzeitigen Besuchern

von Roland P. (pram)


Lesenswert?

Facebook hält (hielt*)  eine Ajax connection offen so wie Andreas es 
beschrieben hat. . Sieht man schön mit Firebug.

*) kann natürlich sein, dass sie inzwischen websockets verwenden

Gruß Roland

von A. B. (funky)


Lesenswert?

wenn sie auf ihrer website schreiben, das sie websockets verwenden, dann 
glaube ich dem erstmal ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.