计算剩余的下载时间

Lin*_*nas 2 javascript math time

我正在通过Ajax批量上传文件。目前,每个块的重量为50 KiB。

在上传过程中,我具有以下信息:

  • 文件大小
  • 块数
  • 时间开始
  • 以毫秒为单位上传当前块需要多长时间

我还可以添加完成此操作所需的几乎所有内容,我想到的不是依靠上传速度,而是依靠平均块上传时间,这是我目前的失败公式:

(averageUplTime * ((FileSize / ChunkSize) ) -  AmountOfChunks) / 1000 
Run Code Online (Sandbox Code Playgroud)

它实际上几乎可以正常工作,我可以看到在数字之间它以几乎正确的方式在减少,但是我得到了这些长数字9.16174,我无法找出正确的方法来做到这一点。

pha*_*t0m 6

假设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;
Run Code Online (Sandbox Code Playgroud)

只要上传速度波动不大,这只是“准确”。通过仅考虑要计算的最后X个块chunksPerTime(并将它们的最后Y个值取平均值),您可以获得更好的结果。