AS3:计算当前上传速度(或吞吐量)
-
01-10-2019 - |
题
我正在使用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文件上传表单。
不隶属于 StackOverflow