2011-01-02 7 views
4

Ich baue neue Funktionen für ein kleines Embedded-Gerät mit integriertem Webserver. Es hat eine grundlegende Web-basierte Schnittstelle mit Javascript AJAX. Ich bin heute auf ein Problem gestoßen, bei dem ich alle 500ms einen Interval-Aufruf als AJAX-Abruf-Funktion hatte, aber bei Firebug auf der XHR-Überwachung sah ich ziemlich viel "abgebrochen". Die Web-Benutzeroberfläche schien nicht zuverlässig zu aktualisieren, wenn sich die Dinge auf der eingebetteten Seite änderten. Ich habe auch in Firebug bemerkt, dass die XHR-Last fast 500 ms dauern würde. Ich habe die AJAX-Abfragehäufigkeit auf 1000ms geändert, und das hat das Problem gelöst. Aber wenn meine Analyse korrekt ist, könnte das Problem erneut auftreten, wenn die eingebettete Seite beginnt, nahe 1000ms zu laden.AJAX - Wie ermittelt man die beste Abfragehäufigkeit?

Also meine Frage ist, gibt es eine Möglichkeit, optimale Abruffrequenz zu bestimmen; wo Sie möchten, dass die Benutzeroberfläche so oft wie möglich aktualisiert wird, aber den Server nicht überlasten soll (was in meinem Fall ziemlich langsam und begrenzt ist). Was bedeutet "abgebrochen" eigentlich in der Firebug XHR Netzwerkansicht?

Danke, Fred

Antwort

4

500ms ist oft zu. Probiere 2 Sekunden und arbeite rückwärts, wenn es funktioniert. Vielleicht möchten Sie auch etwas wie Start mit 2 Sekunden machen, und wenn es nach einigen Versuchen nicht funktioniert, erhöhen Sie es auf 5 Sekunden (oder was auch immer). Ich sehe das sehr.

Hinweis, absaugen zu müssen. Wenn Sie eine moderate Benutzerbasis von 100 gleichzeitigen Benutzern haben und alle den Arbeitsablauf verwenden, für den Abfragen erforderlich sind, kann Ihre Anwendung jede Sekunde mit hunderten von Anfragen überschwemmt werden. Mit anderen Worten, die Abfrage wird nicht sehr gut skaliert, es sei denn, Sie verfügen über die Ressourcen, Server horizontal aufzustellen. Abhängig von Ihrem Anwendungsfall ist es möglicherweise besser, nur die erste Anfrage zu senden, um den lang andauernden Prozess asynchron zu starten, und den Benutzer anzuweisen, nach 2 Minuten eine Überprüfung durchzuführen.

Lassen Sie mich fragen: Wie lange sollte es dauern, bis die Aufgabe, für die Sie abstimmen, abgeschlossen ist?

+1

Ich stimme zu, Polling scheint ziemlich kludgy. Ich denke, die neuen Websockets in HTML5 sehen wie eine gute Lösung aus, aber ich kann das aufgrund der Browser-Unterstützung nicht wirklich verwenden und da meine Benutzer so ziemlich jeden Browser verwenden können. –

+0

@fred, ich aktualisierte meine Antwort ... – hvgotcodes

+2

+1 für das exponentielle Problem mit Abfragen. – jondavidjohn

5

Verwenden Sie setInterval nicht, initiieren Sie eine weitere Anfrage mit setTimeout, nachdem Sie die Antwort zurückbekommen haben.

+0

OK, gute Idee, aber welchen Wert sollten Sie das Timeout setzen, wenn Sie nicht genau wissen, wie lange der Server braucht, um Ihnen eine Antwort zu geben? –

+0

Wie lange möchten Sie zwischen den Aktualisierungen warten? Alles, was Sie damit sagen, ist, dass ich X Millisekunden anrufen möchte, nachdem ich eine Antwort zurückbekommen habe. Dies ist egal wie lange der Server braucht. – epascarello