SpeedCurve
企业级 Web 性能监控平台,将 WebPageTest 合成测试引擎、Lighthouse 审计和真实用户监控(RUM)整合到统一的仪表板中,提供持续性能追踪、预算告警和部署关联分析。
SpeedCurve 是专注于前端性能监控的企业级 SaaS 平台,将 WebPageTest 合成测试、Lighthouse 审计和 RUM 数据统一到一个仪表板中,支持性能预算、部署关联和竞品对标分析,被 Zillow、BBC、GOV.UK 等知名企业采用。
SpeedCurve
企业级 Web 性能监控平台,将 WebPageTest 合成测试引擎、Lighthouse 审计和真实用户监控(RUM)整合到统一的仪表板中,提供持续性能追踪、预算告警和部署关联分析。
技术简介说明
SpeedCurve 是一个专注于前端性能监控的企业级 SaaS 平台,由 Tammy Everts 和 Steve Souders 于 2014 年创立。它的核心理念是:性能监控不应该是偶发的测试行为,而应该是持续的、与业务指标关联的、融入开发流程的工程实践。SpeedCurve 将 WebPageTest 的合成测试能力、Lighthouse 审计和真实用户监控(RUM)数据统一到一个可视化仪表板中,让团队能够持续追踪性能变化、设置预算告警、关联部署事件,并进行竞品对标分析。
2025 年 11 月,移动应用监控平台 Embrace 宣布收购 SpeedCurve,将其纳入移动和 Web 全栈性能监控生态。这一收购使 SpeedCurve 从独立工具转型为 Embrace 数字体验监控平台的前端性能组件,但其核心功能和独立产品形态仍然保持。
SpeedCurve 的独特价值在于它的**"性能文化"方法论**——不仅提供技术工具,还通过性能预算、团队仪表板、部署关联等功能推动组织层面的性能意识。它被 Zillow、BBC、GOV.UK、Trivago 等知名企业采用,是前端性能监控领域的标杆产品之一。
基本信息
- 官网:https://www.speedcurve.com/
- 文档中心:https://support.speedcurve.com/
- GitHub:https://github.com/SpeedCurve-Metrics
- License:商业 SaaS(闭源)
- 最新版本:持续更新(SaaS)
- 主要维护者/公司:Embrace(2025 年 11 月收购 SpeedCurve)
- 创始团队:Tammy Everts、Steve Souders
- 知名客户:Zillow、BBC、GOV.UK、Trivago、Expedia 等
快速上手
安装
SpeedCurve 是 SaaS 平台,无需安装软件。注册后通过 Web 界面配置监控。
注册与初始设置
# 1. 注册账号
# 访问 https://www.speedcurve.com/ 注册
# 2. 安装 CLI 工具(可选,用于 CI/CD 集成)
npm install -g speedcurve
# 3. 安装 RUM 脚本(浏览器端)
npm install speedcurve-rum
# 或通过 CDN 引入RUM 脚本安装
<!-- 在 <head> 中尽早添加 RUM 脚本 -->
<script>
!function(t,e){
var s=t.createElement(e);s.async=!0;
s.src="https://cdn.speedcurve.com/js/lux.js?id=YOUR_SITE_ID";
var r=t.getElementsByTagName(e)[0];r.parentNode.insertBefore(s,r);
}(document,"script");
</script>基础配置
合成测试配置
在 SpeedCurve 仪表板中配置:
- 添加 URL:输入需要监控的页面 URL
- 选择测试节点:选择测试位置(全球多节点)和浏览器
- 设置频率:配置测试频率(每小时、每天等)
- 配置网络条件:选择连接类型(Cable、4G、3G 等)
- 设置性能预算:定义 Speed Index、LCP、CLS 等指标的阈值
.speedcurve.json 配置
{
"auth": "YOUR_API_KEY",
"urls": [
{
"url": "https://example.com",
"label": "Homepage",
"note": "Main landing page"
},
{
"url": "https://example.com/products",
"label": "Products",
"note": "Product listing page"
}
],
"scripts": [
{
"name": "Login Flow",
"script": "navigate\thttps://example.com/login\nsetValue\tname=username\ttestuser\nsetValue\tname=password\ttestpass\nsubmitForm\tname=loginForm\nwaitForComplete\n"
}
]
}最小示例
触发合成测试
// 使用 SpeedCurve Node.js API
import SpeedCurve from 'speedcurve';
const client = new SpeedCurve('YOUR_API_KEY');
// 触发所有 URL 的合成测试
async function runSyntheticTests() {
const deploys = await client.deploys.create({
siteId: 'YOUR_SITE_ID',
note: 'v2.5.0 deployment',
});
console.log('Test triggered:', deploys.deployId);
console.log('Dashboard:', deploys.dashboardUrl);
}
runSyntheticTests();CLI 触发测试
# 使用 CLI 触发测试
speedcurve run --site YOUR_SITE_ID --auth YOUR_API_KEY
# 标记部署
speedcurve deploy --site YOUR_SITE_ID --auth YOUR_API_KEY --note "v2.5.0"
# 查看结果
speedcurve status --site YOUR_SITE_ID --auth YOUR_API_KEYRUM 集成
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
<!-- SpeedCurve RUM 脚本 -->
<script>
!function(t,e){
var s=t.createElement(e);s.async=!0;
s.src="https://cdn.speedcurve.com/js/lux.js?id=YOUR_SITE_ID";
var r=t.getElementsByTagName(e)[0];r.parentNode.insertBefore(s,r);
}(document,"script");
</script>
<!-- 可选:添加自定义标记 -->
<script>
// 标记自定义指标
window.lux && window.lux.sendMetric('custom-checkout-time', 1234);
// 标记 SPA 导航
window.lux && window.lux.navigate('https://example.com/products');
</script>
</head>
<body>
<!-- 页面内容 -->
</body>
</html>核心概念与架构
监控架构
SpeedCurve 监控架构
│
├── 合成测试(Synthetic Monitoring)
│ ├── 基于 WebPageTest 引擎
│ ├── 全球测试节点(多地区)
│ ├── 多浏览器(Chrome、Firefox)
│ ├── 自定义网络条件
│ └── 定期自动运行
│
├── 真实用户监控(RUM)
│ ├── 浏览器端 JavaScript 脚本
│ ├── 采集真实用户性能数据
│ ├── Core Web Vitals 测量
│ ├── SPA 导航支持
│ └── 自定义标记
│
├── Lighthouse 审计
│ ├── 每次合成测试自动运行
│ ├── 性能、无障碍、SEO、最佳实践评分
│ └── 审计结果与历史趋势关联
│
├── 仪表板与分析
│ ├── 性能趋势图
│ ├── 性能预算状态
│ ├── 部署关联视图
│ ├── 竞品对标
│ └── 团队共享
│
└── 告警与集成
├── 性能预算告警(Email、Slack)
├── 部署 API(CI/CD 集成)
└── Webhook 通知
双数据源模型
| 数据源 | 合成测试 | 真实用户监控 |
|---|---|---|
| 性质 | 受控环境、可复现 | 真实用户、不可控 |
| 用途 | 趋势监控、预算验证 | 真实体验、业务关联 |
| 频率 | 定期(每小时/每天) | 持续(每次页面加载) |
| 覆盖 | 选定的关键 URL | 所有用户访问的页面 |
| 指标 | Speed Index、LCP、TTFB 等 | LCP、INP、CLS、FCP |
| 设备 | 指定的测试设备 | 用户真实设备 |
| 网络 | 指定的网络条件 | 用户真实网络 |
性能预算体系
SpeedCurve 的性能预算体系包含三个层次:
- 页面预算(Page Budget):为每个 URL 设定关键指标阈值
- 站点预算(Site Budget):为整个站点设定整体性能目标
- 竞品对标(Competitive Benchmark):与竞品网站进行性能对比
预算指标包括:
- Speed Index:页面视觉渲染速度
- Largest Contentful Paint (LCP):最大内容绘制
- Cumulative Layout Shift (CLS):累积布局偏移
- Time to First Byte (TTFB):首字节时间
- Total Blocking Time (TBT):总阻塞时间
- Lighthouse 分数:性能、无障碍、SEO 等评分
核心特性
- 🔬 合成测试:基于 WebPageTest 引擎,全球多节点定期测试,提供可复现的性能趋势
- 📊 真实用户监控:采集真实用户的 Core Web Vitals 数据,反映实际体验
- 🎯 Lighthouse 集成:每次合成测试自动运行 Lighthouse 审计,追踪评分趋势
- 📈 性能趋势图:可视化展示性能指标的历史变化,支持多 URL 对比
- ⚠️ 预算告警:当性能指标超出预算时自动发送告警(Email、Slack、Webhook)
- 🚀 部署关联:通过 Deploy API 将性能变化与代码部署关联,快速定位回归
- 🏁 竞品对标:将竞品网站加入监控,进行跨站点性能对比
- 📱 SPA 支持:RUM 脚本支持单页应用的客户端导航测量
- 🎬 瀑布图与电影条:提供详细的 HTTP 请求瀑布图和帧级可视化
- 👥 团队协作:无限团队成员和访客(所有计划),支持权限管理
- 🔗 CI/CD 集成:CLI 工具、REST API 和 GitHub Actions 支持
- 📊 自定义仪表板:创建面向不同受众的性能仪表板(开发团队、管理层等)
生态图
SpeedCurve 生态系统
│
├── 核心平台
│ ├── SpeedCurve Web 仪表板
│ ├── 合成测试引擎(WebPageTest)
│ ├── RUM 采集脚本
│ └── Lighthouse 审计
│
├── API 与 SDK
│ ├── REST API(测试管理、结果查询)
│ ├── Node.js SDK(speedcurve)
│ ├── CLI 工具(speedcurve-cli)
│ ├── Deploy API(部署标记)
│ └── RUM JavaScript SDK
│
├── CI/CD 集成
│ ├── GitHub Actions(run-speedcurve-tests)
│ ├── speedcurve-deploy(npm 包)
│ ├── CLI 部署标记
│ └── Webhook 通知
│
├── 告警通道
│ ├── Email 告警
│ ├── Slack 集成
│ ├── Webhook(自定义集成)
│ └── PagerDuty(企业版)
│
└── 关联产品
├── WebPageTest(底层测试引擎)
├── Lighthouse(审计引擎)
├── Chrome UX Report(CrUX 数据参考)
└── Embrace(母公司,移动监控)
适用场景
- 📈 持续性能监控:对关键页面进行定期合成测试,追踪性能趋势和退化
- 🏗️ 部署性能守门:通过 Deploy API 在 CI/CD 流水线中标记部署,关联性能变化
- 📊 性能预算管理:设定预算阈值,超出时自动告警,推动性能优化
- 🏁 竞品对标分析:将竞品网站加入监控,量化自身与竞品的性能差距
- 👁️ 真实体验监控:通过 RUM 采集真实用户的 Core Web Vitals 数据
- 📉 性能文化推广:使用团队仪表板向管理层展示性能与业务指标的关联
- 🔄 SPA 性能追踪:监控单页应用客户端导航的性能表现
开发与工程化
CI/CD 集成
GitHub Actions
# .github/workflows/speedcurve.yml
name: SpeedCurve Performance Test
on:
push:
branches: [main]
jobs:
performance:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Trigger SpeedCurve Test
uses: SpeedCurve-Metrics/run-speedcurve-tests@v1
with:
api-key: ${{ secrets.SPEEDCURVE_API_KEY }}
site-id: ${{ secrets.SPEEDCURVE_SITE_ID }}
note: "Deploy ${{ github.sha }}"
- name: Wait for Results
run: |
# 等待测试完成并检查结果
sleep 300 # 等待 5 分钟
npx speedcurve status \
--site ${{ secrets.SPEEDCURVE_SITE_ID }} \
--auth ${{ secrets.SPEEDCURVE_API_KEY }}部署标记
// 在 CI/CD 中标记部署
import SpeedCurve from 'speedcurve';
const client = new SpeedCurve(process.env.SPEEDCURVE_API_KEY);
async function markDeployment() {
const result = await client.deploys.create({
siteId: process.env.SPEEDCURVE_SITE_ID,
note: `v${process.env.APP_VERSION} - ${process.env.GIT_COMMIT}`,
detail: process.env.GIT_MESSAGE,
});
console.log('Deployment marked:', result.deployId);
console.log('Dashboard:', result.dashboardUrl);
}
markDeployment();CLI 部署标记
# 在 CI 脚本中触发测试和标记部署
#!/bin/bash
# 部署后触发测试
npx speedcurve deploy \
--site $SPEEDCURVE_SITE_ID \
--auth $SPEEDCURVE_API_KEY \
--note "v$APP_VERSION" \
--detail "$GIT_MESSAGE"
# 或使用 npm 脚本
npm run speedcurve:deploy -- --note "v$APP_VERSION"性能预算管理
// 通过 API 获取预算状态
import SpeedCurve from 'speedcurve';
const client = new SpeedCurve(process.env.SPEEDCURVE_API_KEY);
async function checkBudgets() {
const results = await client.results.get({
siteId: process.env.SPEEDCURVE_SITE_ID,
// 获取最新结果
});
const violations = [];
for (const url of results.urls) {
// 检查 Speed Index 预算
if (url.speedIndex > url.budgets?.speedIndex) {
violations.push({
url: url.label,
metric: 'Speed Index',
actual: url.speedIndex,
budget: url.budgets.speedIndex,
});
}
// 检查 LCP 预算
if (url.lcp > url.budgets?.lcp) {
violations.push({
url: url.label,
metric: 'LCP',
actual: url.lcp,
budget: url.budgets.lcp,
});
}
}
if (violations.length > 0) {
console.error('Performance budget violations:');
violations.forEach(v => {
console.error(` ${v.url}: ${v.metric} ${v.actual} > ${v.budget}`);
});
process.exit(1);
}
}
checkBudgets();Webhook 告警集成
// 自建 Webhook 接收器
import express from 'express';
const app = express();
app.use(express.json());
app.post('/webhook/speedcurve', (req, res) => {
const alert = req.body;
// alert 结构:
// {
// type: 'budget_violation',
// siteId: 'xxx',
// url: { label, url },
// metric: { name, actual, budget },
// timestamp: '...'
// }
switch (alert.type) {
case 'budget_violation':
// 发送 Slack 通知
sendSlackNotification(
`⚠️ Performance budget violation on ${alert.url.label}: ` +
`${alert.metric.name} = ${alert.metric.actual} (budget: ${alert.metric.budget})`
);
break;
case 'test_complete':
// 记录测试结果
logTestResult(alert);
break;
}
res.sendStatus(200);
});
app.listen(3000);性能与安全
性能特点
- 合成测试耗时:单次测试约 1-3 分钟(取决于网络和页面复杂度)
- RUM 脚本体积:~10KB(gzip),异步加载,不影响页面性能
- 数据延迟:合成测试数据实时可用;RUM 数据近实时(< 5 分钟)
- 仪表板加载:仪表板使用缓存和 CDN,加载速度快
安全注意事项
- API Key 应安全存储,不要硬编码或提交到代码仓库
- RUM 脚本通过 HTTPS 加载,数据传输加密
- 支持 SSO(单点登录)进行企业级身份验证(企业版)
- 测试数据存储在 SpeedCurve 服务器上,需评估数据合规要求
- 支持私有代理(Private Agents)进行内部网络测试
数据保留
| 计划 | 合成数据保留 | RUM 数据保留 |
|---|---|---|
| Starter | 13 个月 | 13 个月 |
| Enterprise | 可配置 | 可配置 |
技术对比
| 特性 | SpeedCurve | Calibre | Catchpoint | Datadog RUM | GTmetrix |
|---|---|---|---|---|---|
| 合成测试 | ✅ WebPageTest | ✅ 自有引擎 | ✅ 自有引擎 | ❌ | ✅ |
| RUM | ✅ | ✅ | ✅ | ✅ | ❌ |
| Lighthouse | ✅ 自动集成 | ✅ | ❌ | ❌ | ✅ |
| 全球节点 | ✅ 多节点 | ✅ 多节点 | ✅ 非常多 | ✅ 多 | ✅ 多 |
| 性能预算 | ✅ 核心功能 | ✅ | ✅ | ✅ | ❌ |
| 部署关联 | ✅ Deploy API | ✅ | ✅ | ✅ | ❌ |
| 竞品对标 | ✅ | ✅ | ✅ | ❌ | ❌ |
| CI/CD 集成 | ✅ CLI + API | ✅ CLI | ✅ API | ✅ SDK | ✅ API |
| 瀑布图 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 电影条 | ✅ | ❌ | ✅ | ❌ | ✅ |
| 费用 | $90/月起 | $49/月起 | 企业定价 | 按使用量 | 免费 + 付费 |
| 适用规模 | 中大型团队 | 中小团队 | 大型企业 | 全栈团队 | 小型团队 |
关键差异说明
- SpeedCurve vs Calibre:SpeedCurve 基于 WebPageTest 引擎,功能更全面但价格更高;Calibre 更轻量、更适合中小团队
- SpeedCurve vs Datadog RUM:Datadog 是全栈 APM 平台,RUM 只是其中一个组件;SpeedCurve 更专注于前端性能,提供更深入的 Web 性能分析
- SpeedCurve vs Catchpoint:Catchpoint 是企业级 Internet Performance Monitoring 平台,功能更全面但价格也更高;SpeedCurve 更面向前端开发团队
最佳实践
生产环境建议
- 合理配置测试频率:关键页面每小时测试,次要页面每天测试,平衡成本和覆盖
- 设置多层性能预算:
- 严格预算:用于告警,防止严重退化
- 宽松预算:用于趋势追踪,早期发现问题
- 标记所有部署:每次部署后通过 Deploy API 标记,建立性能-部署关联视图
- 竞品对标:选择 2-3 个主要竞品加入监控,定期评估竞争力
- 结合 RUM 和合成数据:合成数据用于趋势和回归检测,RUM 用于真实用户体验验证
- 团队仪表板:为不同受众创建定制化仪表板(开发团队关注技术指标,管理层关注业务影响)
常见陷阱
- ❌ 忽略合成 vs RUM 差异:合成数据在受控环境中运行,不能直接等同于真实用户体验
- ❌ 预算过于严格:设置不切实际的预算会导致告警疲劳,团队开始忽视告警
- ❌ 不标记部署:不标记部署就失去了性能-部署关联的能力,无法快速定位回归
- ❌ 只监控首页:应该覆盖用户旅程中的关键页面(登录、搜索、商品详情、结算等)
- ❌ 忽视移动端:大部分用户通过移动设备访问,应单独配置移动端测试
推荐模式
- ✅ 开发阶段:本地 Lighthouse 快速迭代
- ✅ 预发布阶段:SpeedCurve 合成测试验证
- ✅ 生产阶段:RUM + 合成持续监控
- ✅ 回归检测:Deploy API 标记 + 预算告警
- ✅ 竞品分析:定期对标竞品性能
技术局限与边界
已知限制
| 局限 | 详细说明 |
|---|---|
| 商业产品 | 闭源 SaaS,无自托管选项 |
| 费用较高 | 起步 $90/月,大规模使用成本显著 |
| 节点有限 | 合成测试节点数量不如 Catchpoint 等专业网络监控平台 |
| 无 iOS 真实设备 | 不提供 iOS Safari 真实设备测试 |
| RUM 浏览器覆盖 | 仅支持 Chrome/Chromium 内核浏览器的完整指标 |
| 学习曲线 | 功能丰富但配置复杂,需要时间学习 |
| Embrace 整合影响 | 被收购后产品方向和定价可能变化 |
| 依赖 WebPageTest | 合成测试依赖 WebPageTest 引擎,受其更新影响 |
不适用场景
- 预算极有限的小型项目(考虑免费 Lighthouse CI + CrUX)
- 需要全栈 APM(后端 + 前端)的团队(考虑 Datadog、New Relic)
- 需要自托管性能监控(考虑 Grafana + Prometheus + WebPageTest 自建)
- 需要 iOS Safari 深度性能测试(考虑 BrowserStack + 手动测试)
学习资源
官方文档
- SpeedCurve 文档中心 - 完整使用指南
- SpeedCurve 功能介绍 - 功能概览
- SpeedCurve 定价 - 定价计划
- SpeedCurve RUM 数据文档 - RUM 配置指南
API 与工具
- SpeedCurve GitHub - 开源工具
- SpeedCurve CLI - CLI 和 Node.js API
- SpeedCurve Node.js API 文档 - API 参考
- speedcurve-deploy (npm) - 部署集成包
- GitHub Action - CI/CD 集成
社区资源
- SpeedCurve Blog - 技术文章和最佳实践
- Speed Matters Newsletter - 性能通讯订阅
- SpeedCurve YouTube - 视频教程
- Tammy Everts (创始人) - 性能文化思想领袖
2026 年现状
最新版本
- 平台版本:持续更新(SaaS)
- RUM SDK:持续优化体积和指标支持
- CLI 工具:持续迭代,支持新的 API 功能
发展趋势
- Embrace 整合:2025 年 11 月被 Embrace 收购后,SpeedCurve 正逐步融入 Embrace 的移动和 Web 全栈监控生态
- AI 驱动分析:各性能监控平台都在引入 AI 辅助分析,SpeedCurve 预计将增强智能告警和优化建议能力
- Core Web Vitals 深化:INP 作为核心指标的权重持续提升,SpeedCurve 将增强 INP 诊断和归因能力
- 性能文化推动:SpeedCurve 继续倡导"性能即文化"的理念,推动组织层面的性能意识
- 竞品对标增强:竞品对标功能持续完善,支持更多行业和分析维度
市场定位
SpeedCurve 在 2026 年的 Web 性能监控市场中定位为前端性能专业平台,区别于全栈 APM(Datadog、New Relic)和免费工具(Lighthouse、PageSpeed Insights)。它的核心价值在于:
- 专注前端性能,提供比通用 APM 更深入的分析
- 将合成测试、RUM、Lighthouse 统一到单一平台
- 强调性能文化,通过预算、仪表板、部署关联推动持续优化
- 被 Embrace 收购后,有望扩展移动 Web(PWA)和原生应用性能监控
定价计划
| 计划 | 价格 | 关键功能 |
|---|---|---|
| Starter | $90/月起 | 无限团队/用户、合成监控、RUM、13 个月数据保留 |
| Enterprise | ~$1,680/月起 | SSO、私有代理、高级支持、可定制保留期 |
| Custom | $15K+/年 | 按使用量定制、专属顾问服务 |