Technical Specifications & Architecture
EdgeOne SpeedTest —— 部署在边缘节点上的网页测速
打开网页,点一次按钮,约 20 秒后你就知道:你的设备到最近边缘节点之间,真实的下载吞吐、上传吞吐、延迟与抖动是多少。
一、它是什么
EdgeOne SpeedTest 是一个纯网页的宽带测速工具,运行在腾讯 EdgeOne 的全球边缘节点上。
它和常见的测速网站最大的不同在于:服务端不是一台固定的服务器,而是一段跑在你最近边缘节点上的函数。你打开页面时,页面和测速端点都由离你最近的那个节点直接返回 —— 没有跨省长途回源,没有中心机房带宽瓶颈,测到的就是「你和接入点之间」这条链路的真实能力。
整个项目零依赖、无框架、无构建步骤:原生 HTML + CSS + ES Modules + Canvas,整站静态资源约 120KB。服务端只需要三个极简的 HTTP 端点。
二、核心能力
| 能力 | 说明 |
|---|---|
| 下行吞吐 | 多连接并行流式下载,实时曲线 + 均值 + 峰值 |
| 上行吞吐 | 多连接并行上传,以服务端已确认接收的字节计速 |
| 空闲延迟 / 抖动 | 串行多次小包往返取中位数 |
| 满载延迟 | 下载过程中持续打点,量化 bufferbloat(缓冲膨胀)造成的排队时延 |
| 自适应并发 | 自动选择并发数(2–12)与分块大小(128KB–32MB),慢链路与万兆链路都能打满 |
| 中英双语 | 简体中文 / English 一键切换,跟随浏览器语言,也可强制指定 |
| 导出报告 | 一键生成自包含 HTML 报告,可直接打印或另存为 PDF |
| 本地历史 | 最近 20 次结果保存在浏览器本地,随时回看对比 |
三、为什么测得准
测速看起来简单,做准很难。常见的误差来源我们都处理了:
- 剔除预热窗口 —— 前 600ms 数据直接丢弃。这段里混杂着 TCP 慢启动、连接建立和首个 RTT,留着会把结果拉低。
- 峰值取滑动窗口 —— 峰值不是某一瞬间的抖动值,而是 ≥400ms 滑动窗口内的最大值,既稳定又不失真。
- 上行按服务端确认字节计 —— 浏览器把数据写进内核 socket 缓冲就算「发出去了」,那会严重虚高。我们以边缘节点实际接收并确认的字节数为准。
- 数据不可压缩 —— 下载流是伪随机字节,无法被 gzip/br 压缩,不会出现「测的是压缩比而不是带宽」的经典错误。
- 强制不缓存 —— 测速端点返回
no-store,且 CDN 侧不忽略查询字符串,保证每次都是真实传输,不会命中缓存变成「测缓存」。 - 自适应打满链路 —— 先用 256KB / 2MB / 16MB 阶梯快速摸清链路量级,再选并发数与分块大小:慢链路少并发小分块避免自拥塞,高速高时延链路多并发打满带宽时延积(BDP)。
额外一点:满载延迟是很多测速工具没有的。它能告诉你「一边下载一边打游戏会不会卡」—— 这正是 bufferbloat 的表现。
四、界面与体验
- 双语:默认简体中文,跟随浏览器语言首次自动判断;右上角
EN/中一键切换,选择会被记住。也可用?lang=en/?lang=zh强制指定。 - 响应式:针对桌面(≥1024px)、平板(≤1024px)、手机(≤760px)、窄屏(≤480px)、手机横屏、以及触摸设备分别优化;节点信息自动省略、按钮自适应均分。
- 深浅色主题:跟随系统偏好,也可手动切换。
- 无障碍与偏好:尊重
prefers-reduced-motion(减少动效)。 - 导出报告:生成自包含的 HTML 文件(无任何外部资源、零网络请求),内含结果摘要、节点信息、吞吐曲线快照、完整免责声明与版权,CSS 同时针对屏幕与 A4 打印 / 另存为 PDF 排版(分页、表格不跨页断裂)。
五、架构与部署
┌──────────────────────────────┐
用户浏览器 ───▶ │ 最近的 EdgeOne 边缘节点 │
│ ┌────────────────────────┐ │
│ │ 边缘函数 │ │
│ │ · / /assets/** 页面 │ │
│ │ · /download 下载 │ │
│ │ · /upload 上传 │ │
│ │ · /ping 延迟 │ │
│ └────────────────────────┘ │
└──────────────────────────────┘
没有源站、没有服务器
零源站部署是这套方案的核心特点:页面、样式、脚本和三个测速端点全部由边缘函数直接返回,全程不回源。这意味着:
- 没有服务器要运维 —— 不需要 ECS、不需要对象存储、不需要负载均衡;
- 没有源站故障面 —— 从根上消除了「源站不可达」这类故障(传统 CDN 架构最常见的 5xx 来源之一);
- 天然就近 —— 用户在哪儿,测速端点就在哪儿;
- 成本极低 —— 按边缘函数请求数与流量计费,闲置时几乎不花钱。
三个端点都极其简单:
| 端点 | 方法 | 行为 |
|---|---|---|
/download?size=<bytes> |
GET | 边缘节点实时生成指定大小的不可压缩数据流(单次上限 256MB) |
/upload |
POST | 读取请求体后立即丢弃,返回收到的字节数 |
/ping |
GET | 返回 JSON:客户端 IP、地理/运营商、边缘节点标识 |
项目同时保留了另外两种部署形态,可按环境选择:
| 形态 | 下行 | 上行 | 延迟 | 适用场景 |
|---|---|---|---|---|
| 边缘函数 + 零源站(推荐) | ✅ | ✅ | ✅ | 单域名、无服务器,最省事也最稳 |
| 边缘函数 + 外部源站 | ✅ | ✅ | ✅ | 静态资源已托管在 Pages / COS / 自建服务器 |
| 纯静态 CDN | ✅ | ❌ | ✅ | 完全不能跑函数时的降级方案(无法测上行) |
详细部署步骤见 部署指南.md。
六、隐私与合规
- 上行测试数据在边缘节点读完即丢弃:不落盘、不记录、不转发任何第三方。
- 测速结果不上传:历史记录只存在用户自己浏览器的
localStorage里,清除浏览器数据即消失。 - 无第三方统计、无广告 SDK、无 Cookie 追踪。
- 测试会产生真实流量(单次约数十至数百 MB),页面页脚的免责声明对此有明确提示。
七、典型使用场景
- 运营商/宽带服务商:给装维人员和用户一个自助带宽自查入口,作为投诉预处理的第一道工具。
- 企业 IT / 网管:分支机构、居家办公、SD-WAN 链路的质量验收与日常巡检。
- IDC / 云服务商:向客户展示接入链路质量,配合工单排查。
- 边缘计算 / CDN 选型:对比不同厂商、不同地域 PoP 的实际接入表现。
- 个人用户:判断「网速慢」到底出在哪一段 —— 是无线信号、是局域网占用,还是运营商链路。
八、快速上手
对使用者:打开 https://speed.satelc.com → 点击「开始测速」→ 约 20 秒后查看结果。需要留档就点「导出报告」。
对部署方:
npm run dev # 本地起服务,http://127.0.0.1:8787
npm run build:standalone # 生成零源站版边缘函数
npm run check:standalone # 本地验证(不部署就能验证)
npm run check -- https://你的域名 # 上线后端点冒烟
npm run check:i18n # 双语与导出功能验证
npm run check:browser # 无头 Chrome 跑完整测速
把 edgeone/edge-function-standalone.js 整段粘贴到 EdgeOne 边缘函数编辑器,触发规则设为 HOST 等于 <你的域名>,保存即可 —— 不需要配源站,不需要改 DNS。
九、常见问题
Q:测出来的速度和运营商说的带宽不一样? A:本工具测的是你的设备到最近边缘节点的链路吞吐,不是运营商承诺的签约带宽,也不等于访问某个具体网站的速度。两者本就不该直接画等号,差异通常来自无线信号、局域网占用、高峰期拥塞或限速策略。
Q:为什么上行普遍比下行低? A:大多数家庭宽带本身就是非对称的(下行远大于上行)。若上行明显低于套餐标称,建议换有线连接、关闭占用上行流量的应用(云同步、P2P、视频通话)后复测。
Q:满载延迟比空闲延迟高很多,正常吗? A:这正是 bufferbloat 的表现 —— 路由器或光猫的队列在满速下载时堆积,导致交互类应用(游戏、语音)变卡。空闲 20ms、满载 200ms+ 是典型症状,可尝试开启路由器的 QoS / SQM。
Q:结果可以存档吗? A:可以。点「导出报告」会下载一份自包含 HTML,可直接查看、打印或存为 PDF,适合作为巡检记录归档。
Q:支持哪些浏览器?
A:需要支持 ReadableStream 与 AbortController 的现代浏览器(Chrome / Edge / Firefox / Safari 近几年的版本均可)。
十、技术规格
| 项目 | 规格 |
|---|---|
| 前端 | 原生 HTML + CSS + ES Modules + Canvas,零依赖、无构建 |
| 整站体积 | 静态资源约 120KB |
| 默认测试时长 | 下行 8s / 上行 8s(可在 4–20s 调整) |
| 并发连接 | 自适应 2–12,也可手动指定 |
| 分块大小 | 自适应 128KB–32MB(上行上限 8MB) |
| 速率单位 | 自适应 Mbps / MB/s / Gbps |
| 延迟采样 | 空闲 8 次串行往返;满载每 420ms 打点 |
| 历史记录 | 本地保留 20 条,界面展示最近 12 条 |
| 语言 | 简体中文 / English |
| 许可 | MIT |
十一、免责声明(摘要)
本工具测得的速率为设备与最近边缘节点之间的链路吞吐,不等同于运营商签约带宽,也不代表访问任意网站或服务的实际体验速度。结果受终端性能、无线信号、局域网占用、运营商策略、代理出口等多种因素影响,仅供参考与自查,不构成服务质量证明、验收依据或法律证据。
测试会产生真实的下行与上行流量(单次可达数十至数百 MB),在按流量计费、漫游或有限流量的网络上请自行评估。本工具按「现状」提供,不保证结果准确、完整或连续可用;不收集、不存储、不共享测速结果。
完整版免责声明与版权声明请见产品页脚,或导出任意一份报告查看。
