虚假估计下载时间

时间:2012-04-10 20:38:55

标签: http firefox download

我一直在从提供托管服务的某些服务中下载文件。很多时候,当我作为免费用户下载Firefox(其他浏览器也没有全部检查)时,向我显示下载速度为400KB,剩余时间为10分钟。这是BS,因为下载文件需要45分钟或更长时间,例如“1分40秒再现”显示几秒钟。

目前用户速度更快。他们是怎么做到的?这个HTTP协议是作弊还是浏览器作弊?为什么Firefox显示错误的值?

3 个答案:

答案 0 :(得分:2)

我从未体验过这一点,但我再也没有使用Firefox下载文件。

也就是说,远程服务器可能正在高速发送文件,但是短时间内的数据突发到其“免费用户”速度。 Firefox可能会看到在这些突发期间下载数据的速度,而不是整体平均速度。

答案 1 :(得分:-2)

许多进度条仅仅是为了让您感觉更好。对于像下载文件这样的东西,很难准确估计。

丢弃并重新发送了多少个数据包?如果带宽在您的机器和服务器之间的某处被阻塞怎么办?需要发送多少数据? (对于文件下载,您可以先发送元数据,但由于多种原因,这在许多情况下会变得复杂)。

这些都是难以或无法准确回答的问题,而且猜测可能会有问题。

认识到用户Don't perceive download times accurately anyway以及实现准确进度条的前景非常缺乏吸引力。简单的方法是制作一个进度条。即使是最好的实现也只是不断修改最佳猜测,并且无法保证猜测的准确性。

解决方案是以一些怀疑态度对待下载时间估算,并且要耐心等待。

答案 2 :(得分:-2)

以下是如何获得真实带宽:

https://superuser.com/questions/356907/how-to-get-real-time-network-statistics-in-linux-with-kb-mb-bytes-format-and-for

将此脚本称为“netbps”可执行文件

#!/usr/bin/perl
use strict;
use warnings;
use Time::HiRes;

my $reporting_interval = 10.0; # seconds
my $bytes_this_interval = 0;
my $start_time = [Time::HiRes::gettimeofday()];

while (<>) {
  if (/ length (\d+):/) {
    $bytes_this_interval += $1;
    my $elapsed_seconds = Time::HiRes::tv_interval($start_time);
    if ($elapsed_seconds > $reporting_interval) {
       my $bps = $bytes_this_interval / $elapsed_seconds;
       printf "%02d:%02d:%02d %10.2f Bps\n", (localtime())[2,1,0],$bps;
       $start_time = [Time::HiRes::gettimeofday()];
       $bytes_this_interval = 0;
    }
  }
}

sudo tcpdump -i wlan0 -l -e -n | ./netbps

我只能说firefox是错误的。此脚本为您提供每秒字节数的良好估计。它大约是firefox估计值的1/4。所以新规则:如果感觉firefox太短时间乘以4来获得真实时间。