Frage

Ich bin das Hochladen von Dateien des Upload () -Methode der FileReference- Klasse. Ich mag die aktuelle Verbindungsgeschwindigkeit anzuzeigen, und ich habe mich gefragt, was ein guter Weg war, das zu tun.

Meine heutige Technik ist ein Timer alle 1 Milli verwenden zweite wie folgt:

var speed:Function = function(event:TimerEvent):void {
    speed = Math.round((currentBytes - lastBytes) / 1024);
    lastBytes = currentBytes;
}
var speedTimer:Timer = new Timer(1000);
speedTimer.addEventListener(TimerEvent.TIMER, uploadSpeed);

und currentBytes wird in die ProgressEvent.PROGRESS gesetzt. Diese Technik scheint ungenau. Ich frage mich, was andere Möglichkeiten, wie ich konnte die Upload-Geschwindigkeit berechnen verwenden, während das Hochladen und Anzeigen in Echtzeit.

Irgendwelche Ideen oder Meinungen sind willkommen!

Vielen Dank,

Rudy

War es hilfreich?

Lösung

Wenn das Codeblock eine Kopie ist und fügen Sie wird sicherlich nicht arbeiten, wie Sie es erwartet haben. Sie erklären speed als eine Funktion, in dem Sie es als eine Zahl erscheinen neu zu definieren. Ich schätze die Flash-IDE können Sie mit skizzenhafter Grammatik weg, aber Code wie das wird Sie in alle Arten von Schwierigkeiten führen. Versuchen Sie explizit zu sein, wenn Ihr Code zu schreiben.

Versuchen Sie, wie das ist etwas, ersetzen yourLoader mit dem, was Kennung Sie den Uploader zugewiesen:

private var speed:Number = 0;
private var lastBytes:uint = 0;

private function uploadSpeed(event:TimerEvent):void
{
   speed = Math.round((yourLoader.currentBytes - lastBytes) / 1024);
   lastBytes = yourLoader.currentBytes;
}

private var speedTimer:Timer = new Timer(1000);
speedTimer.addEventListener(TimerEvent.TIMER, uploadSpeed);

Das sollte berechnen, wie viele Bytes bewegt in 1 Sekunde Intervalle.

Edit:

Vielleicht möchten Sie das Intervall ein wenig kleiner als 1000 ms machen und eine durchschnittliche Geschwindigkeit für Ihre letzte berechnen n Proben. Das würde die Anzahl Benutzer sehen stabiler erscheinen als es wahrscheinlich gerade jetzt der Fall ist. Machen Geschwindigkeit eine Array und .push() die neueste Probe. Verwenden .shift() die ältesten Proben fallen zu lassen, so dass Sie zu viel Genauigkeit nicht verloren gehen. Versuch und Irrtum werden Sie eine bessere Vorstellung davon, wie viele Proben zu halten, und wie oft sich zu nehmen.

Andere Tipps

Sie können die Upload-Geschwindigkeit auf dem Server überwachen und dann diese Daten zurück an den Client senden. Diese Technik wird häufig für Ajax-Datei-Upload-Formulare verwendet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top