Ich habe einen lang laufenden Bericht und möchte dem Benutzer während des Generierens ein Warte-Spinner anzeigen. Ich habe diese Arbeit bereits gemacht, bin mir aber nicht sicher, ob ich es am besten oder richtig mache.Wann beginnen Browser teilweise übertragenes HTML zu rendern?
Dies ist mit ColdFusion, aber es könnte jede Sprache ich denke. Oben auf der Seite habe ich Javascript (jQuery), das einen Warte-Spinner zeigt, und es gibt einen documentReady-Handler, in dem ich den Spinner abnehme. Ich flush die Ausgabe (wenn es darauf ankommt) und dann der Rest des Codes funktioniert auf den Inhalt des Berichts. Dies brachte den Spinner nicht zum Laufen, und ich stellte mir vor, dass, obwohl ich Dinge auf dem Server löschte, auf dem Weg etwas gepuffert wurde und der Browser den Spinner-Code nie zu spät sah. Also fügte ich eine Schleife hinzu, bevor ich einige hundert Zeilen HTML-Kommentare ausspuckte. Nach der Feinabstimmung der Anzahl der Zeilen war das der Fall. Ich nahm an, dass dies auch von anderen Seiten gemacht wurde.
Aber: Während ich heute eine andere Seite von mir beobachte, die den Zeilen-Status eines lang laufenden Jobs ausspuckt, fällt mir auf, dass diese Seite nach jeder Zeile geleert wird und der Browser diese schrittweise nach Wunsch rendert. Dies entspricht nicht meiner Schlussfolgerung von oben und jetzt weiß ich nicht, was die Regeln sind. Gibt es einen vorhersehbaren Weg, dies zu tun? Variiert das pro Browser?
CLARIFICATION: Ich schätze die Antworten, die versuchen, den richtigen Weg zu einer Wartezeit zu erklären, aber ich benutze nur ein Warten-Spinner als Beispiel, um meine eigentliche Frage zu illustrieren: gibt es zuverlässige Möglichkeiten, um zu prognostizieren, wenn Browser wird anfangen, HTML zu rendern, wenn es über das Internet gestreamt wird? Es ist offensichtlich, dass Browser nicht darauf warten, dass das/html-Tag beginnt, zu arbeiten. Diese Frage hat nicht unbedingt etwas mit Javascript zu tun. Die zweite Seite, die ich beschreibe, ist reiner HTML-Code.
Wenn ich Sie richtig verstehe, laden Sie einen Spinner mit jQuery in das DOM, bevor das Dokument bereit Ereignis ausgelöst hat? Ich weiß nicht, ob das mit deinem Problem zu tun hat, aber das ist nicht das, was du machen willst. Und ist das ein Ajax-Anruf, den Sie machen? Es klingt, dass Sie versuchen, AJAX-ähnliche Funktionen auszuführen (laden Sie das DOM mit einem wartenden Indikator, machen Sie einen AJAX-Aufruf, um den Bericht zu laden, ersetzen Sie den wartenden Indikator durch einen Bericht, aber ohne AJAX zu verwenden). –
Es gibt keinen AJAX-Anruf. Es gibt einfache Inline-jQuery, um den Spinner anzuzeigen. Der Rest der Seite sind die tatsächlichen Berichtsdaten. Das funktioniert gut. Warum möchte ich das nicht tun? Wenn ich es zum Laufen bringen kann, scheint es viel einfacher zu sein, die Seite in zwei Teile zu zerlegen - das Anfangsbit plus den Bericht, der über AJAX zurückgegeben wurde. – DaveBurns