javascript - 从 PerformanceEntry API 估计带宽
问题描述
所以我现在已经阅读了几篇关于如果你有一个已知大小的图像然后你计算下载该图像需要多长时间的文章,你可以推断连接速度/带宽。
我的想法是,为什么不使用来自的数据window.performance.getEntries()
并获取总数transferSize
/总数duration
,因为样本量会更大,而且我不必测量我自己的任何时间或注入任何额外的任意图像作为测量素材。
这是我到目前为止所做的只是为了证明这一点。
首先,我以表格形式获取所有具有类型、大小和持续时间的条目。
window.performance.getEntries().map(i => i.initiatorType + ' ' + i.transferSize + ' ' + i.duration );
然后我将其复制并粘贴到记事本++ 中,在将其填充到电子表格之前进行一些正则表达式来清理它。
从这里我可以粘贴到 Excel 中。
我正在过滤undefined
& navigation
initiatorType,0
以及transferSize & duration。
还有一些计算列只是为了将所有内容放入正确的单位中。
- 传输大小 (MB)
=(B3/1000000)
- 持续时间(秒)
=(C3/1000)
- MBps
=(D3/E3)
问题:我的数学正确吗?我的逻辑有什么缺陷?
我的计划是对此进行编纂,但首先我想要一种在继续之前以易于遵循的布局呈现我的逻辑的方法。
动机和来源:
如何在 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
解决方案
虽然可以通过这种方式粗略估计带宽,但您在这种测量中可能会有很大的不确定性。
您正在使用大量可能并行加载的小文件,因此您可能正在测量共享它们之间带宽的文件的传输时间。由于许多原因,较小的文件也往往会产生不可靠的结果。
最好使用可以在没有其他网络流量的情况下下载的大型文件/文件,例如可以下载的图像。测量的时间越长,结果就越好 - 当用户没有将他的连接用于其他任何事情时,更有可能击中某个位置。
这将不准确,但如果这就是您想要的,可能会给您一些用于分析目的的想法。
推荐阅读
- c# - aspnet core worker docker 容器的启动异常尝试从 Kubernetes 中的 env 变量设置秘密
- vue.js - Laravel Mix 代码拆分在 Safari 中被破坏
- html - 如何在移动视图中更改 Bootstrap 导航栏父菜单项图标的位置?
- go - GoLang 中的数学/兰德
- asp.net-core - 为什么我的原点在 asp net core 3 中为空,而不是 localhost
- javascript - CORS BLOCKED 'Access-Control-Allow-Origin' Firebase 功能不允许
- javascript - Three.js - 用线条连接粒子 - 如何更高效?
- django - 如何在Django中测试一个实例是否有一个ForeignKey指向它的子类?
- mysql - Django 我想传递多个 id 并获取他们的数据。场景:社交网络系统
- ios - 即使方向被锁定,我如何检测设备方向