通过PerformanceEntry API

时间:2018-10-27 17:02:45

标签: javascript performance bandwidth

因此,我现在阅读了几篇文章,内容涉及如果您拥有一个已知大小的图像,然后又花了多长时间下载该图像,则可以推断出连接速度/带宽。

我的想法是,为什么不使用来自window.performance.getEntries()的数据并取总transferSize /总duration,因为样本量会更大,因此我不必进行检测我自己的任何时间,或注入任何多余的任意图像作为测量草料。

这是我到目前为止所做的,只是为了证明这一点。

首先,我以表格式格式获取所有类型,大小和持续时间的条目。 window.performance.getEntries().map(i => i.initiatorType + ' ' + i.transferSize + ' ' + i.duration );

enter image description here

然后我将其复制并粘贴到notepad ++中,以进行一些正则表达式清理,然后再将其填充到电子表格中。

^\d*:\s"(\w*\s\w*\s[\w\.]*)" enter image description here

从这里我可以粘贴到Excel中。

我正在为{em> transferSize 和 duration 过滤掉undefinednavigation initiatorType 0 em>。 enter image description here

还有一些计算所得的列,只是为了将所有内容都转换为正确的单位。

  • transferSize MB =(B3/1000000)
  • 持续时间(秒) =(C3/1000)
  • MBps =(D3/E3)

enter image description here

然后我创建了数据透视图 enter image description here

问题:我的数学正确吗?我的逻辑存在哪些缺陷?

我的计划是对此进行整理,但是首先,我想在继续之前以一种易于遵循的布局展示我的逻辑的方法。

动机和来源:

How to detect internet speed in JavaScript? https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/transferSize https://developer.mozilla.org/en-US/docs/Web/API/PerformanceServerTiming https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry

1 个答案:

答案 0 :(得分:0)

虽然有可能以此方式大致估算带宽,但您可能在此测量中存在很大的不确定性。

您正在使用大量可能并行加载的小文件,因此您可能正在测量在它们之间共享带宽的文件的传输时间。较小的文件也会由于许多原因而产生不可靠的结果。

最好使用较大的文件/文件,例如可以在没有其他网络流量的情况下下载的图像。测量的时间越长,结果越好-当用户不使用其连接进行其他任何操作时,击中目标的机会就更高。

这可能不准确,但是如果您要这样做,可能会给您一些用于概要分析的想法。