AS3: расчет текущей скорости загрузки (или пропускной способности)

Я загружаю файлы, используя метод 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. Этот метод кажется неточным. Мне было интересно, какие еще способы я мог бы использовать для расчета скорости загрузки во время загрузки и отображения ее в режиме реального времени.

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

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

Руди


person Rudy    schedule 28.06.2010    source источник


Ответы (2)


Если этот блок кода является копией и вставкой, он определенно не будет работать так, как вы ожидали. Вы объявляете 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 секунда.

Редактировать:

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

person Billy Back Bedroom    schedule 29.06.2010
comment
Это не было построчное копирование и вставка, я пытался переписать это быстро здесь и дважды установить скорость имени. В моей программе такого нет, но хороший улов, спасибо. Мне нравится идея массива, сталкивание элементов и просто вычисление среднего из n выборок. Это сделает его более стабильным (хотя внезапные падения или увеличение скорости потребуют некоторого времени для отражения), но это все же лучшее решение. Спасибо! - person Rudy; 29.06.2010

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

person Maz    schedule 28.06.2010
comment
Хорошо, спасибо. Если бы мне пришлось использовать только клиент, есть ли хороший метод для клиентской стороны, пожалуйста? - person Rudy; 29.06.2010