web-vitals
web-vitals 数据收集
web-vitals 是一个轻量级的 JavaScript 库,用于收集和报告关键的 Web 性能指标(如 LCP、FID 和 CLS),这些指标对于衡量用户体验至关重要。web-vitals 本身并不会自动将数据发送到任何地方,而是提供了一个灵活的接口,供开发者自行处理和发送这些数据。
数据发送的常见方式
开发者可以选择将 web-vitals 收集到的数据发送到以下几种常见的地方:
-
自定义分析服务器:
- 你可以将数据发送到你自己的服务器进行存储和分析。
-
第三方分 析服务:
- 你可以将数据发送到第三方服务,如 Google Analytics、Mixpanel 等。
-
日志服务:
- 将数据发送到日志服务,如 Loggly、Splunk 等,用于进一步分析和监控。
示例代码
以下是一个使用 web-vitals 库并将数据发送到自定义服务器的示例:
import { getCLS, getFID, getLCP, getTTFB } from 'web-vitals';
// 定义一个函数来处理和发送指标数据
function sendToAnalytics(metric) {
// 你可以在这里将数据发送到你的服务器
const body = JSON.stringify(metric);
const url = 'https://your-analytics-server.com/analytics';
// 使用 fetch API 发送数据
if (navigator.sendBeacon) {
navigator.sendBeacon(url, body);
} else {
fetch(url, {
body,
method: 'POST',
keepalive: true,
headers: {
'Content-Type': 'application/json',
},
});
}
}
// 监听并收集各个 Web Vitals 指标
getCLS(sendToAnalytics);
getFID(sendToAnalytics);
getLCP(sendToAnalytics);
getTTFB(sendToAnalytics);
将数据发送到 Google Analytics
如果你希望将 web-vitals 数据发送到 Google Analytics,可以使用以下示例代码:
import { getCLS, getFID, getLCP, getTTFB } from 'web-vitals';
function sendToGoogleAnalytics({ name, delta, id }) {
gtag('event', name, {
event_category: 'Web Vitals',
event_action: name,
value: Math.round(name === 'CLS' ? delta * 1000 : delta), // 将 CLS 转换为整数
event_label: id, // 使用指标 ID 作为标签
non_interaction: true, // 这确保事件不会影响跳出率
});
}
getCLS(sendToGoogleAnalytics);
getFID(sendToGoogleAnalytics);
getLCP(sendToGoogleAnalytics);
getTTFB(sendToGoogleAnalytics);
结论
web-vitals 提供了灵活的接口,允许开发者自行处理和发送性能指标数据。你可以根据需求选择将数据发送到自定义服务器、第三方分析服务或日志服务。上述示例展示了如何将数据发送到自定义服务器 和 Google Analytics。根据你的具体需求,可以进一步自定义数据处理和发送逻辑。
web-vitals 接入开源数据分析器
有许多开源的分析工具和平台可以帮助你处理和分析 web-vitals 数据。以下是一些常见的开源分析器和平台:
1. Prometheus + Grafana
Prometheus 是一个开源的系统监控和警报工具,Grafana 则是一个开源的监控和可视化平台。你可以使用 Prometheus 来收集 web-vitals 数据,并使用 Grafana 来可视化这些数据。
示例配置
-
Prometheus 配置:
- 首先,你需要运行一个 Prometheus 服务器,并配置一个抓取目标。
scrape_configs:
- job_name: 'web-vitals'
static_configs:
- targets: ['localhost:9090'] -
将
web-vitals数据发送到 Prometheus:- 使用
fetch或axios将web-vitals数据发送到 Prometheus。
import { getCLS, getFID, getLCP, getTTFB } from 'web-vitals';
function sendToPrometheus(metric) {
const body = JSON.stringify(metric);
const url = 'http://localhost:9090/metrics';
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body,
});
}
getCLS(sendToPrometheus);
getFID(sendToPrometheus);
getLCP(sendToPrometheus);
getTTFB(sendToPrometheus); - 使用
-
Grafana 配置:
- 在 Grafana 中添加 Prometheus 数据源,并创建仪表盘来可视化
web-vitals数据。
- 在 Grafana 中添加 Prometheus 数据源,并创建仪表盘来可视化
2. Elastic Stack (ELK Stack)
Elastic Stack 包括 Elasticsearch、Logstash 和 Kibana。你可以使用它来收集、存储和可视化 web-vitals 数据。
示例配置
-
Logstash 配置:
- 配置 Logstash 来接收
web-vitals数据并将其发送到 Elasticsearch。
input {
http {
port => 5044
}
}
filter {
json {
source => "message"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "web-vitals-%{+YYYY.MM.dd}"
}
} - 配置 Logstash 来接收
-
将
web-vitals数据发送到 Logstash:- 使用
fetch或axios将web-vitals数据发送到 Logstash。
import { getCLS, getFID, getLCP, getTTFB } from 'web-vitals';
function sendToLogstash(metric) {
const body = JSON.stringify(metric);
const url = 'http://localhost:5044';
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body,
});
}
getCLS(sendToLogstash);
getFID(sendToLogstash);
getLCP(sendToLogstash);
getTTFB(sendToLogstash); - 使用
-
Kibana 配置:
- 在 Kibana 中配置 Elasticsearch 数据源,并创建仪表盘来可视化
web-vitals数据。
- 在 Kibana 中配置 Elasticsearch 数据源,并创建仪表盘来可视化
3. OpenTelemetry
OpenTelemetry 是一个开源的分布式跟踪和度量标准,你可以使用它来收集和导出 web-vitals 数据。
示例配置
-
安装 OpenTelemetry:
- 安装 OpenTelemetry JavaScript SDK。
npm install @opentelemetry/api @opentelemetry/sdk-trace-web @opentelemetry/exporter-collector -
配置 OpenTelemetry:
- 配置 OpenTelemetry 来收集
web-vitals数据并将其发送到一个收集器。
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
import { CollectorTraceExporter } from '@opentelemetry/exporter-collector';
import { SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
import { getCLS, getFID, getLCP, getTTFB } from 'web-vitals';
const provider = new WebTracerProvider();
const exporter = new CollectorTraceExporter({
url: 'http://localhost:55681/v1/trace',
});
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
provider.register();
function sendToOpenTelemetry(metric) {
const tracer = provider.getTracer('web-vitals');
const span = tracer.startSpan(metric.name);
span.setAttribute('value', metric.value);
span.end();
}
getCLS(sendToOpenTelemetry);
getFID(sendToOpenTelemetry);
getLCP(sendToOpenTelemetry);
getTTFB(sendToOpenTelemetry); - 配置 OpenTelemetry 来收集
结论
以上介绍了几种常见 的开源分析工具和平台,你可以根据实际需求选择合适的方案来收集和分析 web-vitals 数据。无论是 Prometheus + Grafana、Elastic Stack 还是 OpenTelemetry,都可以帮助你实现对 Web 性能指标的监控和可视化。