AS3: расчет текущей скорости загрузки (или пропускной способности)
-
01-10-2019 - |
Вопрос
Я загружаю файлы с помощью метода загрузки () класса 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);
и quotbytes устанавливается в ProgressEvent.progress. Эта техника кажется неточностью. Мне было интересно, какие еще могут использовать другие способы, чтобы рассчитать скорость загрузки при загрузке и отображении ее в режиме реального времени.
Любые идеи или мнения приветствуются!
Спасибо большое,
Rudy.
Решение
Если этот код кода является копией и вставьте, безусловно, не будет работать, как вы ожидали. Вы объявляете 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()
Чтобы бросить самые старые образцы, чтобы вы не теряете слишком много точности. Проб и ошибка даст вам лучшее представление о том, сколько образцов удержания и как часто их взять.
Другие советы
Вы можете мониторировать скорость загрузки на сервере, а затем отправлять эти данные обратно клиенту. Эта техника часто используется для форм загрузки файлов AJAX.