CrUX API 可让您以低延迟访问页面和来源粒度的汇总真实用户体验数据。
常见用例
借助 CrUX API,您可以查询特定 URI 的用户体验指标,例如“获取 https://example.com 来源的指标”。
CrUX API 密钥
使用 CrUX API 需要为 Chrome UX Report API 使用预配 Google Cloud API 密钥。
获取和使用 API 密钥
获取密钥或者在“凭据”页面中创建一个。
在您获得 API 密钥后,您的应用便可在所有请求网址后附加查询参数 key=yourAPIKey。
API 密钥可以安全地嵌入网址中;不需要进行任何编码。
请参阅示例查询。
数据模型
本部分详细介绍了请求和响应中的数据结构。
录制
关于网页或网站的离散信息。一条记录可以包含特定于某个标识符和特定维度组合的数据。一条记录可以包含一个或多个指标的数据。
标识符
标识符指定应查找哪些记录。在 CrUX 中,这些标识符是网页和网站。
来源
如果标识符是源,则该源中所有网页的所有数据都会汇总在一起。例如,假设 http://www.example.com 来源具有此站点地图所列出的网页:
http://www.example.com/
http://www.example.com/foo.html
http://www.example.com/bar.html
这意味着,在查询 Chrome 用户体验报告时,如果将源设置为 http://www.example.com,系统会返回 http://www.example.com/、http://www.example.com/foo.html 和 http://www.example.com/bar.html 的数据,并将其汇总在一起,因为这些都是该源下的网页。
网址
如果标识符是网址,则系统只会返回该特定网址的数据。再次查看 http://www.example.com 来源站点地图:
http://www.example.com/
http://www.example.com/foo.html
http://www.example.com/bar.html
如果标识符设置为值为 http://www.example.com/foo.html 的网址,则系统只会返回该网页的数据。
维度
维度用于标识记录所汇总到的特定数据组,例如,PHONE 的设备类型表示记录包含有关在移动设备上发生的加载的信息。每个维度都有一定数量的值,如果未指定某个维度,则意味着该维度会汇总所有值。例如,如果未指定设备规格,则表示记录包含有关在任何设备规格上发生的加载的信息。
设备规格
最终用户用于导航到网页的设备类别。这是一类通用设备,分为PHONE、TABLET和DESKTOP。
指标
我们以统计汇总的形式报告指标,包括直方图、百分位数和分数。
浮点值会四舍五入到小数点后 4 位(请注意,cumulative_layout_shift 指标是编码为字符串的双精度值,因此不被视为浮点值,在字符串中会报告到小数点后 2 位)。
直方图
当指标以直方图表示时,我们会显示该指标在特定范围内的网页加载百分比。
示例指标的三分箱直方图如下所示:
{
"histogram": [
{
"start": 0,
"end": 1000,
"density": 0.3818
},
{
"start": 1000,
"end": 3000,
"density": 0.4991
},
{
"start": 3000,
"density": 0.1192
}
]
}
此数据表明,对于 38.18% 的网页加载,示例指标的测量值介于 0 毫秒和 1,000 毫秒之间。此直方图中不包含指标的单位,在这种情况下,我们将假定为毫秒。
此外,49.91% 的网页加载的指标值介于 1,000 毫秒和 3,000 毫秒之间,11.92% 的网页加载的指标值大于 3,000 毫秒。
百分位
指标还可能包含百分位数,这对于进一步分析非常有用。 我们会报告该指标在给定百分位处的具体指标值。它们基于完整的可用数据集,而不是最终的分箱数据,因此不一定与基于最终分箱直方图的插值百分位数匹配。
{
"percentiles": {
"p75": 2063
}
}
在此示例中,至少 75% 的网页加载测得的指标值为 <= 2063。
分数
分数表示可以采用特定方式标记的网页加载百分比。 在这种情况下,指标值就是这些标签。
例如,form_factors 指标由一个 fractions 对象组成,该对象列出了给定查询所涵盖的外形规格(或设备)的细分:
"form_factors": {
"fractions": {
"desktop": 0.0377,
"tablet": 0.0288,
"phone": 0.9335
}
}
在本例中,3.77% 的网页加载是在桌面设备上测量的,2.88% 是在平板电脑上测量的,93.35% 是在手机上测量的,总计 100%。
指标值类型
| CrUX API 指标名称 | 数据类型 | 公制单位 | 统计汇总 | 文档 |
|---|---|---|---|---|
cumulative_layout_shift |
编码为字符串的双精度浮点数(保留 2 位小数) | 无单位 | 包含三个分箱的直方图,百分位数为 p75 | CLS |
interaction_to_next_paint |
int | 毫秒 | 包含三个分箱的直方图,百分位数为 p75 | INP |
largest_contentful_paint |
int | 毫秒 | 包含三个分箱的直方图,百分位数为 p75 | LCP |
experimental_cumulative_layout_shift_with_softnavs |
编码为字符串的双精度浮点数(保留 2 位小数) | 无单位 | 包含三个分箱的直方图,百分位数为 p75 | 博客 |
experimental_interaction_to_next_paint_with_softnavs |
int | 毫秒 | 包含三个分箱的直方图,百分位数为 p75 | 博客 |
experimental_largest_contentful_paint_with_softnavs |
int | 毫秒 | 包含三个分箱的直方图,百分位数为 p75 | 博客 |
first_contentful_paint |
int | 毫秒 | 包含三个分箱的直方图,百分位数为 p75 | FCP |
experimental_first_contentful_paint_with_softnavs |
int | 毫秒 | 包含三个分箱的直方图,百分位数为 p75 | 博客 |
experimental_time_to_first_byte |
int | 毫秒 | 包含三个分箱的直方图,百分位数为 p75 | TTFB |
form_factors |
4 位小数的双精度浮点数 | 百分比 | 从设备规格到分数的映射 | 设备类型 |
navigation_types |
4 位小数的双精度浮点数 | 百分比 | 从导航类型到分数的映射 | 导航类型 |
experimental_navigation_types_with_softnavs |
4 位小数的双精度浮点数 | 百分比 | 从导航类型到分数的映射 | 博客 |
round_trip_time |
int | 毫秒 | 包含三个分箱的直方图,百分位数为 p75 | RTT 指标 |
largest_contentful_paint_resource_type |
4 位小数的双精度浮点数 | 百分比 | 从导航类型到分数的映射 | LCP 资源类型 |
largest_contentful_paint_image_time_to_first_byte |
int | 毫秒 | 百分位数(含 p75) | LCP 子部分 |
largest_contentful_paint_image_resource_load_delay |
int | 毫秒 | 百分位数(含 p75) | LCP 子部分 |
largest_contentful_paint_image_resource_load_duration |
int | 毫秒 | 百分位数(含 p75) | LCP 子部分 |
largest_contentful_paint_image_element_render_delay |
int | 毫秒 | 百分位数(含 p75) | LCP 子部分 |
experimental_ad_count |
保留 2 位小数的双精度浮点数 | 无单位 | 仅限 p75 | 广告数量 |
experimental_ad_density |
保留 2 位小数的双精度浮点数 | 无单位 | 仅限 p75 | 广告密度 |
experimental_ad_cpu |
int | 毫秒 | 仅限 p75 | 广告权重:CPU |
experimental_ad_kilobytes |
int | KB | 仅限 p75 | 广告权重:广告网络 |
BigQuery 指标名称映射
| CrUX API 指标名称 | BigQuery 指标名称 |
|---|---|
cumulative_layout_shift |
layout_instability.cumulative_layout_shift |
first_contentful_paint |
first_contentful_paint |
interaction_to_next_paint |
interaction_to_next_paint |
largest_contentful_paint |
largest_contentful_paint |
experimental_time_to_first_byte |
experimental.time_to_first_byte |
experimental_cumulative_layout_shift_with_softnavs |
experimental.cumulative_layout_shift_with_softnavs |
experimental_first_contentful_paint_with_softnavs |
n/a |
experimental_interaction_to_next_paint_with_softnavs |
experimental.interaction_to_next_paint_with_softnavs |
experimental_largest_contentful_paint_with_softnavs |
experimental.largest_contentful_paint_with_softnavs |
navigation_types |
navigation_types |
experimental_navigation_types_with_softnavs |
n/a |
form_factors |
无 |
round_trip_time |
round_trip_time |
largest_contentful_paint_resource_type |
无 |
largest_contentful_paint_image_time_to_first_byte |
无 |
largest_contentful_paint_image_resource_load_delay |
无 |
largest_contentful_paint_image_resource_load_duration |
无 |
largest_contentful_paint_image_element_render_delay |
无 |
experimental_ad_count |
n/a |
experimental_ad_density |
n/a |
experimental_ad_cpu |
n/a |
experimental_ad_kilobytes |
n/a |
收集时段
自 2022 年 10 月起,CrUX API 包含一个 collectionPeriod 对象,其中 firstDate 和 endDate 字段表示汇总窗口的开始日期和结束日期。例如:
"collectionPeriod": {
"firstDate": {
"year": 2022,
"month": 9,
"day": 12
},
"lastDate": {
"year": 2022,
"month": 10,
"day": 9
}
}
这样,您就可以更好地了解数据,以及数据是否已在当天更新,或者是否返回与昨天相同的数据。
PageSpeed Insights 中也提供了收集期:
此外,collectionPeriod 将始终显示 28 天,即使数据未涵盖完整的 28 天(例如,如果网页发布时间不到 28 天)。collectionPeriod 是 CrUX 数据的汇总时间段,不一定是数据所代表的时间段。
示例查询
查询通过 POST 请求以 JSON 对象的形式提交到 https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=[YOUR_API_KEY]",查询数据作为 JSON 对象包含在 POST 正文中:
{
"origin": "https://example.com",
"formFactor": "PHONE",
"metrics": [
"largest_contentful_paint",
"experimental_time_to_first_byte"
]
}
例如,您可以使用以下命令行从 curl 调用此工具(将 API_KEY 替换为您的密钥):
curl -s --request POST 'https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"formFactor":"PHONE","origin":"https://www.example.com","metrics":["largest_contentful_paint", "experimental_time_to_first_byte"]}'
通过在查询中传递 url 属性(而非 origin),可以通过 API 获取网页级数据:
{
"url": "https://example.com/page",
"formFactor": "PHONE",
"metrics": [
"largest_contentful_paint",
"experimental_time_to_first_byte"
]
}
如果未设置 metrics 属性,则系统会返回所有可用指标:
cumulative_layout_shiftfirst_contentful_paintinteraction_to_next_paintlargest_contentful_paintexperimental_cumulative_layout_shift_with_softnavsexperimental_first_contentful_paint_with_softnavsexperimental_interaction_to_next_paint_with_softnavsexperimental_largest_contentful_paint_with_softnavsexperimental_navigation_types_with_softnavsexperimental_time_to_first_bytelargest_contentful_paint_resource_typelargest_contentful_paint_image_time_to_first_bytelargest_contentful_paint_image_resource_load_delaylargest_contentful_paint_image_resource_load_durationlargest_contentful_paint_image_element_render_delaynavigation_typesround_trip_timeform_factors(仅在请求中未指定formFactor时报告)experimental_ad_count(仅针对广告指标中包含的网页进行报告)experimental_ad_density(仅针对广告指标中包含的网页进行报告)experimental_ad_cpu(仅针对广告指标中包含的网页进行报告)experimental_ad_kilobytes(仅针对广告指标中包含的网页进行报告)
如果未提供 formFactor 值,则系统会汇总所有设备规格的值。
如需查看更多查询示例,请参阅使用 Chrome 用户体验报告 API。
数据流水线
CrUX 数据集会通过流水线进行处理,以整合、汇总和过滤数据,然后才能通过 API 使用。
滚动平均值
Chrome 用户体验报告中的数据是汇总指标的 28 天滚动平均值。这意味着,Chrome 用户体验报告在任何给定时间显示的数据实际上都是过去 28 天的数据汇总。
这与 BigQuery 上的 CrUX 数据集汇总月度报告的方式类似。
每日更新
数据每天在世界协调时间 (UTC) 04:00 左右更新。更新时间没有服务等级协议;系统会每天尽力运行。
架构
CrUX API 有一个接受 POST HTTP 请求的端点。该 API 会返回一个 record,其中包含一个或多个 metrics,对应于所请求来源或网页的性能数据。
HTTP 请求
POST https://chromeuxreport.googleapis.com/v1/records:queryRecord
网址采用 gRPC 转码语法。
请求正文
请求正文应包含结构如下的数据:
{
"formFactor": enum (FormFactor),
"metrics": [
string
],
// Union field url_pattern can be only one of the following:
"origin": string,
"url": string
// End of list of possible types for union field url_pattern.
}
| 字段 | |
|---|---|
formFactor |
设备规格是一个查询维度,用于指定记录的数据应属于哪种设备类别。 此字段使用值 注意:如果未指定设备规格,系统将返回一条包含所有设备规格汇总数据的特殊记录。 |
metrics[] |
应包含在响应中的指标。如果未指定任何指标,则系统会返回找到的所有指标。 允许的值: |
联合字段 url_。url_pattern 是记录查找的主要标识符。只能是下列其中一项: |
|
origin |
示例: |
url |
示例: |
例如,如需请求 Chrome 开发者文档首页的桌面设备 Largest Contentful Paint 值,请运行以下命令:
{
"url": "https://developer.chrome.com/docs/",
"formFactor": "DESKTOP",
"metrics": [
"largest_contentful_paint"
]
}
响应正文
成功的请求会返回包含 record 对象和 urlNormalizationDetails 的响应,其结构如下:
{
"record": {
"key": {
object (Key)
},
"metrics": [
string: {
object (Metric)
}
]
},
"urlNormalizationDetails": {
object (UrlNormalization)
}
}
例如,对上一个请求中的请求正文的响应可能如下所示:
{
"record": {
"key": {
"formFactor": "DESKTOP",
"url": "https://developer.chrome.com/docs/"
},
"metrics": {
"largest_contentful_paint": {
"histogram": [
{
"start": 0,
"end": 2500,
"density": 0.9815
},
{
"start": 2500,
"end": 4000,
"density": 0.0108
},
{
"start": 4000,
"density": 0.0077
}
],
"percentiles": {
"p75": 651
}
}
},
"collectionPeriod": {
"firstDate": {
"year": 2022,
"month": 9,
"day": 12
},
"lastDate": {
"year": 2022,
"month": 10,
"day": 9
}
}
}
}
键
Key 定义了将此记录标识为唯一记录的所有维度。
{
"formFactor": enum (FormFactor),
// Union field url_pattern can be only one of the following:
"origin": string,
"url": string
// End of list of possible types for union field url_pattern.
}
| 字段 | |
|---|---|
formFactor |
设备类型是指所有用户访问此记录对应网站时所用的设备类别。 如果未指定设备规格,系统将返回所有设备规格的汇总数据。 |
联合字段 url_。网址格式是记录适用的网址。url_ 只能是下列其中一项: |
|
origin |
注意:指定 |
url |
注意:指定 |
指标
metric是一组针对单个网页效果指标(例如 First Contentful Paint)的汇总用户体验数据。它可能包含一系列 bins 形式的 Chrome 实际使用情况摘要直方图、特定百分位数据(例如 p75),也可能包含带标签的分数。
{
"histogram": [
{
object (Bin)
}
],
"percentiles": {
object (Percentiles)
}
}
或
{
"fractions": {
object (Fractions)
}
}
| 字段 | |
|---|---|
histogram[] |
某个指标的用户体验直方图。直方图将至少有一个分箱,并且所有分箱的密度总和约为 1。 |
percentiles |
指标的常见有用百分位数。百分位数的值类型将与为直方图分箱指定的值类型相同。 |
fractions |
此对象包含带标签的分数,这些分数相加约为 1。 分数会四舍五入到小数点后 4 位。 |
分箱
bin 是从开始到结束(如果未指定结束,则从开始到正无穷大)的离散数据部分。
分箱的起始值和结束值以其所代表指标的值类型给出。例如,First Contentful Paint 以毫秒为单位进行测量,并以整数形式公开,因此其指标分箱将使用 int32 作为其开始和结束类型。不过,累积布局偏移是以无单位的小数形式衡量的,并以编码为字符串的小数形式公开,因此其指标分箱将使用字符串作为其值类型。
{
"start": value,
"end": value,
"density": number
}
| 字段 | |
|---|---|
start |
“Start”是数据分箱的起点。 |
end |
“End”是数据分箱的结束值。如果未填充 end,则表示该分箱没有结束时间,并且从 start 到 +inf 均有效。 |
density |
在给定指标下,体验到此分箱值的用户所占的比例。 密度会四舍五入到小数点后 4 位。 |
百分位
Percentiles 包含给定统计百分位数的指标合成值。这些百分位数用于估算一定比例的用户(占总用户数的百分比)所体验到的指标值。
{
"P75": value
}
| 字段 | |
|---|---|
p75 |
75% 的网页加载体验到的给定指标值不高于此值。 |
分数
Fractions 包含带标签的分数,其总和约为 1。每个标签都以某种方式描述网页加载,因此以这种方式表示的指标可以被视为产生不同的值(而非数值),而分数则表示测量特定不同值的频率。
{
"label_1": fraction,
"label_2": fraction,
...
"label_n": fraction
}
与直方图分箱中的密度值非常相似,每个 fraction 都是一个数字 0.0 <= value <= 1.0,它们的总和约为 1.0。
UrlNormalization
表示为对网址进行标准化而采取的标准化操作的对象,旨在提高成功查找的几率。这些是基本、自动的更改,在已知查找提供的 url_pattern 会失败时执行。系统不会处理复杂操作,例如跟踪重定向。
{
"originalUrl": string,
"normalizedUrl": string
}
| 字段 | |
|---|---|
originalUrl |
执行任何标准化操作之前的原始请求网址。 |
normalizedUrl |
执行任何标准化操作后的网址。这是一个有效的用户体验网址,可以合理地进行查找。 |
速率限制
CrUX API 的查询次数上限为每个 Google Cloud 项目每分钟 150 次,此服务免费提供。您可以在 Google Cloud 控制台中查看此限制和当前用量。这一慷慨的配额应该足以满足绝大多数用例的需求,并且无法通过付费来增加配额。