Javascript 计算AJAX下载速度

Javascript 计算AJAX下载速度,javascript,node.js,Javascript,Node.js,我想在下载文件时实时显示下载速度,但是下面的代码不起作用速度对整个下载返回0.0 https.get(options, function (update) { fileSize = (parseInt(update.headers['content-length']) / 1048576).toFixed(1); startTime = (new Date()).getTime(); endTime = startTime; update.on('data', f

我想在下载文件时实时显示下载速度,但是下面的代码不起作用<代码>速度对整个下载返回0.0

https.get(options, function (update) {
    fileSize = (parseInt(update.headers['content-length']) / 1048576).toFixed(1);
    startTime = (new Date()).getTime();
    endTime = startTime;
    update.on('data', function (chunk) {
        file.write(chunk);
        len += chunk.length;
        fileDownloaded = (len / 1048576).toFixed(1);
        endTime = (new Date()).getTime();
        time = (endTime - startTime) / 1000;
        speed = ((fileSize / time) / (1024 * 1024)).toFixed(2);
        progressPercentage.html(fileDownloaded + ' MB / ' + fileSize + ' MB ' + speed + ' MB/s');
    });
});

我认为可能有更好的解决方案,但我们现在开始:

var startTime = (new Date()).getTime();
var downloadedLength = 0;

update.on('data', function (chunk) {
    // ...

    downloadedLength += chunk.length;

    var now = (new Date()).getTime();
    var speed = downloadedLength / (now - startTime); //bytes/second
    //speed / 1024 should return in kilobytes

    //...
});
编辑:


考虑使用
Date.now()
而不是
(new Date()).getTime()
为了更好的性能

认为Carlos提供的答案是使用performance.now()而不是(new Date())。getTime()将是更好的选择


仅供参考:

如果您输出了更多的变量,也许您可以确定罪魁祸首。问题从何处开始?@User394839859-如果不了解一些基本知识,例如
update.headers['content-length']
的计算结果,则很难进行远程调试。但是,@CarlosCarucce在他的回答中提出了一个很好的观点。你需要至少采取一些步骤来制作这个正确的JS(通过使用'var'等声明变量),然后检查闭包中变量的范围。我认为
Date.now()
会更好,不是吗?