AS3:現在のアップロード速度(またはスループット)の計算
-
01-10-2019 - |
質問
fileereferenceクラスのupload()メソッドを使用してファイルをアップロードしています。現在の接続速度を表示したいのですが、それを行うのに良い方法だと思っていました。
私の現在のテクニックは、次のような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に設定されます。この手法は不正確に思えます。アップロード中にアップロード速度を計算してリアルタイムで表示するために使用できる他の方法を疑問に思っていました。
どんなアイデアや意見も歓迎されます!
どうもありがとうございます、
ルディ
解決
そのコードブロックがコピーと貼り付けである場合、それは確かにあなたがそれを期待していたように機能しません。あなたは宣言します 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ファイルのアップロードフォームによく使用されます。