리소스 타이밍

W3C 후보 권고안 초안,

이 문서에 대한 추가 정보
이 버전:
https://www.w3.org/TR/2026/CRD-resource-timing-20260420/
최신 공개 버전:
https://www.w3.org/TR/resource-timing/
에디터스 드래프트:
https://w3c.github.io/resource-timing/
이전 버전:
히스토리:
https://www.w3.org/standards/history/resource-timing/
피드백:
public-web-perf@w3.org 제목 줄에 “[resource-timing] … 메시지 주제 …” 사용 (아카이브)
GitHub
구현 보고서:
https://w3c.github.io/test-results/resource-timing/all.html
에디터:
Yoav Weiss (Shopify)
(Google)
이전 에디터:
Ilya Grigorik (Google)
(Microsoft Corp.)
(Google Inc.)
(Microsoft Corp.)
Zhiheng Wang (Google Inc.)
Anderson Quach (Microsoft Corp.)

초록

이 명세서는 문서 내 리소스에 대한 완전한 타이밍 정보를 웹 애플리케이션이 접근할 수 있도록 하는 인터페이스를 정의합니다.

문서 상태

이 절은 이 문서가 발행된 시점의 상태를 설명합니다. 최신 W3C 간행물 목록과 이 기술 보고서의 최신 개정본은 W3C 표준 및 초안 색인에서 확인할 수 있습니다.

이 문서는 Web Performance Working Group에 의해 Candidate Recommendation Draft로 발행되었으며, Recommendation track을 사용합니다. Candidate Recommendation으로의 발행은 W3C 및 그 회원들의 승인(endorsement)을 의미하지 않습니다. Candidate Recommendation Draft는 작업 그룹이 이후의 Candidate Recommendation Snapshot에 포함하려는 이전 Candidate Recommendation의 변경 사항을 통합한 초안입니다.

이 문서는 초안이며 언제든지 업데이트, 교체 또는 다른 문서로 대체될 수 있습니다. 진행 중인 작업이 아닌 것으로 이 문서를 인용하는 것은 적절하지 않습니다.

GitHub Issues가 이 명세서 논의를 위한 우선적인 수단입니다.

이 문서는 2025년 8월 18일 W3C 프로세스 문서에 의해 관리됩니다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에 의해 작성되었습니다. W3C는 그룹의 산출물과 관련하여 이루어진 모든 특허 공개의 공개 목록을 유지합니다; 해당 페이지에는 특허 공개 방법에 대한 안내도 포함되어 있습니다. 개인이 자신이 보유하고 있고 본인이 필수 청구항(Essential Claim(s))이라고 생각하는 특허에 대해 실제로 알고 있는 경우, 해당 정보는 W3C 특허 정책의 6절에 따라 공개해야 합니다.

1. 소개

사용자 지연(latency)은 웹 애플리케이션의 중요한 품질 벤치마크입니다. 자바스크립트 기반 메커니즘은 애플리케이션 내에서 사용자 지연 측정을 위한 포괄적인 계측을 제공할 수 있지만, 많은 경우에 전체 엔드투엔드 지연 상황을 완전히 제공하지 못합니다. 이 문서는 문서에 있는 리소스와 관련된 완전한 타이밍 정보를 자바스크립트 메커니즘이 수집할 수 있도록 허용하는 PerformanceResourceTiming 인터페이스를 소개합니다. Navigation Timing 2 [NAVIGATION-TIMING-2]는 내비게이션과 연관된 추가적인 타이밍 정보를 제공하기 위해 이 명세를 확장합니다.

예를 들어, 다음 자바스크립트는 리소스를 가져오는 데 걸리는 시간을 간단히 측정하려는 시도를 보여줍니다:

<!doctype html>
<html>
  <head>
  </head>
  <body onload="loadResources()">
    <script>
        function loadResources()
        {
          var start = new Date().getTime();
          var image1 = new Image();
          var resourceTiming = function() {
              var now = new Date().getTime();
              var latency = now - start;
              alert("End to end resource fetch: " + latency);
          };

          image1.onload = resourceTiming;
          image1.src = 'https://www.w3.org/Icons/w3c_main.png';
        }
    </script>
    <img src="https://www.w3.org/Icons/w3c_home.png">
  </body>
</html>

이 스크립트는 리소스를 가져오는 데 걸리는 시간을 측정할 수는 있지만, 다양한 단계에서 소비된 시간을 세분화할 수는 없습니다. 또한, 마크업에 기술된 리소스를 가져오는 데 걸리는 시간을 쉽게 측정할 수 없습니다.

사용자 경험에 대한 완전한 정보를 제공할 필요를 해결하기 위해, 이 문서는 PerformanceResourceTiming 인터페이스를 소개합니다. 이 인터페이스는 자바스크립트 메커니즘이 애플리케이션 내에서 클라이언트 측 완전한 지연 측정을 제공할 수 있게 합니다. 이 인터페이스를 사용하면 이전 예제를 수정하여 사용자가 인지하는 리소스 로드 시간을 측정할 수 있습니다.

다음 스크립트는 페이지 내의 모든 리소스를 가져오는 데 걸리는 시간을 계산합니다. 마크업에 정의된 리소스도 포함됩니다. 이 예제는 이 페이지가 https://www.w3.org에 호스팅된다고 가정합니다. 또한 PerformanceResourceTiming 인터페이스를 사용하여 리소스 가져오기 각 단계에 소요된 시간을 더 세부적으로 측정할 수도 있습니다.

<!doctype html>
<html>
  <head>
  </head>
  <body onload="loadResources()">
    <script>
      function loadResources()
      {
          var image1 = new Image();
          image1.onload = resourceTiming;
          image1.src = 'https://www.w3.org/Icons/w3c_main.png';
      }

      function resourceTiming()
      {
          var resourceList = window.performance.getEntriesByType("resource");
          for (i = 0; i < resourceList.length; i++)
          {
              if (resourceList[i].initiatorType == "img")
              {
                alert("End to end resource fetch: " + (resourceList[i].responseEnd - resourceList[i].startTime));
              }
          }
      }
    </script>
    <img id="image0" src="https://www.w3.org/Icons/w3c_home.png">
  </body>
</html>

2. 용어

"a Foo object"라는 표현은 실제로 인터페이스인 Foo 대신에 때때로 더 정확한 표현인 "인터페이스 Foo를 구현하는 객체" 대신 사용됩니다.

이 문서 전반에서 모든 시간 값은 문서의 내비게이션 시작 시점 이후의 밀리초로 측정됩니다 [HR-TIME]. 예를 들어, 문서의 내비게이션 시작은 시간 0에서 발생합니다.

이 시간의 정의는 High Resolution Time 명세서 [HR-TIME]를 기반으로 하며, Navigation Timing 명세서에서 사용되는 시간 정의와 다릅니다. Navigation Timing에서는 시간이 1970년 1월 1일 자정(UTC) 이후의 밀리초로 측정됩니다.

3. 리소스 타이밍

3.1. 소개

PerformanceResourceTiming 인터페이스는 가져온(fetched) http(s) 리소스의 타이밍 측정을 용이하게 합니다. 예를 들어, 이 인터페이스는 XMLHttpRequest 객체 [XHR], HTML 요소 [HTML]iframe, img, script, object, embedlink (link type이 stylesheet인 경우), SVG 요소 [SVG11]svg 등과 EventSource에 대해 사용 가능합니다.

3.2. PerformanceResourceTiming 인터페이스에 포함된 리소스

이 절은 비규범적입니다.

비-널 클라이언트에 의해 요청(Request)된 리소스는 해당 클라이언트의 Performance TimelinePerformanceResourceTiming 객체로 포함됩니다. 다만 fetching 과정의 일부로 타임라인에서 제외된 경우는 예외입니다. HTTP 캐시에서 검색된 리소스도 PerformanceResourceTiming 객체로 Performance Timeline에 포함됩니다. 가져오기가 시작되었지만 이후 중단된 리소스(예: 네트워크 오류로 인한)는 시작 및 종료 타이밍과 함께 Performance Timeline에 PerformanceResourceTiming 객체로 포함됩니다.

예시:

  • 같은 정규화된(canonical) URL이 두 개의 HTML IMG 요소의 src로 사용되는 경우, 첫 번째 HTML IMG 요소가 시작한 해당 리소스의 가져오기(fetch)PerformanceResourceTiming 객체로 Performance Timeline에 포함됩니다. 사용자 에이전트는 두 번째 IMG 요소에 대해 URL을 재요청하지 않고 첫 번째 IMG 요소를 위해 시작된 기존 다운로드를 대신 사용할 수 있습니다. 이 경우 첫 번째 IMG 요소에 의한 리소스의 가져오기만이 Performance Timeline에 기록될 수 있습니다.
  • HTML IMG 요소의 src 속성이 스크립트로 변경되는 경우, 원래 리소스의 가져오기와 새 URL의 가져오기가 모두 PerformanceResourceTiming 객체로 Performance Timeline에 포함됩니다.
  • 만약 HTML IFRAME 요소가 마크업으로 추가되었으나 src 속성이 지정되지 않았다면, 사용자 에이전트는 해당 IFRAME에 대해 about:blank 문서를 로드할 수 있습니다. 이후 스크립트로 동적으로 src 속성이 변경되면 사용자 에이전트는 IFRAME의 새 URL 리소스를 가져오기할 수 있습니다. 이 경우 새 URL에 대한 가져오기만이 PerformanceResourceTiming 객체로 Performance Timeline에 포함됩니다.
  • 동일한 정규화된 URL에 대해 XMLHTTPRequest가 두 번 생성된 경우, 해당 리소스에 대한 두 번의 가져오기가 모두 PerformanceResourceTiming 객체로 Performance Timeline에 포함됩니다. 이는 두 번째 XMLHttpRequest에 대한 리소스의 가져오기가 첫 번째 XMLHttpRequest에 대해 발행된 다운로드를 재사용할 수 없기 때문입니다.
  • 페이지에 HTML IFRAME 요소가 포함된 경우, 부모 문서의 Performance Timeline에는 오직 IFRAMEsrc 속성으로 요청된 리소스만 포함됩니다. IFRAME 문서가 요청하는 서브리소스는 해당 IFRAME 문서의 Performance Timeline에 포함되며 부모 문서의 Performance Timeline에는 포함되지 않습니다.
  • HTML IMG 요소가 소스로 data: URI를 사용할 경우, 이 리소스는 PerformanceResourceTiming 객체로 Performance Timeline에 포함되지 않습니다. PerformanceResourceTiming 항목은 오직 http(s) 리소스에 대해서만 보고됩니다.
  • 리소스 가져오기가 네트워크 오류(예: DNS, TCP 또는 TLS 오류)로 중단된 경우, 해당 가져오기는 PerformanceResourceTiming 객체로 Performance Timeline에 포함되며 startTime, fetchStart, duration, responseEnd만 설정됩니다.
  • 가져오기가 가져오기 전제 조건(fetch precondition)을 실패(예: 혼합 콘텐츠, CORS 제한, CSP 정책 등)하여 중단된 경우, 해당 리소스는 Performance Timeline에 PerformanceResourceTiming 객체로 포함되지 않습니다.

3.3. PerformanceResourceTiming 인터페이스

[Exposed=(Window,Worker)]
interface PerformanceResourceTiming : PerformanceEntry {
    readonly attribute DOMString initiatorType;
    readonly attribute DOMString deliveryType;
    readonly attribute ByteString nextHopProtocol;
    readonly attribute DOMHighResTimeStamp workerStart;
    readonly attribute DOMHighResTimeStamp redirectStart;
    readonly attribute DOMHighResTimeStamp redirectEnd;
    readonly attribute DOMHighResTimeStamp fetchStart;
    readonly attribute DOMHighResTimeStamp domainLookupStart;
    readonly attribute DOMHighResTimeStamp domainLookupEnd;
    readonly attribute DOMHighResTimeStamp connectStart;
    readonly attribute DOMHighResTimeStamp connectEnd;
    readonly attribute DOMHighResTimeStamp secureConnectionStart;
    readonly attribute DOMHighResTimeStamp requestStart;
    readonly attribute DOMHighResTimeStamp finalResponseHeadersStart;
    readonly attribute DOMHighResTimeStamp firstInterimResponseStart;
    readonly attribute DOMHighResTimeStamp responseStart;
    readonly attribute DOMHighResTimeStamp responseEnd;
    readonly attribute DOMHighResTimeStamp workerRouterEvaluationStart;
    readonly attribute DOMHighResTimeStamp workerCacheLookupStart;
    readonly attribute DOMString workerMatchedRouterSource;
    readonly attribute DOMString workerFinalRouterSource;
    readonly attribute unsigned long long  transferSize;
    readonly attribute unsigned long long  encodedBodySize;
    readonly attribute unsigned long long  decodedBodySize;
    readonly attribute unsigned short responseStatus;
    readonly attribute RenderBlockingStatusType renderBlockingStatus;
    readonly attribute DOMString contentType;
    readonly attribute DOMString contentEncoding;
    [Default] object toJSON();
};

PerformanceResourceTiming 는 연관된 DOMString인 initiator type을 가집니다.

PerformanceResourceTiming 는 연관된 DOMString인 delivery type을 가집니다.

PerformanceResourceTiming 는 연관된 DOMString인 requested URL을 가집니다.

PerformanceResourceTiming 는 연관된 DOMString인 cache mode (빈 문자열, "local", 또는 "validated")을 가집니다.

PerformanceResourceTiming 는 연관된 fetch timing infotiming info를 가집니다.

PerformanceResourceTiming 는 연관된 response body inforesource info를 가집니다.

PerformanceResourceTiming 는 연관된 statusresponse status를 가집니다.

PerformanceResourceTiming 는 연관된 RenderBlockingStatusTyperender-blocking status를 가집니다.

toJSON가 호출되면, 기본 toJSON 단계PerformanceResourceTiming에 대해 실행합니다.

initiatorType 게터 단계는 initiator type을 이 객체(this)에 대해 반환하도록 합니다.

initiatorType은 다음 값 중 하나를 반환합니다:

  • "navigation", 요청이 navigation request인 경우;
  • "body", 요청이 이미 폐기되었지만 본문 요소의 background 속성을 처리한 결과인 경우.
  • "css", 요청이 @import url() 또는 background: url()과 같은 CSS url() 지시문을 처리한 결과인 경우; [CSS-VALUES]

    참고: CSS의 @font-face로 지정된 폰트 리소스에 대한 요청은 CSS 지시문 처리의 결과입니다. 따라서 이 폰트 리소스의 initiatorType"css"입니다.

  • "script", 요청이 어떤 스크립트를 로드한 결과인 경우(고전 스크립트, 모듈 스크립트 또는 Worker).
  • "xmlhttprequest", 요청이 XMLHttpRequest를 처리한 결과인 경우;
  • "font", 요청이 폰트 처리를 통해 발생한 경우. 예를 들어 Incremental Font Transfer가 사용되는 경우 폰트가 후속 리소스를 요청할 수 있습니다. [INCREMENTAL_FONT_TRANSFER]
  • "fetch", 요청이 fetch() 호출의 결과인 경우;
  • "beacon", 요청이 sendBeacon() 호출의 결과인 경우; [BEACON]
  • "video", 요청이 video 요소의 poster 또는 src를 처리한 결과인 경우.
  • "audio", 요청이 audio 요소의 src를 처리한 결과인 경우.
  • "track", 요청이 track 요소의 src를 처리한 결과인 경우.
  • "img", 요청이 img 요소의 src 또는 srcset를 처리한 결과인 경우.
  • "image", 요청이 image 요소를 처리한 결과인 경우. [SVG2]
  • "input", 요청이 input 요소의 type이 이미지 버튼(image)인 경우.
  • "ping", 요청이 a 요소의 ping를 처리한 결과인 경우.
  • "iframe", 요청이 iframesrc를 처리한 결과인 경우.
  • "frame", 요청이 frame를 로드한 결과인 경우.
  • "embed", 요청이 embed 요소의 src를 처리한 결과인 경우.
  • "link", 요청이 link 요소를 처리한 결과인 경우.
  • "object", 요청이 object 요소를 처리한 결과인 경우.
  • "early-hints", 요청이 [EARLY_HINTS] 응답의 Early Hints를 처리한 결과인 경우.
  • "other", 위의 어떤 조건도 해당되지 않는 경우.

initiatorType의 설정은 리소스 타이밍 항목이 보고되는 여러 장소(예: fetch 표준)에서 이루어집니다.

deliveryType 게터 단계는 이 객체(this)에 대한 delivery type을 반환하도록 합니다.

deliveryType은 다음 값 중 하나를 반환합니다:

  • "cache", cache mode가 빈 문자열이 아닌 경우.
  • 위의 어떤 것도 해당되지 않으면 빈 문자열 "".

이는 향후 이 명세의 업데이트에 의해 확장될 예정입니다. 예: 사전 로드된 리소스 소비나 프리페치된 내비게이션 요청 설명 등.

workerStart getter 단계는 가져오기 타임스탬프 변환thistiming info최종 서비스 워커 시작 시간해당 글로벌 객체this에 대해 수행한다. 자세한 내용은 HTTP fetch를 참조.

redirectStart getter 단계는 가져오기 타임스탬프 변환thistiming info리다이렉트 시작 시간해당 글로벌 객체this에 대해 수행한다. 자세한 내용은 HTTP-redirect fetch를 참조.

redirectEnd getter 단계는 가져오기 타임스탬프 변환thistiming info리다이렉트 종료 시간해당 글로벌 객체this에 대해 수행한다. 자세한 내용은 HTTP-redirect fetch를 참조.

fetchStart getter 단계는 가져오기 타임스탬프 변환thistiming info리다이렉트 후 시작 시간해당 글로벌 객체this에 대해 수행한다. 자세한 내용은 HTTP fetch를 참조.

domainLookupStart getter 단계는 가져오기 타임스탬프 변환thistiming info최종 연결 타이밍 정보도메인 조회 시작 시간해당 글로벌 객체this에 대해 수행한다. 자세한 내용은 연결 타이밍 정보 기록를 참조.

domainLookupEnd getter 단계는 가져오기 타임스탬프 변환thistiming info최종 연결 타이밍 정보도메인 조회 종료 시간해당 글로벌 객체this에 대해 수행한다. 자세한 내용은 연결 타이밍 정보 기록를 참조.

connectStart getter 단계는 가져오기 타임스탬프 변환thistiming info최종 연결 타이밍 정보연결 시작 시간해당 글로벌 객체this에 대해 수행한다. 자세한 내용은 연결 타이밍 정보 기록를 참조.

connectEnd getter 단계는 가져오기 타임스탬프 변환thistiming info최종 연결 타이밍 정보연결 종료 시간해당 글로벌 객체this에 대해 수행한다. 자세한 내용은 연결 타이밍 정보 기록를 참조.

secureConnectionStart getter 단계는 가져오기 타임스탬프 변환thistiming info최종 연결 타이밍 정보보안 연결 시작 시간해당 글로벌 객체this에 대해 수행한다. 자세한 내용은 연결 타이밍 정보 기록를 참조.

nextHopProtocol getter 단계는 isomorphic decodethistiming info최종 연결 타이밍 정보ALPN 협상 프로토콜에 대해 수행한다. 자세한 내용은 연결 타이밍 정보 기록를 참조.

Issue 221은 nextHopProtocol 지원을 제거할 것을 제안하는데, 이는 사용자의 네트워크 구성 정보를 노출할 수 있기 때문이다.

requestStart getter 단계는 가져오기 타임스탬프 변환thistiming info최종 네트워크 요청 시작 시간해당 글로벌 객체this에 대해 수행한다. 자세한 내용은 HTTP fetch를 참조.

firstInterimResponseStart getter 단계는 가져오기 타임스탬프 변환thistiming info첫 번째 임시 네트워크 응답 시작 시간해당 글로벌 객체this에 대해 수행한다. 자세한 내용은 HTTP fetch를 참조.

finalResponseHeadersStart getter 단계는 가져오기 타임스탬프 변환thistiming info최종 네트워크 응답 시작 시간해당 글로벌 객체this에 대해 수행한다. 자세한 내용은 HTTP fetch를 참조.

responseStart getter 단계는 thisfirstInterimResponseStart 가 0이 아니면 해당 값을 반환한다; 아니면 thisfinalResponseHeadersStart 값을 반환한다.

responseEnd getter 단계는 가져오기 타임스탬프 변환thistiming info종료 시간해당 글로벌 객체this에 대해 수행한다. 자세한 내용은 fetch를 참조.

encodedBodySize getter 단계는 thisresource info인코딩된 크기를 반환한다.

decodedBodySize getter 단계는 thisresource info디코딩된 크기를 반환한다.

transferSize getter 단계는:

  1. 이 객체(this)의 cache mode가 "local"이면 0을 반환합니다.

  2. 이 객체(this)의 cache mode가 "validated"이면 300을 반환합니다.

  3. 이 객체(this)의 resource infoencoded size에 300을 더한 값을 반환합니다.

    transferSize에 더해지는 상수는 HTTP 헤더의 전체 바이트 크기를 노출하는 대신 사용됩니다. 헤더를 노출하면 특정 쿠키의 존재를 드러낼 수 있기 때문입니다. 자세한 내용은 이 이슈를 참조하십시오.

responseStatus 게터 단계는 이 객체(this)의 response status를 반환하도록 합니다.

responseStatusFetch에서 결정됩니다. 교차 출처의 no-cors 요청의 경우 응답이 opaque filtered response가 되어 0이 됩니다.

contentType 게터 단계는 이 객체(this)의 resource infocontent type을 반환하도록 합니다.

contentEncoding 게터 단계는 이 객체(this)의 resource infocontent encoding을 반환하도록 합니다.

renderBlockingStatus 게터 단계는 이 객체(this)의 timing inforender-blocking이 true이면 blocking을 반환하고; 그렇지 않으면 non-blocking을 반환합니다.

workerRouterEvaluationStart 게터 단계는 이 객체(this)의 timing infoservice worker timing infoworker router evaluation start를 반환하도록 합니다.

workerCacheLookupStart 게터 단계는 이 객체(this)의 timing infoservice worker timing infoworker cache lookup start를 반환하도록 합니다.

workerMatchedRouterSource 게터 단계는 이 객체(this)의 timing infoservice worker timing infoworker matched router source를 반환하도록 합니다.

workerFinalRouterSource 게터 단계는 이 객체(this)의 timing infoservice worker timing infoworker final router source를 반환하도록 합니다.

PerformanceResourceTiming 를 구현하는 사용자 에이전트는 "resource"supportedEntryTypes에 포함해야 합니다. 이를 통해 개발자들은 Resource Timing 지원 여부를 감지할 수 있습니다.

3.3.1. RenderBlockingStatusType 열거형

enum RenderBlockingStatusType {
    "blocking",
    "non-blocking"
};

값의 정의는 다음과 같습니다:

blocking
해당 리소스는 잠재적으로 렌더링을 차단할 수 있습니다.
non-blocking
해당 리소스는 렌더링을 차단하지 않습니다.

3.4. Performance 인터페이스의 확장

사용자 에이전트는 PerformanceResourceTiming 객체로 Performance Timeline에 포함되는 리소스 수를 제한하도록 선택할 수 있습니다. 이 절은 저장되는 PerformanceResourceTiming 객체의 수를 제어하기 위해 Performance 인터페이스를 확장합니다.

권장 최소 PerformanceResourceTiming 객체 수는 250개이며, 사용자 에이전트에 의해 변경될 수 있습니다. setResourceTimingBufferSize는 이 제한 변경을 요청하기 위해 호출될 수 있습니다.

ECMAScript 글로벌 환경은 다음을 가집니다:

  • A resource timing buffer size limit 은 초기값이 250 이상이어야 합니다.
  • A resource timing buffer current size 은 초기값이 0입니다.
  • A resource timing buffer full event pending flag 은 초기값이 false입니다.
  • A resource timing secondary buffer current size 은 초기값이 0입니다.
  • A resource timing secondary bufferPerformanceResourceTiming 객체를 저장하기 위한 보조 버퍼로 초기에는 비어 있습니다.
partial interface Performance {
      undefined clearResourceTimings ();
      undefined setResourceTimingBufferSize (unsigned long maxSize);
      attribute EventHandler onresourcetimingbufferfull;
    };

Performance 인터페이스는 [HR-TIME]에서 정의되어 있습니다.

clearResourceTimings 메서드는 다음 단계를 실행합니다:

  1. Performance entry buffer에 있는 모든 PerformanceResourceTiming 객체를 제거합니다.
  2. resource timing buffer current size를 0으로 설정합니다.

setResourceTimingBufferSize 메서드는 다음 단계를 실행합니다:

  1. resource timing buffer size limit을 maxSize 인수로 설정합니다. maxSize가 현재 resource timing buffer current size보다 작으면, performance entry buffer에서 어떤 PerformanceResourceTiming 객체도 제거되지 않습니다.

onresourcetimingbufferfull 속성은 아래에 설명된 resourcetimingbufferfull 이벤트에 대한 이벤트 핸들러입니다.

리소스 타이밍 엔트리를 추가할 수 있는지 확인하려면, 다음 단계를 실행한다:

  1. 리소스 타이밍 버퍼 현재 크기 리소스 타이밍 버퍼 크기 제한 보다 작으면, true를 반환한다.
  2. false 반환.

PerformanceResourceTiming 엔트리 추가를 위해서 new entry퍼포먼스 엔트리 버퍼에 추가하려면, 다음 단계를 실행한다:

  1. 리소스 타이밍 엔트리를 추가할 수 있는지 가 true를 반환하고, 리소스 타이밍 버퍼 가득참 이벤트 보류 플래그가 false이면, 다음 하위 단계를 실행한다:
    1. new entry퍼포먼스 엔트리 버퍼에 추가한다.
    2. 리소스 타이밍 버퍼 현재 크기를 1 증가시킨다.
    3. Return.
  2. 리소스 타이밍 버퍼 가득참 이벤트 보류 플래그가 false면, 다음 하위 단계를 실행한다:
    1. 리소스 타이밍 버퍼 가득참 이벤트 보류 플래그를 true로 설정한다.
    2. 태스크를 큐에 추가한다, 퍼포먼스 타임라인 태스크 소스에서 버퍼 가득참 이벤트 발생을 실행한다.
  3. new entry리소스 타이밍 세컨더리 버퍼에 추가한다.
  4. 리소스 타이밍 세컨더리 버퍼 현재 크기를 1 증가시킨다.

세컨더리 버퍼 복사를 위해, 다음 단계를 수행한다:

  1. 리소스 타이밍 세컨더리 버퍼가 비어 있지 않고, 리소스 타이밍 엔트리를 추가할 수 있는지 가 true를 반환하면, 다음 하위 단계를 수행한다:
    1. entry를 가장 오래된 PerformanceResourceTiming 으로 한다, 리소스 타이밍 세컨더리 버퍼에서.
    2. entry퍼포먼스 엔트리 버퍼 마지막에 추가한다.
    3. 리소스 타이밍 버퍼 현재 크기를 1 증가시킨다.
    4. entry리소스 타이밍 세컨더리 버퍼에서 제거한다.
    5. 리소스 타이밍 세컨더리 버퍼 현재 크기를 1 감소시킨다.

버퍼 가득참 이벤트 발생을 위해, 다음 단계를 수행한다:

  1. 리소스 타이밍 세컨더리 버퍼가 비어 있지 않으면, 다음 하위 단계를 수행한다:
    1. number of excess entries before리소스 타이밍 세컨더리 버퍼 현재 크기로 한다.
    2. 리소스 타이밍 엔트리를 추가할 수 있는지 가 false면, 이벤트 발생 resourcetimingbufferfull 이름으로, Performance 객체에서 한다.
    3. 세컨더리 버퍼 복사를 실행한다.
    4. number of excess entries after리소스 타이밍 세컨더리 버퍼 현재 크기로 한다.
    5. number of excess entries beforenumber of excess entries after 이하이면, 리소스 타이밍 세컨더리 버퍼의 모든 엔트리를 제거하고, 리소스 타이밍 세컨더리 버퍼 현재 크기를 0으로 설정하고, 이 단계들을 중단한다.
  2. 리소스 타이밍 버퍼 가득참 이벤트 보류 플래그를 false로 설정한다.

    이는 resourcetimingbufferfull 이벤트 핸들러가 버퍼에 공간을 확보한 것보다 많은 리소스를 추가하면, 초과 엔트리가 버퍼에서 삭제될 수 있음을 의미한다. 개발자는 resourcetimingbufferfull 이벤트 핸들러에서 clearResourceTimings를 호출하거나 setResourceTimingBufferSize로 버퍼 크기를 충분히 늘려야 한다.

3.5. 교차 출처 리소스

3.5.1. 소개

Fetch에 자세히 설명된 대로, 교차 출처 리소스에 대한 요청은 PerformanceResourceTiming 객체로 Performance Timeline에 포함됩니다.

만약 교차 출처 리소스에 대해 timing allow check 알고리즘이 실패하면, 항목은 opaque entry가 됩니다. 이러한 항목들은 교차 출처 데이터를 유출하지 않도록 대부분의 속성이 마스킹됩니다. 따라서 opaque entry의 경우 다음 속성들은 항상 0 또는 빈 문자열을 반환합니다: redirectStart, redirectEnd, workerStart, domainLookupStart, domainLookupEnd, connectStart, connectEnd, requestStart, firstInterimResponseStart, finalResponseHeadersStart, responseStart, secureConnectionStart, 및 nextHopProtocol.

일부 속성들(예: contentType, encodedBodySize, 및 decodedBodySize) 는 응답이 CORS-교차 출처일 때 0(또는 contentType의 경우 빈 문자열)로 설정됩니다.

transferSize 는 timing allow check 및 CORS-교차 출처 상태 모두의 영향을 받습니다.

서비스 워커respondWith()을 사용하여 처리한 요청의 경우, 보고되는 타이밍 데이터는 클라이언트와 서비스 워커 간의 상호작용을 반영하며 서비스 워커 자체의 내부 네트워크 활동을 반영하지 않습니다. 예를 들어 서비스 워커는 동일 출처 요청에 대해 교차 출처 응답을 반환하거나 그 반대로 할 수 있으며, 캐시되거나 합성된 응답을 반환할 수 있습니다. 따라서 서비스 워커에서 전달된 리소스는 리소스 가져오기에 대한 전체 상황을 제공하지 않으며 timing allow check를 거치지 않습니다. 이러한 가져오기들에 대한 전체 정보를 얻으려면 서비스 워커의 자체 performance timeline을 검사해야 합니다. [SERVICE-WORKERS]

더 자세한 내용은 HTTP Fetch의 #4를 참조하십시오 — timing allow check는 서비스 워커로부터 응답이 없을 때만 수행됩니다. 또한 responserespondWith() 알고리즘에서 복제된 경우, 내부 가져오기(fetch)의 fetch timing info는 복제된 response에 포함되지 않습니다. 해당 정보는 response가 아니라 fetch에 첨부됩니다.

3.5.2. Timing-Allow-Origin 응답 헤더

서버측 애플리케이션은 Timing-Allow-Origin HTTP 응답 헤더를 반환하여, 사용자 에이전트가 교차 출처 제한으로 인해 0이 되었을 속성 값들을 문서 출처에 완전히 노출하도록 허용할 수 있습니다.

Timing-Allow-Origin HTTP 응답 헤더 필드는 허용될 수 있는 출처(origin)를 나타내는 정책을 전달하는 데 사용될 수 있습니다. 헤더 값은 다음 ABNF로 표현됩니다 [RFC5234] (List Extension 및 [RFC9110] 사용):

Timing-Allow-Origin = 1#( origin-or-null / wildcard )

전송자는 여러 개의 Timing-Allow-Origin 헤더 필드를 생성할 수 있습니다. 수신자는 각 후속 필드 값을 쉼표로 구분하여 결합된 필드 값에 덧붙여 여러 개의 Timing-Allow-Origin 헤더 필드를 결합할 수 있습니다.

사용자 에이전트는 여전히 교차 출처 제한을 적용하고 transferSize, encodedBodySize 및 decodedBodySize 속성을 0으로 설정할 수 있습니다. 그럴 경우 deliveryType을 ""로 설정할 수도 있습니다.

Timing-Allow-Origin 헤더는 FETCH에서 처리되어 해당 속성들을 계산합니다.

Timing-Allow-Origin 헤더는 캐시된 응답의 일부로 도착할 수 있습니다. 캐시 재검증의 경우, RFC 7234에 따르면 헤더 값은 재검증 응답에서 올 수도 있고, 거기에 존재하지 않으면 원래의 캐시된 리소스에서 올 수 있습니다.

이슈 222223는 Timing-Allow-Origin에서 와일드카드 지원을 제거하여 사용을 제한할 것을 제안합니다.

3.5.3. IANA 고려사항

이 절은 Timing-Allow-Origin을 임시 메시지 헤더(Provisional Message Header)로 등록합니다.

헤더 필드 이름:
Timing-Allow-Origin
적용 프로토콜:
http
상태:
provisional
작성자/변경 통제:
W3C
명세 문서:
§ 3.5.2 Timing-Allow-Origin 응답 헤더

3.6. 리소스 타이밍 속성

이 절은 비규범적입니다.

다음 도표는 PerformanceResourceTiming 인터페이스에서 정의된 타이밍 속성들을 보여줍니다. 괄호 안의 속성은 교차 출처 리소스를 가져올 때 사용 불가능할 수 있습니다. 사용자 에이전트는 타이밍들 사이에 내부 처리를 수행할 수 있으며, 이는 타이밍 사이에 비규범적 간격을 유발할 수 있습니다.

이 그림은 PerformanceResourceTiming 인터페이스에서 정의된 타이밍 속성들을 보여줍니다. 괄호 안의 속성은 리소스가 timing allow check 알고리즘에 실패한 경우 사용 불가능할 수 있음을 나타냅니다.
Resource Timing attributes

4. 리소스 타이밍 항목 생성

리소스 타이밍을 마크(mark resource timing)하려면, 주어진 fetch timing info timingInfo, DOMString requestedURL, DOMString initiatorType, global object global, 문자열 cacheMode, response body info bodyInfo, status responseStatus, 및 선택적 문자열 deliveryType (기본값은 빈 문자열) 을 사용하여 다음 단계를 수행합니다:

  1. Create a PerformanceResourceTiming 객체 entryglobalrealm에 생성합니다.
  2. 리소스 타이밍 항목 설정을 수행합니다: entry에 대해 initiatorType, requestedURL, timingInfo, cacheMode, bodyInfo, responseStatus, 및 deliveryType를 사용합니다.
  3. Queue a PerformanceEntry entry.
  4. 추가entryglobal퍼포먼스 엔트리 버퍼에 추가한다.

리소스 타이밍 항목을 설정하려면, PerformanceResourceTiming entry에 대해 DOMString initiatorType, DOMString requestedURL, fetch timing info timingInfo, DOMString cacheMode, response body info bodyInfo, status responseStatus, 및 선택적 DOMString deliveryType (기본값은 빈 문자열)을 사용하여 다음 단계를 수행합니다:

  1. cacheMode가 빈 문자열(""), "local", 또는 "validated"인지 확인한다(assert).
  2. globalentry관련 글로벌 객체로 한다.
  3. 초기화 entry를, 변환한 timingInfo시작 시각(global을 기준), "resource", requestedURL, 그리고 변환한 timingInfo종료 시각(global을 기준)으로 초기화한다.
  4. entryinitiator typeinitiatorType으로 설정한다.
  5. entry요청된 URLrequestedURL로 설정한다.
  6. entrytiming infotimingInfo로 설정한다.
  7. entryresource infobodyInfo로 설정한다.
  8. entrycache modecacheMode로 설정한다.
  9. entryresponse statusresponseStatus로 설정한다.
  10. deliveryType이 빈 문자열이고 cacheMode가 비어 있지 않으면, deliveryType을 "cache"로 설정한다.
  11. entrydelivery typedeliveryType으로 설정한다.

가져오기 타임스탬프 변환을 하려면, DOMHighResTimeStamp ts글로벌 객체 global이 주어졌을 때, 아래를 수행한다:

  1. ts가 0이면, 0을 반환한다.
  2. 그 외에는, 상대 고해상도 조잡 시간 (tsglobal 기준)을 반환한다.

5. 보안 고려사항

PerformanceResourceTiming 인터페이스는 리소스에 대한 타이밍 정보를 해당 리소스를 요청한 모든 웹 페이지나 워커에 노출합니다. 이 인터페이스에 대한 접근을 제한하기 위해, 기본적으로 동일 출처(same origin) 정책이 적용되며 특정 속성들은 0으로 설정됩니다. 이는 HTTP fetch에 설명된 바와 같습니다. 리소스 제공자는 Timing-Allow-Origin HTTP 응답 헤더를 추가하여 특정 도메인들이 타이밍 정보를 수집할 수 있도록 명시적으로 허용할 수 있습니다.

6. 개인정보 보호 고려사항

통계적 지문(fingerprinting)은 악의적인 웹사이트가 사용자가 제3자 웹사이트를 방문했는지 여부를 제3자 사이트 리소스의 캐시 적중/미스 타이밍을 측정해 판단할 수 있는 개인정보 문제입니다. PerformanceResourceTiming 인터페이스는 문서 내 리소스에 대한 타이밍 정보를 제공하지만, 리소스에 대한 load 이벤트는 이미 제한된 방식으로 캐시 적중/미스를 판단할 수 있는 타이밍을 측정할 수 있으며, HTTP Fetch의 교차 출처 제한은 추가 정보 유출을 방지합니다.

7. 감사의 글

Anne Van Kesteren, Annie Sullivan, Arvind Jain, Boris Zbarsky, Darin Fisher, Jason Weber, Jonas Sicking, James Simonsen, Karen Anderson, Kyle Scholz, Nic Jansma, Philippe Le Hegaret, Sigbjørn Vik, Steve Souders, Todd Reifsteck, Tony Gentilcore, William Chan, 및 Alex Christensen에게 이 작업에 기여해 주신 것에 감사드립니다.

적합성

문서 관습

적합성 요구사항은 서술적 주장과 RFC 2119 용어의 조합으로 표현됩니다. 이 문서의 규범 부분에 나오는 핵심 용어 “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, 및 “OPTIONAL”은 RFC 2119에 설명된 대로 해석되어야 합니다. 다만 가독성을 위해 이 명세서에서는 이러한 단어들을 모두 대문자로 표기하지는 않습니다.

이 명세서의 모든 텍스트는 명시적으로 비규범으로 표시된 섹션, 예제 및 주석을 제외하고는 규범적입니다. [RFC2119]

이 명세서의 예시는 “for example”이라는 말로 소개되거나 규범 텍스트와 구분하여 class="example"로 표시됩니다. 예를 들면 다음과 같습니다:

이것은 정보 제공용 예시입니다.

정보성 주석(Informative notes)은 “Note”라는 말로 시작하며, 규범 텍스트와 구분하여 class="note"로 표시됩니다. 예를 들면 다음과 같습니다:

참고: 이것은 정보 제공용 주석입니다.

적합한 알고리즘

알고리즘의 일부로 명령형으로 표현된 요구사항(예: "strip any leading space characters" 또는 "return false and abort these steps")은, 알고리즘을 도입할 때 사용된 핵심 용어("must", "should", "may" 등)의 의미에 따라 해석되어야 합니다.

알고리즘이나 구체적인 단계로 표현된 적합성 요구사항은, 최종 결과가 동등한 한 어떤 방식으로든 구현될 수 있습니다. 특히, 이 명세서에 정의된 알고리즘은 이해하기 쉽게 의도된 것이며 성능 지향으로 설계된 것은 아닙니다. 구현자들은 최적화를 권장받습니다.

색인

이 명세서에서 정의된 용어

참조로 정의된 용어

참고문헌

규범적 참고문헌

[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[FETCH]
Anne van Kesteren. Fetch Standard. Living Standard. URL: https://fetch.spec.whatwg.org/
[HR-TIME]
Yoav Weiss. High Resolution Time. 24 March 2026. WD. URL: https://www.w3.org/TR/hr-time-3/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[PERFORMANCE-TIMELINE-2]
Nicolas Pena Moreno. Performance Timeline. 21 May 2025. CRD. URL: https://www.w3.org/TR/performance-timeline/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SERVICE-WORKERS]
Monica CHINTALA; Yoshisato Yanagisawa. Service Workers Nightly. 9 April 2026. CRD. URL: https://www.w3.org/TR/service-workers/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/

비규범적 참고문헌

[BEACON]
Ilya Grigorik; Alois Reitbauer. Beacon. 3 August 2022. CRD. URL: https://www.w3.org/TR/beacon/
[CSS-VALUES]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 12 March 2024. WD. URL: https://www.w3.org/TR/css-values-4/
[EARLY_HINTS]
Early hints. URL: https://httpwg.org/specs/rfc8297.html
[INCREMENTAL_FONT_TRANSFER]
Incremental Font Transfer. URL: https://www.w3.org/TR/IFT/
[NAVIGATION-TIMING-2]
Yoav Weiss; Noam Rosenthal. Navigation Timing Level 2. 25 February 2026. WD. URL: https://www.w3.org/TR/navigation-timing-2/
[RFC2397]
L. Masinter. The "data" URL scheme. August 1998. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc2397
[RFC5234]
D. Crocker, Ed.; P. Overell. Augmented BNF for Syntax Specifications: ABNF. January 2008. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc5234
[RFC9110]
R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed.. HTTP Semantics. June 2022. Internet Standard. URL: https://httpwg.org/specs/rfc9110.html
[SVG11]
Erik Dahlström; et al. Scalable Vector Graphics (SVG) 1.1 (Second Edition). 16 August 2011. REC. URL: https://www.w3.org/TR/SVG11/
[SVG2]
Amelia Bellamy-Royds; et al. Scalable Vector Graphics (SVG) 2. 4 October 2018. CR. URL: https://www.w3.org/TR/SVG2/
[XHR]
Anne van Kesteren. XMLHttpRequest Standard. Living Standard. URL: https://xhr.spec.whatwg.org/

IDL 색인

[Exposed=(Window,Worker)]
interface PerformanceResourceTiming : PerformanceEntry {
    readonly attribute DOMString initiatorType;
    readonly attribute DOMString deliveryType;
    readonly attribute ByteString nextHopProtocol;
    readonly attribute DOMHighResTimeStamp workerStart;
    readonly attribute DOMHighResTimeStamp redirectStart;
    readonly attribute DOMHighResTimeStamp redirectEnd;
    readonly attribute DOMHighResTimeStamp fetchStart;
    readonly attribute DOMHighResTimeStamp domainLookupStart;
    readonly attribute DOMHighResTimeStamp domainLookupEnd;
    readonly attribute DOMHighResTimeStamp connectStart;
    readonly attribute DOMHighResTimeStamp connectEnd;
    readonly attribute DOMHighResTimeStamp secureConnectionStart;
    readonly attribute DOMHighResTimeStamp requestStart;
    readonly attribute DOMHighResTimeStamp finalResponseHeadersStart;
    readonly attribute DOMHighResTimeStamp firstInterimResponseStart;
    readonly attribute DOMHighResTimeStamp responseStart;
    readonly attribute DOMHighResTimeStamp responseEnd;
    readonly attribute DOMHighResTimeStamp workerRouterEvaluationStart;
    readonly attribute DOMHighResTimeStamp workerCacheLookupStart;
    readonly attribute DOMString workerMatchedRouterSource;
    readonly attribute DOMString workerFinalRouterSource;
    readonly attribute unsigned long long  transferSize;
    readonly attribute unsigned long long  encodedBodySize;
    readonly attribute unsigned long long  decodedBodySize;
    readonly attribute unsigned short responseStatus;
    readonly attribute RenderBlockingStatusType renderBlockingStatus;
    readonly attribute DOMString contentType;
    readonly attribute DOMString contentEncoding;
    [Default] object toJSON();
};

enum RenderBlockingStatusType {
    "blocking",
    "non-blocking"
};

partial interface Performance {
      undefined clearResourceTimings ();
      undefined setResourceTimingBufferSize (unsigned long maxSize);
      attribute EventHandler onresourcetimingbufferfull;
    };

MDN

Performance/clearResourceTimings

In all current engines.

Firefox35+Safari11+Chrome46+
Opera?Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.jsNone
MDN

Performance/resourcetimingbufferfull_event

In all current engines.

Firefox35+Safari11+Chrome46+
OperaNoneEdge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.jsNone
MDN

Performance/setResourceTimingBufferSize

In all current engines.

Firefox35+Safari11+Chrome46+
Opera?Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.jsNone
MDN

Performance

In all current engines.

Firefox7+Safari8+Chrome6+
Opera?Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari9+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile?
Node.jsNone
MDN

PerformanceResourceTiming/connectEnd

In all current engines.

Firefox31+Safari11+Chrome43+
Opera32+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile32+
MDN

PerformanceResourceTiming/connectStart

In all current engines.

Firefox31+Safari11+Chrome43+
Opera32+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile32+
MDN

PerformanceResourceTiming/decodedBodySize

In all current engines.

Firefox45+Safari16.4+Chrome54+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

PerformanceResourceTiming/domainLookupEnd

In all current engines.

Firefox31+Safari11+Chrome43+
Opera?Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

PerformanceResourceTiming/domainLookupStart

In all current engines.

Firefox31+Safari11+Chrome43+
Opera?Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

PerformanceResourceTiming/encodedBodySize

In all current engines.

Firefox45+Safari16.4+Chrome54+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

PerformanceResourceTiming/fetchStart

In all current engines.

Firefox31+Safari11+Chrome43+
Opera?Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

PerformanceResourceTiming/initiatorType

In all current engines.

Firefox31+Safari11+Chrome43+
Opera?Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

PerformanceResourceTiming/nextHopProtocol

In all current engines.

Firefox45+Safari11+Chrome61+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

PerformanceResourceTiming/redirectEnd

In all current engines.

Firefox31+Safari11+Chrome43+
Opera?Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

PerformanceResourceTiming/redirectStart

In all current engines.

Firefox31+Safari11+Chrome43+
Opera?Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

PerformanceResourceTiming/renderBlockingStatus

In only one current engine.

FirefoxNoneSafariNoneChrome107+
Opera?Edge107+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

PerformanceResourceTiming/requestStart

In all current engines.

Firefox31+Safari11+Chrome43+
Opera?Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

PerformanceResourceTiming/responseEnd

In all current engines.

Firefox31+Safari11+Chrome43+
Opera?Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

PerformanceResourceTiming/responseStart

In all current engines.

Firefox31+Safari11+Chrome43+
Opera?Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

PerformanceResourceTiming/responseStatus

In only one current engine.

FirefoxNoneSafariNoneChrome109+
Opera?Edge109+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

PerformanceResourceTiming/secureConnectionStart

In all current engines.

Firefox31+Safari11+Chrome43+
Opera?Edge79+
Edge (Legacy)18IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

PerformanceResourceTiming/toJSON

In all current engines.

Firefox34+Safari11+Chrome45+
Opera?Edge79+
Edge (Legacy)16+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

PerformanceResourceTiming/transferSize

In all current engines.

Firefox45+Safari16.4+Chrome54+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

PerformanceResourceTiming/workerStart

In all current engines.

Firefox58+Safari11+Chrome46+
Opera32+Edge79+
Edge (Legacy)16+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile32+
MDN

PerformanceResourceTiming

In all current engines.

Firefox31+Safari11+Chrome29+
Opera?Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Headers/Timing-Allow-Origin

In all current engines.

FirefoxYesSafariYesChromeYes
Opera?EdgeYes
Edge (Legacy)NoneIE?
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?