使用 PHP/Javascript 测试网络速度

Posted

技术标签:

【中文标题】使用 PHP/Javascript 测试网络速度【英文标题】:Test network speed using PHP/Javascript 【发布时间】:2011-10-14 14:51:41 【问题描述】:

我正在尝试寻找一种使用 phpjavascript 测试网络速度的方法。

这可能吗?

理想情况下,我想测试速度并动态决定向客户提供多少内容...

我应该指出,我主要是在谈论移动设备。大多数宽带连接几乎没有什么不同,所以我的目标是衡量某人是否连接到 WiFi 网络或在蜂窝数据网络上苦苦挣扎。

【问题讨论】:

也许能够使用对 PHP 文件的 JS 调用和返回来测试延迟(根据有效负载对响应时间进行基准测试),但我无法想象这是准确的。 @Brad Christie,也许不是,但还是很高兴 取决于您要交付的内容,我认为这不是理想的方法。也许如果您正在为移动浏览器开发,这将是可行的,这样您就不会向以低于拨号速度提供服务的移动网络提供图像。 这正是我打算做的:) 3G、2G、宽带、蜂窝...... 【参考方案1】:

执行 ajax 请求以下载固定大小的数据块并检查之前/之后的时间以大致了解速度:

var start = new Date();
$.ajax(....);
var end = new Date();

var elapsed = end.getTime() - start.getTime(); // elapsed time in milliseconds.

您需要使用足够大的数据块来获取有效请求,这意味着您只是为了进行此测试而浪费了相当多的带宽。

【讨论】:

嗯,这些是我的恐惧。无论如何都是好主意 @genesis:应该,只要您的基准变量在响应范围之外。我可能会添加一个 error:/setTimeout 默认值,以防 ajax 失败。 @BradChristie:你没明白。 javascript 直接进行,直到 $.ajax() 完成... @genesis:我将其解释为 ajax 调用中的结尾,但这可能只是将我的理解置于 Marc 的代码之上。你是对的,因为写它会失败。但是稍微有点逻辑,这是可行的。 ;-) @genesis:ajax 通常是异步完成的,但这只会改变你在哪里/何时进行“结束”时间收集。如果需要,您也可以随时发出同步请求。【参考方案2】:

按照我的看法,您可以使用 JS -> PHP -> JS 调用和计时响应,但这是非常不准确的。此外,由于浏览器之间存在/不存在服务器标头,您需要使用大量数据(过多的带宽使用问题)并且永远不会得到明确的答案。服务提供商(cough comcast cough)也有一个问题,他们在前几秒给你 12 mbit 的速度,但之后让你窒息到 3 mbit,所以现在你的“测试”会说它们在 OC 线上,但流本身现在会出现数据不足并不断缓冲。

最好的解决方案是在流式传输协议中构建逻辑,该逻辑可以根据传入的数据量/少量数据进行调整。也许它从低带宽质量开始,并在注意到缓冲区增长时提高标准比数据播放速度更快(这就是 Hulu、YouTube 或亚马逊视频所做的)。

【讨论】:

大多数有线运营商现在都启用了突发,因此他们可以声称“我们正在以千兆位速率 (*) [英里后] 向您发送皮秒期间的数据”。 @MarcB:是的,在我的 wonderful xfinity 服务上签了合同(我绝对喜欢)。 等不及我的电信公司 (Sasktel) 完成其 FTTH 建设,然后我可以放弃电缆。 200mbit 起始速度,以及所有捆绑在机上的 IPtv/电话/手机。

以上是关于使用 PHP/Javascript 测试网络速度的主要内容,如果未能解决你的问题,请参考以下文章

fidler弱网测试上行是多少

使用Charles 弱网测试

强悍网络速度测试工具

干货免费网络延迟测试工具汇总

使用fiddler进程弱网测试

Fiddler之模拟弱网测试