计算剩余下载时间

时间:2012-11-24 13:33:23

标签: javascript math time

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

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

  • 文件大小
  • 数量
  • 时间开始
  • 以毫秒为单位上传当前块的时间

我还可以添加几乎所有可能需要的东西来完成这个,我想到的不是依赖上传速度,而是依靠平均的块上传时间,这是我目前破坏的公式:

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

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

1 个答案:

答案 0 :(得分:4)

假设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;

只要上传速度不会波动很大,这只是“准确的”。通过仅考虑最后的X个块来计算chunksPerTime(并对这些的最后Y值进行平均),可以获得更好的结果。