Lin*_*nas 2 javascript math time
我正在通过Ajax批量上传文件。目前,每个块的重量为50 KiB。
在上传过程中,我具有以下信息:
我还可以添加完成此操作所需的几乎所有内容,我想到的不是依靠上传速度,而是依靠平均块上传时间,这是我目前的失败公式:
(averageUplTime * ((FileSize / ChunkSize) ) - AmountOfChunks) / 1000
Run Code Online (Sandbox Code Playgroud)
它实际上几乎可以正常工作,我可以看到在数字之间它以几乎正确的方式在减少,但是我得到了这些长数字9.16174,我无法找出正确的方法来做到这一点。
假设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个值取平均值),您可以获得更好的结果。