2

Ajax経由でファイルをチャンクでアップロードしています。現時点では、各チャンクの重量は 50 KiB です。

アップロードプロセスでは、次の情報があります。

  • ファイルサイズ
  • チャンクの量
  • 開始時間
  • 現在のチャンクをアップロードするのにかかった時間 (ミリ秒)

これを完了するために必要なほとんどすべてを追加することもできます。私が考えたのは、アップロード速度に依存するのではなく、チャンクの平均アップロード時間に依存することです。これが私の現在の壊れた式です。

(averageUplTime * ((FileSize / ChunkSize) ) -  AmountOfChunks) / 1000 

実際にはほとんど機能します。数字の間でほぼ正しい方法で減少していることがわかりますが、これらの長い数字が得られ、これを行う正しい方法がわかり9.16174ません。

4

1 に答える 1

7

startTimeがエポックからのミリ秒単位のタイムスタンプであると仮定すると、これは機能するはずです。

var elapsedTime = (new Date().getTime()) - startTime;
var chunksPerTime = currentChunk / elapsedTime;
var estimatedTotalTime = amountOfChunks / chunksPerTime;
var timeLeftInSeconds = (estimatedTotalTime - elapsedTime) / 1000;

var withOneDecimalPlace = Math.round(timeLeftInSeconds * 10) / 10;

アップロード速度が大きく変動しない限り、これは「正確」です。chunksPerTime計算する最後の X チャンクのみを考慮する(およびこれらの最後の Y 値を平均する)ことで、より良い結果を得ることができます。

于 2012-11-24T13:42:47.700 に答える