@cloudflare/speedtest

中文文档
1.17.0发布于 2026/11/09MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 35.8万

对 Cloudflare 的边缘网络进行网络速度测试的组件

中文使用文档
文档目录9 节
  1. 安装
  2. 简单使用
  3. API 参考
  4. 证据
  5. 属性
  6. 方法
  7. 通知事件
  8. 测量配置
  9. 结果对象

云浮速度测试

NPM package Build Size NPM Downloads

@cloudflare/speedtest 是一个用于测量客户端互联网连接质量的 JavaScript 模块。 使用Cloudflare 速度测试测量应用程序的测量引擎 https://speed.cloudflare.com (中文(中国大陆) )。 。 。 .

模块针对 云雾花 边缘网络并依赖 性能资源Timing 浏览器 api 以获取计时结果. 网络连接的特点是有下载/上载带宽、延迟和包丢失等项目.

请注意,Cloudflare在完成后收集测量结果,以便计算关于互联网连接质量的综合见解.

安装

将此软件包添加到您的 package.json 在您的项目目录根中运行此选项 :

npm install @cloudflare/speedtest

简单使用

import SpeedTest from '@cloudflare/speedtest';

new SpeedTest().onFinish = results => console.log(results.getSummary());

API 参考

SpeedTest 是一个 JavaScript 类,应该与 new 关键词 不需要通过一个配置对象,因为所有项目都有默认值.

证据

new SpeedTest({ configOptions })

标有QQ的选项是 实验和不稳定:它们可能改变行为, 重新命名,或在任何发布中被删除,包括补丁。 不依赖 他们.

配置选项说明默认
自动启动数字 : 布尔是否在即时状态下自动启动测量 .true
计量 目标数字 : 字符串 []发送延迟、下载和上传请求的源头 measurementDownloadPath 财务报告和审定财务报表 measurementUploadPath测试在目标上空延后 当空地, downloadApiUrl 财务报告和审定财务报表 uploadApiUrl 改为使用。 一个不裸露的入口 http(s) 来源抛出 a TypeError 当引擎被创建时。 与页面不同来源的目标必须发出 Timing-Allow-Origin 页: 对目标的请求未经报告即通过 onError 然后跳过.[]
下行负荷平面数字 : 字符串每集的延迟和下载请求路径 measurementTargets。它可能包括一个查询字符串。 一条没有开始的道路 / 丢出一个 TypeError 当引擎被创建时./__down
度量加载Path数字 : 字符串每个上传请求的路径 measurementTargets。它可能包括一个查询字符串。 一条没有开始的道路 / 丢出一个 TypeError 当引擎被创建时./__up
下载 ApiUrl数字 : 字符串折旧:使用 measurementTargets。 。 。 . 用于执行下载的 API URL 获取请求, 当 measurementTargets 为空.https://speed.cloudflare.com/__down
上传 ApiUrl数字 : 字符串折旧:使用 measurementTargets。 。 。 . 用于执行上传 POST 请求的 API URL, 当 measurementTargets 为空.https://speed.cloudflare.com/__up
转动ServerUri数字 : 字符串TURN服务器的URI用来测量包丢失,例如. turn.cloudflare.com:3478。见 数据包损失。 。 。 .null
转动服务器CredsApiUrl数字 : 字符串返回 TURN 服务器证书的 URI 。 期待 JSON 对 username 财务报告和审定财务报表 credential 键。 见 数据包损失。 。 。 .null
转向服务器用户数字 : 字符串TURN 服务器证书的用户名 .- 说吧
转向服务器Pass数字 : 字符串TURN服务器证书的密码.- 说吧
权限键数字 : 字符串🧪 实验. 将测试结果归咎于注册客户的不透明标志,作为 Authorization: Bearer 关于测量、TURN证书和成果记录请求的页眉。 从你自己的后端获取——引擎从不要求自己一个. 要求数 authorizationEnabled他自己是不会被派遣的。 除非 allowInsecureAuthorizationToken 已经设定.null
授权已启用数字 : 'header' 布尔🧪 实验. 选择发送 authorizationToken,否则即使在设定时也不予考虑. 'header' 财务报告和审定财务报表 true 都发作 Authorization: Bearer· ; true 是永久别名,用于: 'header',因此可以添加未来的传输,而不改变一个已有的配置的作用.undefined
允许不安全认证数字 : 布尔🧪 实验. 发送 authorizationToken 即使终点不是HTTPS, 用于本地开发对一个 http:// 服务器。 在制作中永远不要启用此功能: 服务器将一个从平白文字上看到的符号视为已损坏并撤销它 .false
测量数字 : 数组由速度测试引擎执行的测量序列. 见 下级 用于此选项的特定语法.
下行记录数字 : 布尔是否与下载请求同时进行额外的延迟测量,以测量加载的延迟(下载期间).true
升入负载数字 : 布尔是否与上传请求同时进行额外的延迟测量,以测量加载的延迟(在上传期间).true
装入温度数字 : 编号在装入的延迟请求之间等待的时间间隔( 毫秒) .400个
带宽数字 : 编号在下载/上载计量套件中达到的最小持续时间(以毫秒计),用于在相同方向上停止文件尺寸较大的进一步测量.1 000个
中止请求期限数字 : 编号单个请求的最长期限(以毫秒为单位). 需要更长时间的请求被中止和跳过 . bandwidthAbortRequestDuration 是一个被贬值的别名.0 (残疾)
中止测试期限数字 : 编号整个测试的最大运行时间(以毫秒计,不包括暂停时间). 到达后,测试以迄今所收集的结果为结束.0 (残疾)
估计服务时间数字 : 编号如果下载/上载API不返回 a server-timing 包含在服务器所花时间的响应头,这个固定值(以毫秒计)将从所有时间到第一字节的计算中减去.0 个
死亡率数字 : 编号百分位数( 0到 1 之间) 用于从一组测量中计算耐久性 .0.5 (韩语)
带宽百分点数字 : 编号从一组测量中计算带宽的百分位数( 0到 1 之间) .0.9 (中文(简体) )
带宽最小请求期限数字 : 编号要求考虑在带宽计算中使用足够好的测量方法的最小持续时间(以毫秒计).10个
装入请求结束数字 : 编号要求考虑装入连接的最小期限(以毫秒计).250号
装入LatencyMax点数字 : 编号为加载的耐久测量保留的最大数据点数. 超过这一数额时,保留最新数额.20国

属性

属性说明
结果数字 : 结果获取电流 测试结果 对象。 如果测试仍在运行, 则可能得出不完整的值 .
正在运行数字 : 布尔获取测试引擎是否正在运行 .
已完成数字 : 布尔更清楚地了解测试引擎是否完成了所有测量,结果被认为是最终的.

方法

方法说明
播放()开始或恢复测量。 如果引擎已经运行或已完成, 则不做任何事 .
暂停( c)暂停测量。 如果引擎已经暂停或完成, 则不做任何工作 .
重新启动( c)清除当前结果并重新开始测量.

通知事件

事件方法参数说明
运行变化运行中 : 布尔每当测试引擎启动或停止时,就发出警报. 当前状态作为函数参数包含.
关于结果的变化{类型 : 字符串 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢任何项目在结果发生变化时都会被援引,通常表示测量完成. 改变的计量类型作为信息属性被包括在函数参数中.
完成时结果 : 结果当测试结束时,用 结果对象 以函数参数方式收集 .
错误错误 : 字符串状态 : 数字 qq 未定义当在一次测量中发生出错时即告发,可用时为HTTP状态. 多数错误不会停止测试;呼叫 pause() 从这个召回停止它.

测量配置

试验发动机将进行的具体测量(及其序列)可使用 measurements 配置选项 。 这应该是一系列物体,每个物体都有 type 字段,加上该计量类型特有的额外字段.

由引擎执行的默认测量数据集是:

[
  { type: 'latency', numPackets: 1 }, // initial latency estimation
  { type: 'download', bytes: 1e5, count: 1, bypassMinDuration: true }, // initial download estimation
  { type: 'latency', numPackets: 20 },
  { type: 'download', bytes: 1e5, count: 9 },
  { type: 'download', bytes: 1e6, count: 8 },
  { type: 'upload', bytes: 1e5, count: 8 },
  { type: 'upload', bytes: 1e6, count: 6 },
  { type: 'download', bytes: 1e7, count: 6 },
  { type: 'upload', bytes: 1e7, count: 4 },
  { type: 'download', bytes: 2.5e7, count: 4 },
  { type: 'upload', bytes: 2.5e7, count: 4 },
  { type: 'download', bytes: 1e8, count: 3 },
  { type: 'upload', bytes: 5e7, count: 3 },
  { type: 'download', bytes: 2.5e8, count: 2 }
]

以下是每个测量类型的可用字段:

延迟

外地需求说明默认
数字包数字 : 编号对延迟的次数得到执行请求. 这些请求是针对下载API的 bytes=0,然后是往返时间到第一个字节的时间 requestStart 财务报告和审定财务报表 responseStart 被提取出来.- 说吧

下载/上传

每一个这些计量集都与特定的文件大小相接. 发动机遵循了每个方向(下载或上传)的坡道方法. 当一个方向有多个测量组(文件大小增加)时,引擎会继续运行,直到达到指定条件 bandwidthFinishRequestDuration,此时将忽略进一步朝同一方向设置.

外地需求说明默认
字节数字 : 编号对从下载的 API 请求的文件大小, 或张贴到上传的 API 。 每个请求的带宽(计算为每秒比特,或bps)通过除以 transferSize (以位数计)由请求持续时间(不包括服务器处理时间). 持续时间从浏览器报告的最后答复信头中计量(finalResponseHeadersStart),因此临时 1xx 答复并不缩短.- 说吧
计数数字 : 编号对执行此文件大小的请求数量 。 报告持续时间为零或负数或没有资源时段输入的请求,没有可测量的带宽:它仍然用于 count,但通过控制台警告从结果中丢弃,所以一个集可以返回的数据点比要求的要少。 如果在一个计量组内连续三次请求没有资源时间输入,测试以迄今收集的结果结束,并报告通过 onError。 。 。 .- 说吧
绕行定义数字 : 布尔没有是否为 bandwidthFinishRequestDuration 检查应当被忽略,并指示引擎在任何情况下继续测量这个方向.false

数据包损失

通过向WebRTC TURN服务器提交一组UDP数据包,以及确定有多少数据包没有到达,来测量包的损失。 提交这些包可以采用分批方式,其中分批之间有睡眠时间.

包丢失是选入的:它不是默认测量的一部分,它需要你自己的TURN服务器配置. 为了启用它,增加一个 packetLoss 测量,以及:

  • 设定 turnServerCredsApiUrl 返回 TURN 证书的结束点,加 turnServerUri (例如:. turn.cloudflare.com:3478),除非终点也返回 a server 字段,或
  • 设定 turnServerUri 与你自己的 turnServerUser 财务报告和审定财务报表 turnServerPass。 。 。 .
new SpeedTest({
  turnServerUri: 'turn.cloudflare.com:3478',
  turnServerCredsApiUrl: 'https://turn.example.com/turn-credentials',
  measurements: [
    // ...
    { type: 'packetLoss', numPackets: 1e3, responsesWaitTime: 3000 }
  ]
});

A 类 packetLoss 无任一选项的测量因出错而失败,引擎会继续到下一个测量.

使用 Cloudflare Worker 提供 TURN 证书的示例代码 Cloudflare 实时 TURN 服务器,可在 实例/回合-工作者. 参考工人的 文档 用于设置和部署指令.

外地需求说明默认
数字包数字 : 编号没有要发送的 UDP 包总数 .100个
回复等待时间数字 : 编号没有等待最新数据包接收的时间间隔(以毫秒计),然后确定测量是否完整,所有未返回数据包是否丢失.5000块
批量大小数字 : 编号没有一批包的数量 。 如果该值高于 numPackets 只有一批货.10个
批次等待时间数字 : 编号没有在批次之间等待多长时间(以毫秒计).10个
连接 超时数字 : 编号没有连接到 TURN 服务器的超时 .5000块

结果对象

用于获取速度测试测量结果的一个实例对象. 此对象有以下方法:

方法说明
获取摘要 ()返回一个高层次的汇总对象,其中包含所进行测量的计算结果.
获取未装入的Latency ()返回闲置时连接延迟的减少值。 需要至少一个 latency 计量.
正在获取已卸载的 Jitter ()返回闲置时的连接焦点 。 慢跑被计算为相接相接的耐久度测量之间的平均距离. 至少需要两个 latency 测量.
获取已卸载的灯塔( )返回带有闲置时所测量的所有后缀的数组 。 包括按顺序衡量的一个值.
获得下行记录( C)在下载方向上加载时返回连接延迟的减少值。 要求数 measureDownloadLoadedLatency 启用.
获取“ 向下下载” Jitter ()在下载方向上加载时返回连接焦点 。 要求数 measureDownloadLoadedLatency ,以及至少两个装入的耐用度测量.
获得下行LadedLatencyPoints ()返回包含在下载方向上加载时所测量的所有后缀的数组 。 包括每个装入量按顺序排列的一个值. 要求数 measureDownloadLoadedLatency 启用.
获取LadedLatency ()在上传方向上加载时返回连接延迟的减少值。 要求数 measureUploadLoadedLatency 启用.
获取 LadedJitter ()在上传方向上加载时返回连接焦点 。 要求数 measureUploadLoadedLatency ,以及至少两个装入的耐用度测量.
获取LadedLatencyPoints ()返回带有在上传方向上加载时所测量的所有后缀的数组 。 包括每个装入量按顺序排列的一个值. 要求数 measureUploadLoadedLatency 启用.
获得下载 Bandwidth ()返回下载带宽的减少值(bps)。 需要至少一个 download 测量,比 bandwidthMinRequestDuration 阈值.
获得下载 Bandwidth Points ()返回带有所有下载测量结果的数组。 每个项目将包括以下领域: { bytes, bps, duration, ping, measTime, serverTime, transferSize }。 。 。 .
获取上载 Bandwidth ()返回上传带宽的减少值(bps)。 需要至少一个 upload 测量,比 bandwidthMinRequestDuration 阈值.
获取上载 Bandwidth Points ()返回带有所有上传测量结果的数组。 每个项目将包括以下领域: { bytes, bps, duration, ping, measTime, serverTime, transferSize }。 。 。 .
获取包 Loss ()返回已测量的包损失比率的减少值(0至1)。 需要一个 packetLoss 计量集.
获取 Packet Loss 细节( )返回带有数据包损失测量细节的对象。 包括下列领域: { packetLoss, totalMessages, numMessagesSent, lostMessages }要求 packetLoss 计量集.
获取总任务数( )返回引擎运行的全部时间(以毫秒计),不包括任何被暂停的时间。 仅在引擎完成后可用.
获取分数( )返回计算 AIM 分数 将网络连接的质量按照流化、游戏或实时通信等使用案例分类。 这个分数只有在发动机完成所有测量后才能得到. 没有 packetLoss 测量,包损失被忽略在分数之外,所以出值低于5%以下的连接。 失败 packetLoss 测量计为0分.

版本与发布记录

@cloudflare/speedtest 共发布 48 个版本,首次发布于 2023/02/03;过去 12 个月发布了 20 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.17.0latest2026/11/09今天
1.16.02026/11/036 天前
1.15.02026/10/2317 天前
1.14.22026/10/1426 天前
1.14.12026/09/221 个月前
1.14.02026/09/082 个月前

关于 @cloudflare/speedtest 的常见问题

@cloudflare/speedtest 是什么?

对 Cloudflare 的边缘网络进行网络速度测试的组件

如何安装 @cloudflare/speedtest?

在项目目录运行 npm install @cloudflare/speedtest,或使用 pnpm add / yarn add / bun add。

@cloudflare/speedtest 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@cloudflare/speedtest 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@cloudflare/speedtest 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@cloudflare/speedtest 可以商用吗?

@cloudflare/speedtest 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@cloudflare/speedtest 的下载量有多少?

根据 npm 官方下载统计,@cloudflare/speedtest 在 2026/10/10 – 2026/11/08 这 30 天内被下载 358,293 次,日均约 11,943 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cloudflare/speedtest 还在维护吗?

最新版本 1.17.0 发布于 2026/11/09(今天);至今共发布 48 个版本,其中过去 12 个月发布了 20 个;首次发布于 2023/02/03。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。