-
Notifications
You must be signed in to change notification settings - Fork 22.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add finalResponseHeadersStart docs (#37740)
* Update TTFB definition
- Loading branch information
1 parent
9070ad7
commit db12ba7
Showing
5 changed files
with
123 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
103 changes: 103 additions & 0 deletions
103
files/en-us/web/api/performanceresourcetiming/finalresponseheadersstart/index.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
--- | ||
title: "PerformanceResourceTiming: finalResponseHeadersStart property" | ||
short-title: finalResponseHeadersStart | ||
slug: Web/API/PerformanceResourceTiming/finalResponseHeadersStart | ||
page-type: web-api-instance-property | ||
status: | ||
- experimental | ||
browser-compat: api.PerformanceResourceTiming.finalResponseHeadersStart | ||
--- | ||
|
||
{{APIRef("Performance API")}}{{AvailableInWorkers}}{{SeeCompatTable}} | ||
|
||
The **`finalResponseHeadersStart`** read-only property returns a {{domxref("DOMHighResTimeStamp","timestamp")}} immediately after the browser receives the first byte of the final document response (for example, 200 OK) from the server. | ||
|
||
This differs from **`{{domxref("PerformanceResourceTiming.requestStart", "requestStart")}}`** (which may also be represented as **`{{domxref("PerformanceResourceTiming.firstInterimResponseStart", "firstInterimResponseStart")}}`**), as this starts from the first bytes of any response including interim responses (for example, 103 Early Hints) with the final response coming potentially much later. | ||
|
||
When there are no interim responses, `requestStart` is the same as `finalResponseHeadersStart` and `firstInterimResponseStart` is 0. | ||
|
||
There is no _end_ property for `finalResponseHeadersStart`. | ||
|
||
## Value | ||
|
||
The `finalResponseHeadersStart` property can have the following values: | ||
|
||
- A {{domxref("DOMHighResTimeStamp")}} immediately after the browser receives the first bytes of the final response from the server. | ||
- `0` if the resource is a cross-origin request and no {{HTTPHeader("Timing-Allow-Origin")}} HTTP response header is used. | ||
|
||
## Examples | ||
|
||
### Measuring request time | ||
|
||
The `finalResponseHeadersStart` and {{domxref("PerformanceResourceTiming.requestStart", "requestStart")}} properties can be used to measure how long it takes for the browser to start receive the final response after the sending the request. | ||
|
||
```js | ||
const request = entry.finalResponseHeadersStart - entry.requestStart; | ||
``` | ||
|
||
The following example uses a {{domxref("PerformanceObserver")}} to notify of new `resource` performance entries as they are recorded in the browser's performance timeline. The `buffered` option is used for accessing entries from before the observer creation. | ||
|
||
```js | ||
const observer = new PerformanceObserver((list) => { | ||
list.getEntries().forEach((entry) => { | ||
const request = entry.finalResponseHeadersStart - entry.requestStart; | ||
if (request > 0) { | ||
console.log(`${entry.name}: final response time: ${request}ms`); | ||
} | ||
}); | ||
}); | ||
|
||
observer.observe({ type: "resource", buffered: true }); | ||
``` | ||
|
||
The following example uses {{domxref("Performance.getEntriesByType()")}}, which only shows `resource` performance entries present in the browser's performance timeline at the time you call the method. | ||
|
||
```js | ||
const resources = performance.getEntriesByType("resource"); | ||
resources.forEach((entry) => { | ||
const request = entry.finalResponseHeadersStart - entry.requestStart; | ||
if (request > 0) { | ||
console.log(`${entry.name}: final response time: ${request}ms`); | ||
} | ||
}); | ||
``` | ||
|
||
The following example shows how to measure the time between the first and final response headers. | ||
|
||
```js | ||
const observer = new PerformanceObserver((list) => { | ||
list.getEntries().forEach((entry) => { | ||
const diff = entry.finalResponseHeadersStart - entry.responseStart; | ||
if ((entry.finalResponseHeadersStart > 0) & (diff > 0)) { | ||
console.log( | ||
`${entry.name}: time between first and final response start: ${diff}ms`, | ||
); | ||
} | ||
}); | ||
}); | ||
|
||
observer.observe({ type: "resource", buffered: true }); | ||
``` | ||
|
||
### Cross-origin timing information | ||
|
||
If the value of the `finalResponseHeadersStart` property is `0`, the resource might be a cross-origin request. To allow seeing cross-origin timing information, the {{HTTPHeader("Timing-Allow-Origin")}} HTTP response header needs to be set. | ||
|
||
For example, to allow `https://developer.mozilla.org` to see timing resources, the cross-origin resource should send: | ||
|
||
```http | ||
Timing-Allow-Origin: https://developer.mozilla.org | ||
``` | ||
|
||
## Specifications | ||
|
||
{{Specifications}} | ||
|
||
## Browser compatibility | ||
|
||
{{Compat}} | ||
|
||
## See also | ||
|
||
- {{HTTPHeader("Timing-Allow-Origin")}} | ||
- {{domxref("PerformanceResourceTiming.firstInterimResponseStart", "firstInterimResponseStart")}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters