使用PHP/Javascript测试网络速度

6

我正在尝试寻找使用PHP或Javascript测试网络速度的方法。

这是可能的吗?

我希望能够测试速度并动态地决定向客户端传输多少内容...

需要指出的是,我主要讨论移动设备。大多数宽带连接差异很小,因此我旨在判断某人是否连接到WiFi网络或在蜂窝数据网络上遇到困难。


可能可以使用JS调用PHP文件并返回来测试延迟(基于负载测试响应时间),但我无法想象这是准确的。 - Brad Christie
@Brad Christie,也许不是,但仍然是个好建议。 - benhowdle89
3G,2G,宽带,蜂窝网络... - benhowdle89
@benhowdle89 我认为你应该修改问题,加入移动设备。这会稍微改变问题的意思。 - Amir Raminfar
请参考此链接:https://dev59.com/bm035IYBdhLWcg3wQtog - advncd
显示剩余3条评论
2个回答

2

进行ajax请求以下载固定大小的数据块,并检查时间以获得大致速度的概念:

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

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

您需要使用足够大的数据块来获取有效的请求,这意味着您需要浪费大量的带宽来进行此测试。

嗯,这正是我担心的。不过还是个不错的想法。 - benhowdle89
@genesis:只要你的基准变量在响应范围之外,就应该可以。不过我建议在ajax失败时添加error:/setTimeout默认值。 - Brad Christie
@BradChristie:你没明白。JavaScript会直接执行,不会等到$.ajax()完成... - genesis
@genesis:我理解为结束在ajax调用内部,但这可能只是我对Marc代码的理解。你说得对,按照现有写法会失败。但是通过一些逻辑处理,它是可行的。;-) - Brad Christie
@genesis:通常情况下,ajax是异步执行的,但这只是改变了您进行“结束”时间收集的位置/时间。如果需要,您也可以始终进行同步请求。 - Marc B

1

我认为,你可以使用JS -> PHP -> JS调用并计时响应,但这相当不准确。此外,你需要使用大量的数据(超额带宽使用问题),并且由于存在/不存在于浏览器之间的服务器标头,永远不会得到明确的答案。还有一个关于服务提供商(咳咳康卡斯特咳咳)的问题,他们在前几秒钟内为你提供12兆比特的速度,但之后将你降至3兆比特,因此现在你的“测试”会说他们在OC线上,但流本身现在会有数据亏损并且会不断缓冲。

最好的解决方案是将逻辑构建到流媒体协议中,根据进入的数据量进行调整。也许它开始时以低带宽质量开始,并在注意到缓冲区增长速度快于数据播放时提高门槛(这就是Hulu、YouTube或Amazon视频所做的)。


现在大多数有线电视运营商都启用了突发功能,因此他们可以声称“我们正在以千兆比特的速率(*)发送数据给您”[几英里后],持续时间为皮秒。 - Marc B
@MarcB:是的,我在我那个我绝对_喜爱_的xfinity服务上签了那份合同(简直太_棒了_)。 - Brad Christie
迫不及待地等待我的电信公司(Sasktel)完成其FTTH建设,然后我就可以放弃有线电视了。200mbit的起始速度,加上内置IPtv/电话/手机捆绑包。 - Marc B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接