Felix Riesterer: Ladebalken/Fortschrittsanzeige

Beitrag lesen

Lieber Sven,

mit reinen HTML/JavaScript/PHP-Mitteln erscheint mir das unmöglich.

Warum das so ist? Die prinzipielle Vorgehensweise des HTTP ist doch die: 1.) Request - 2.) Response - Fertig. Wo ist da zwischen 1. und 2. ein Datenaustausch, der eine zeitliche Messung ermöglicht?

Stellen wir uns einmal einen Upload-Prozess vor:

Der Browser sendet einen POST-Request an den Server, bei dem er ein großes Datenpaket (die hochzuladende/n Datei/en) mitschickt. Alleine das Absetzen des Requests dauert wegen des Datenumfangs länger, als die berühmte "Schrecksekunde" beim Warten auf den Seitenaufbau eines regulären GET-Requests.

Während des Hochladevorgangs kann für diesen Request keine "Zwischen-Response" vom Server zurückgesandt werden, da dieser ja noch den Request abarbeitet (er empfängt noch immer Daten). Um nun aber etwas über den aktuellen Stand des Uploads zu erfahren müsste ein zweiter Request an den Server gesandt werden, der sich zum Status des ersten erkundigt. Und genau hier ist ein Problem, das absolut nicht trivial ist: Wie soll der Server erkennen, auf welchen anderen Request sich dieser zweite Request bezieht? Du könntest ja theoretisch drei Requests quasi parallel an den Server geschickt haben (z.B. Upload, eine Seite und eine dazu gehörende Bilddatei = 3 Requests). Nicht nur könnte sich Deine IP inzwischen geändert haben, es ist Dein zweiter Request auch ein neuer Thread (so ähnlich wie ein neuer Prozess) des Servers mit eigenem Arbeitsspeicher und eigener Umgebung, der absichtlich(!) nichts von anderen zeitlich parallel stattfindenden Requests "weiß".

Beim Einsatz von Dritt-Technologien (z.B. Flash-basierte Uploader oder Java-Applets) ist das Ganze anders. Dort kann die Dritt-Technologie den Datentransfer "messen" und so eine Schätzung der Restzeit bzw. eine Auskunft über die Menge des bereits erfolgten Datentransfers geben. Aber mit der "Standardausrüstung" des Browsers (HTML / JavaScript) ist da nichts zu machen. Jedenfalls ist mir keine (nicht-proprietäre) API bekannt, mit der man in JavaScript auf solche Informationen Zugriff hätte. Ob im IE solches mit ActiveX möglich ist und ob andere Browser über andere passende Eigenentwicklungen verfügen, weiß ich nicht.

Übrigens: MySQL ist in diesem Szenario völlig unerheblich!

Man möge mich in technischen Ungenauigkeiten bitte korrigieren.

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)