我的想法是:
有一个小的,独立的JavaScript文件,将在页面完全加载后启动。该脚本将启动一个计时器,下载一个已知大小的文件(假设正好是10KB的乱码文本),然后停止计时器。
如果计时器确定下载文件正好需要1秒,这是否意味着用户每秒只有80千比特的下行空间可供使用?或者这是否意味着从我的服务器上下载80kb的文件总是需要1秒的时间,无论是图像、文本文件还是音乐文件等等?
这里发生了很多事情。首先,在下载文件时,您必须同时满足延迟(第一个下载位通过线路所花费的时间)和带宽(线路中容纳的数据量)。您还必须考虑争用和/或路由从根本上是可变的这一事实,因此这种度量会不时地发生变化——可能是显著的变化。
如果您想要一个像样的测量,您需要尝试几种不同大小的文件(10kb、100kb、1000kb、10000kb等)。有了这些数据(特别是如果它是在不同的时间测量的),你应该能够通过尝试估计延迟(与下载大小无关)来估计"下载速度",将其分解,并查看剩余时间(最佳,最差或平均情况)。
如果你保持请求包小,我将忽略由于上传的延迟。只要确保你尝试下载真正大的文件,你应该没问题。
客户端的下载速度可能会有很大的波动,所以一个1秒的样本不会告诉你太多。它会告诉你他们的平均下载速度(从你的服务器)在这一秒,但他们的下载速度下一秒可能是10倍快或5倍慢。他们也可能同时下载其他东西,这会影响你的结果。
如果您想这样做,请记住,在服务器接收到对文件的请求之前,您不能开始计时。否则,您也将包括他们上传请求文件的时间。还要记住,文件的头文件占用空间,所以你应该弄清楚文件的头文件有多大。