The number of reported reasons a page was not restored from the back/forward cache on a back/forward navigation. 0 when the browser reported no reasons (e.g. non-Chromium browsers).
{
"key": "browser.bfcache.not_restored_reason_count",
"brief": "The number of reported reasons a page was not restored from the back/forward cache on a back/forward navigation. 0 when the browser reported no reasons (e.g. non-Chromium browsers).",
"type": "integer",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"examples": [
2
],
"changelog": [
{
"version": "0.19.0",
"prs": [
513
],
"description": "Added browser.bfcache.not_restored_reason_count attribute"
}
]
}
Whether a back/forward navigation was restored from the browser's back/forward cache (bfcache). 'hit' means the page was restored; 'miss' means it was reloaded.
A browser-reported reason a page was not restored from the back/forward cache on a back/forward navigation, taken from the notRestoredReasons API. Reported per reason (a single miss can have several). Currently Chromium-only.
{
"key": "browser.bfcache.reason",
"brief": "A browser-reported reason a page was not restored from the back/forward cache on a back/forward navigation, taken from the notRestoredReasons API. Reported per reason (a single miss can have several). Currently Chromium-only.",
"type": "string",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"examples": [
"unload-listener",
"websocket",
"idbversionchangeevent",
"response-cache-control-no-store"
],
"changelog": [
{
"version": "0.19.0",
"prs": [
513
],
"description": "Added browser.bfcache.reason attribute"
}
]
}
The identifier of the navigation the measurement belongs to, incremented by the browser for each navigation within a page's lifetime.
Examples13
Additional Context
Sourced from `PerformanceEntry.navigationId`, defined by the Soft Navigations spec. Despite its origin it is not soft-navigation specific: the field is set on the `PerformanceNavigationTiming` entry of a hard navigation too.
The value starts at 1 for the initial page load and increments for each subsequent navigation. It is only unique within a single page lifetime, not globally.
Pairs with `browser.navigation.type`: the type says how the browser arrived at the page, the id says which navigation of that page a measurement belongs to.
Not to be confused with the Navigation API's `NavigationHistoryEntry.id`, which is an opaque string identifying a history entry rather than a counter, and is not interchangeable with this value.
Also distinct from the `router.navigation.*` attributes, which describe the client-side router's own view of a navigation. Those come from the framework, this one comes from the browser, and both can be set on the same span.
{
"key": "browser.navigation.id",
"brief": "The identifier of the navigation the measurement belongs to, incremented by the browser for each navigation within a page's lifetime.",
"type": "integer",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"examples": [
1,
3
],
"additional_context": [
"Sourced from `PerformanceEntry.navigationId`, defined by the Soft Navigations spec. Despite its origin it is not soft-navigation specific: the field is set on the `PerformanceNavigationTiming` entry of a hard navigation too.",
"The value starts at 1 for the initial page load and increments for each subsequent navigation. It is only unique within a single page lifetime, not globally.",
"Pairs with `browser.navigation.type`: the type says how the browser arrived at the page, the id says which navigation of that page a measurement belongs to.",
"Not to be confused with the Navigation API's `NavigationHistoryEntry.id`, which is an opaque string identifying a history entry rather than a counter, and is not interchangeable with this value.",
"Also distinct from the `router.navigation.*` attributes, which describe the client-side router's own view of a navigation. Those come from the framework, this one comes from the browser, and both can be set on the same span."
],
"changelog": [
{
"version": "0.22.0",
"prs": [
634
],
"description": "Added browser.navigation.id attribute"
}
]
}
Mirrors the `navigationType` field reported by the web-vitals library, which combines the Navigation Timing `PerformanceNavigationTiming.type` value with states that API does not cover: back/forward cache restores, prerendering, and soft navigations.
`bfcache` is only set when the page was actually restored from the back/forward cache. A back/forward navigation that missed the cache reports `navigate`. Use the `browser.bfcache.*` attributes to diagnose misses.
`prerender` pages finish painting before activation, so their paint timings are offset by `browser.performance.navigation.activation_start`. Keep them separate when aggregating web vitals.
Not to be confused with `router.navigation.type`, which holds the client-side router's own vocabulary (`link`, `goto`, `router.push`). The two are independent and can both be set on the same span.
{
"key": "browser.navigation.type",
"brief": "The type of navigation the browser performed to arrive at the page the metrics were measured on.",
"type": "string",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"examples": [
"navigate",
"reload",
"prerender",
"bfcache",
"soft-navigation"
],
"additional_context": [
"Mirrors the `navigationType` field reported by the web-vitals library, which combines the Navigation Timing `PerformanceNavigationTiming.type` value with states that API does not cover: back/forward cache restores, prerendering, and soft navigations.",
"`bfcache` is only set when the page was actually restored from the back/forward cache. A back/forward navigation that missed the cache reports `navigate`. Use the `browser.bfcache.*` attributes to diagnose misses.",
"`prerender` pages finish painting before activation, so their paint timings are offset by `browser.performance.navigation.activation_start`. Keep them separate when aggregating web vitals.",
"Not to be confused with `router.navigation.type`, which holds the client-side router's own vocabulary (`link`, `goto`, `router.push`). The two are independent and can both be set on the same span."
],
"changelog": [
{
"version": "0.22.0",
"prs": [
600
],
"description": "Added browser.navigation.type attribute"
}
]
}
{
"key": "browser.web_vital.fcp.value",
"brief": "The time it takes for the browser to render the first piece of meaningful content on the screen",
"type": "double",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": 547.6951,
"alias": [
"fcp"
],
"changelog": [
{
"version": "0.5.0",
"prs": [
235
]
}
]
}
{
"key": "browser.web_vital.fp.value",
"brief": "The time in milliseconds it takes for the browser to render the first pixel on the screen",
"type": "double",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": 477.1926,
"alias": [
"fp"
],
"changelog": [
{
"version": "0.5.0",
"prs": [
235
]
}
]
}
{
"key": "browser.web_vital.lcp.id",
"brief": "The id of the dom element responsible for the largest contentful paint",
"type": "string",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": "#gero",
"alias": [
"lcp.id"
],
"changelog": [
{
"version": "0.5.0",
"prs": [
233
]
}
]
}
{
"key": "browser.web_vital.lcp.load_time",
"brief": "The time it took for the LCP element to be loaded",
"type": "integer",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": 1402,
"alias": [
"lcp.loadTime"
],
"changelog": [
{
"version": "0.5.0",
"prs": [
233
]
}
]
}
{
"key": "browser.web_vital.lcp.render_time",
"brief": "The time it took for the LCP element to be rendered",
"type": "integer",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": 1685,
"alias": [
"lcp.renderTime"
],
"changelog": [
{
"version": "0.5.0",
"prs": [
233
]
}
]
}
{
"key": "browser.web_vital.ttfb.request_time",
"brief": "The time it takes for the server to process the initial request and send the first byte of a response to the user's browser",
"type": "double",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": 1554.5814,
"alias": [
"ttfb.requestTime"
],
"changelog": [
{
"version": "0.5.0",
"prs": [
235
]
}
]
}
{
"key": "browser.web_vital.ttfb.value",
"brief": "The value of the recorded Time To First Byte (TTFB) web vital in Milliseconds",
"type": "double",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": 194.3322,
"alias": [
"ttfb"
],
"changelog": [
{
"version": "0.5.0",
"prs": [
235
]
}
]
}