我正在使用fileReference类的upload()方法上传文件。我想显示当前的连接速度,我想知道做什么是一个好方法。

我目前的技术是每1 mili秒使用一次计时器,例如:

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。该技术似乎不精确。我想知道在上传并实时显示上传速度时,我还可以使用哪些其他方法来计算上传速度。

任何想法或意见都受到欢迎!

非常感谢你,

鲁迪

有帮助吗?

解决方案

如果该代码块是副本并粘贴,则肯定不会像您预期的那样工作。你声明 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秒 间隔。

编辑:

您可能想使间隔小于1000ms,并计算上一个的平均速度 n 样品。这将使您的用户看到的数字看起来比现在可能更稳定。使速度 Array.push() 最新的样本。采用 .shift() 放下最古老的样品,以免损失过多的准确性。反复试验将使您更好地了解持有多少样本以及频率接受一次。

其他提示

您可以监视服务器上的上传速度,然后将该数据发送回客户端。此技术通常用于AJAX文件上传表单。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top