AS3: Расчет текущей скорости загрузки (или пропускной способности) - PullRequest
0 голосов
/ 29 июня 2010

Я загружаю файлы с помощью метода upload () класса FileReference. Я хочу показать текущую скорость соединения, и мне было интересно, как это можно сделать.

Моя текущая техника заключается в использовании таймера каждую 1 милю секунду, например:

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);

и currentBytes устанавливается в ProgressEvent.PROGRESS. Эта техника кажется неточной. Мне было интересно, какими еще способами я мог бы рассчитать скорость загрузки при загрузке и отобразить ее в реальном времени.

Любые идеи или мнения приветствуются!

Большое спасибо,

Rudy

Ответы [ 2 ]

0 голосов
/ 29 июня 2010

Если этот блок кода является копией и вставкой, он, безусловно, не будет работать так, как вы ожидали. Вы объявляете speed как функцию, в которой вы, по-видимому, переопределяете ее как число. Я высоко ценю Flash IDE, который поможет вам разобраться с схематичной грамматикой, но подобный код приведет вас к различным неприятностям. Старайтесь быть явным при написании кода.

Попробуйте что-то вроде этого, заменив yourLoader идентификатором, который вы присвоили загрузчику:

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);

Это должно подсчитать, сколько байтов переместилось в 1 секунда интервалы.

Edit:

Возможно, вы захотите сделать интервал чуть меньше 1000 мс и рассчитать среднюю скорость для ваших последних n выборок. Это сделало бы число, которое видят ваши пользователи, более стабильным, чем сейчас. Сделайте скорость Array и .push() последней выборкой. Используйте .shift(), чтобы отбросить самые старые сэмплы, чтобы не потерять слишком много точности. Метод проб и ошибок даст вам лучшее представление о том, сколько сэмплов нужно хранить и как часто их нужно брать.

0 голосов
/ 29 июня 2010

Вы можете отслеживать скорость загрузки на сервер, а затем отправлять эти данные обратно клиенту. Этот метод часто используется для форм загрузки файлов ajax.

...