【问题标题】:How to check upload speed in javascript?如何在javascript中检查上传速度?
【发布时间】:2016-11-22 02:36:58
【问题描述】:

基本上,我创建了一个简单的项目,用户可以在其中拖放以将文件上传到服务器。只是为了通知用户完成该过程需要多长时间,我需要显示他们的上传速度。我发现了这个问题estimate users' upload speed without direct permission 但它完全不适合我的项目。

这是我如何上传文件的代码:

function upload(file){
    var xhr=new XMLHttpRequest();
    xhr.onreadystatechange = function() {

        if (xhr.readyState == XMLHttpRequest.DONE) {
               alert(xhr.responseText);
        }
    }

    xhr.upload.addEventListener('progress', function(e){
    $('.upgbar').show();
    $('.trkpb').css('width', (e.loaded/e.total*100)+"%");

    var loaded = e.loaded;
    var total = e.total;
    var progressValue = Math.round( ( e.loaded / e.total ) * 100 );

    var seconds_elapsed =   ( new Date().getTime() - started_at.getTime() )/1000; var bytes_per_second =  seconds_elapsed ? loaded / seconds_elapsed : 0 ;
    var Kbytes_per_second = bytes_per_second / 1000 ;
    var remaining_bytes =   total - loaded;
    var seconds = seconds_elapsed ? remaining_bytes / bytes_per_second : 'calculating' ;
    $('.time_re').text("Time Remaining: "+seconds.charAt(0));
    }, false);

    xhr.open('post','../uploadtostack',true);
    xhr.setRequestHeader('X-File-Name',file.name);
    xhr.setRequestHeader('x-File-Size',file.size);
    xhr.setRequestHeader('X-File-Type',file.type);
    xhr.send(file);
}

通过xhr.upload.addEventListener我可以估计剩余时间和上传的数据量但不知道如何调整这个来显示上传速度。如果你可能会为什么我在$('.time_re').text("Time Remaining: "+seconds.charAt(0)); 行出现错误

TypeError: seconds.charAt 不是函数[了解更多]

如果有人能告诉我如何在 javascript 中实现语音检测器,我将不胜感激 || jQuery。问候

【问题讨论】:

  • 查找文件上传管理器。您最好报告文件已上传的数量与文件的实际大小。
  • 用户到您的服务器的连接速度会波动,因为除了他们的互联网连接之外还有很多变量。在我的脑海中有:用户的互联网连接,您的服务器的互联网连接,您的网络服务器上的当前负载(如果它陷入困境,它不会很快处理),用户计算机上的 CPU 开销,..等等。 @Mike C 提出的建议对最终用户来说更可靠、更有价值。
  • 我认为这些问答可以很好地了解如何做到这一点:stackoverflow.com/questions/21027888/calculate-upload-speedstackoverflow.com/questions/15472251/… — 检查成功和失败的 XHR。
  • @MikeC 我不认为我在关注你。你的意思是我应该检查服务器上接收到的字节数并回复速度吗?
  • @mrjorden 差不多。您需要设置某种轮询或 websocket 连接。很多人都遇到过这个问题,所以有很多关于它的信息。

标签: javascript jquery


【解决方案1】:

您可以尝试在之前发送定义大小的文件,并以此计算估计时间。 示例:演示文件.txt > 大小 10k 1 秒 另:filetoupload.txt > size 20k 预计时间 2 秒

【讨论】:

  • 为什么我需要发送一个文本文件并检查速度它不能与我的正常上传文件一起使用?
  • 因为 javascript 不能给你这个信息,但你也可以上传第一个文件并用这个时间估计上传时间
  • 上传真实文件时,如果上传速度上升或下降怎么办?
  • 您可以累积并调整所有成功上传的时间,这样可以获得更好的近似结果
  • 我很少投反对票,但这在很多方面都是错误的。您正在采取不必要的资源消耗操作,以便估计在同一时间发生的另一个消耗资源的操作的持续时间,在它们实际上相互竞争的环境中。
猜你喜欢
  • 2014-02-17
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
  • 2015-08-02
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多