리소스 타이밍

W3C 후보 권고안 초안,

이 문서에 대한 추가 정보
이 버전:
https://www.w3.org/TR/2026/CRD-resource-timing-20260901/
최신 공개 버전:
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, embed 및 link (link type이 stylesheet인 경우), SVG 요소 [SVG11]의 svg 등과 EventSource에 대해 사용 가능합니다.

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

이 절은 비규범적입니다.

null이 아닌 클라이언트가 가져온 리소스 요청은 페치 과정의 일부로 타임라인에서 제외되는 경우를 빼고, 그 클라이언트의 전역 객체의 Performance Timeline에 PerformanceResourceTiming 객체로 포함됩니다. HTTP 캐시에서 가져온 리소스도 Performance Timeline에 PerformanceResourceTiming 객체로 포함됩니다. 페치를 시작했지만 이후 중단된 리소스(예: 네트워크 오류로 인한 경우)는 시작 및 종료 타이밍과 함께 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 info인 timing info를 가집니다.

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

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

PerformanceResourceTiming 는 연관된 RenderBlockingStatusType 인 render-blocking status를 가집니다.

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

initiatorType getter 단계는 개시자 유형을 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", 요청이 iframe의 src를 처리한 결과인 경우.
  • "frame", 요청이 frame를 로드한 결과인 경우.
  • "embed", 요청이 embed 요소의 src를 처리한 결과인 경우.
  • "link", 요청이 link 요소를 처리한 결과인 경우.
  • "object", 요청이 object 요소를 처리한 결과인 경우.
  • "early-hints", 요청이 [EARLY_HINTS] 응답의 Early Hints를 처리한 결과인 경우.
  • "other", 위의 어떤 조건도 해당되지 않는 경우.

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

deliveryType getter 단계는 전달 유형을 this에 대해 반환하는 것입니다.

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

  • "cache", 캐시 모드가 빈 문자열이 아닌 경우입니다.
  • 위 조건 중 어느 것도 일치하지 않는 경우 빈 문자열 ""입니다.

이는 이 명세의 향후 업데이트에서 확장될 것으로 예상되며, 예를 들어 미리 로드된 리소스 사용과 미리 가져온 탐색 요청을 설명하는 데 사용될 수 있습니다.

workerStart getter 단계는 fetch 타임스탬프를 변환하는 것으로, this의 타이밍 정보의 최종 서비스 워커 시작 시간과 관련 전역 객체를 this에 대해 사용합니다. 자세한 내용은 HTTP fetch를 참조하십시오.

redirectStart getter 단계는 fetch 타임스탬프를 변환하는 것으로, this의 타이밍 정보의 리디렉션 시작 시간과 관련 전역 객체를 this에 대해 사용합니다. 자세한 내용은 HTTP 리디렉션 fetch를 참조하십시오.

redirectEnd getter 단계는 fetch 타임스탬프를 변환하는 것으로, this의 타이밍 정보의 리디렉션 종료 시간과 관련 전역 객체를 this에 대해 사용합니다. 자세한 내용은 HTTP 리디렉션 fetch를 참조하십시오.

fetchStart getter 단계는 fetch 타임스탬프를 변환하는 것으로, this의 타이밍 정보의 리디렉션 후 시작 시간과 관련 전역 객체를 this에 대해 사용합니다. 자세한 내용은 HTTP fetch를 참조하십시오.

domainLookupStart getter 단계는 fetch 타임스탬프를 변환하는 것으로, this의 타이밍 정보의 최종 연결 타이밍 정보의 도메인 조회 시작 시간과 관련 전역 객체를 this에 대해 사용합니다. 자세한 내용은 연결 타이밍 정보 기록을 참조하십시오.

domainLookupEnd getter 단계는 fetch 타임스탬프를 변환하는 것으로, this의 타이밍 정보의 최종 연결 타이밍 정보의 도메인 조회 종료 시간과 관련 전역 객체를 this에 대해 사용합니다. 자세한 내용은 연결 타이밍 정보 기록을 참조하십시오.

connectStart getter 단계는 fetch 타임스탬프를 변환하는 것으로, this의 타이밍 정보의 최종 연결 타이밍 정보의 연결 시작 시간과 관련 전역 객체를 this에 대해 사용합니다. 자세한 내용은 연결 타이밍 정보 기록을 참조하십시오.

connectEnd getter 단계는 fetch 타임스탬프를 변환하는 것으로, this의 타이밍 정보의 최종 연결 타이밍 정보의 연결 종료 시간과 관련 전역 객체를 this에 대해 사용합니다. 자세한 내용은 연결 타이밍 정보 기록을 참조하십시오.

secureConnectionStart getter 단계는 fetch 타임스탬프를 변환하는 것으로, this의 타이밍 정보의 최종 연결 타이밍 정보의 보안 연결 시작 시간과 관련 전역 객체를 this에 대해 사용합니다. 자세한 내용은 연결 타이밍 정보 기록을 참조하십시오.

nextHopProtocol getter 단계는 동형 디코딩을 this의 타이밍 정보의 최종 연결 타이밍 정보의 ALPN 협상 프로토콜에 적용하는 것입니다. 자세한 내용은 연결 타이밍 정보 기록을 참조하십시오.

이슈 221에서는 사용자의 네트워크 구성에 관한 세부 정보를 노출할 수 있으므로 nextHopProtocol 지원을 제거할 것을 제안합니다.

requestStart getter 단계는 fetch 타임스탬프를 변환하는 것으로, this의 타이밍 정보의 최종 네트워크 요청 시작 시간과 관련 전역 객체를 this에 대해 사용합니다. 자세한 내용은 HTTP fetch를 참조하십시오.

firstInterimResponseStart getter 단계는 fetch 타임스탬프를 변환하는 것으로, this의 타이밍 정보의 첫 번째 중간 네트워크 응답 시작 시간과 관련 전역 객체를 this에 대해 사용합니다. 자세한 내용은 HTTP fetch를 참조하십시오.

finalResponseHeadersStart getter 단계는 fetch 타임스탬프를 변환하는 것으로, this의 타이밍 정보의 최종 네트워크 응답 시작 시간과 관련 전역 객체를 this에 대해 사용합니다. 자세한 내용은 HTTP fetch를 참조하십시오.

responseStart getter 단계는 this의 firstInterimResponseStart가 0이 아닌 경우 이를 반환하고, 그렇지 않으면 this의 finalResponseHeadersStart를 반환하는 것입니다.

responseEnd getter 단계는 fetch 타임스탬프를 변환하는 것으로, this의 타이밍 정보의 종료 시간과 관련 전역 객체를 this에 대해 사용합니다. 자세한 내용은 fetch를 참조하십시오.

encodedBodySize getter 단계는 this의 리소스 정보의 인코딩된 크기를 반환하는 것입니다.

decodedBodySize getter 단계는 this의 리소스 정보의 디코딩된 크기를 반환하는 것입니다.

transferSize getter 단계는 다음과 같습니다:

  1. this의 캐시 모드가 "local"이면 0을 반환합니다.

  2. this의 캐시 모드가 "validated"이면 300을 반환합니다.

  3. this의 리소스 정보의 인코딩된 크기에 300을 더한 값을 반환합니다.

    transferSize에 추가되는 상수 값은 HTTP 헤더의 전체 바이트 크기를 노출하는 대신 사용되며, 전체 크기를 노출하면 특정 쿠키의 존재가 드러날 수 있기 때문입니다. 이 이슈를 참조하십시오.

responseStatus getter 단계는 this의 응답 상태를 반환하는 것입니다.

responseStatus는 Fetch에서 결정됩니다. 교차 출처 no-cors 요청에서는 응답이 불투명하게 필터링된 응답이므로 0이 됩니다.

contentType getter 단계는 this의 리소스 정보의 콘텐츠 유형을 반환하는 것입니다.

contentEncoding getter 단계는 this의 리소스 정보의 콘텐츠 인코딩을 반환하는 것입니다.

renderBlockingStatus getter 단계는 차단을 반환하는 것으로, this의 타이밍 정보의 렌더링 차단이 true인 경우이며, 그렇지 않으면 비차단을 반환합니다.

workerRouterEvaluationStart getter 단계는 this의 타이밍 정보의 서비스 워커 타이밍 정보의 워커 라우터 평가 시작을 반환하는 것입니다.

workerCacheLookupStart getter 단계는 this의 타이밍 정보의 서비스 워커 타이밍 정보의 워커 캐시 조회 시작을 반환하는 것입니다.

workerMatchedRouterSource getter 단계는 this의 타이밍 정보의 서비스 워커 타이밍 정보의 워커가 일치시킨 라우터 소스를 반환하는 것입니다.

workerFinalRouterSource getter 단계는 this의 타이밍 정보의 서비스 워커 타이밍 정보의 워커의 최종 라우터 소스를 반환하는 것입니다.

PerformanceResourceTiming을 구현하는 사용자 에이전트는 supportedEntryTypes에 "resource"를 포함해야 합니다. 이를 통해 개발자는 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 buffer 는 PerformanceResourceTiming 객체를 저장하기 위한 보조 버퍼로 초기에는 비어 있습니다.
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 before가 number of excess entries after 이하이면, 리소스 타이밍 세컨더리 버퍼의 모든 엔트리를 제거하고, 리소스 타이밍 세컨더리 버퍼 현재 크기를 0으로 설정하고, 이 단계들을 중단한다.
  2. 리소스 타이밍 버퍼 가득참 이벤트 보류 플래그를 false로 설정한다.

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

3.5. 교차 출처 리소스

3.5.1. 소개

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

교차 출처 리소스에 대해 타이밍 허용 검사 알고리즘이 실패하면 해당 항목은 불투명 항목이 됩니다. 이러한 항목은 다른 방식으로 노출되지 않는 교차 출처 데이터의 유출을 방지하기 위해 대부분의 속성이 마스킹됩니다. 따라서 불투명 항목의 경우 다음 속성은 항상 0 또는 빈 문자열을 반환합니다: redirectStart, redirectEnd, workerStart, domainLookupStart, domainLookupEnd, connectStart, connectEnd, requestStart, firstInterimResponseStart, finalResponseHeadersStart, responseStart, secureConnectionStart, 그리고 nextHopProtocol입니다.

contentType, encodedBodySize, 그리고 decodedBodySize 같은 일부 속성은 응답이 CORS 교차 출처인 경우 0으로 설정됩니다( contentType의 경우에는 빈 문자열로 설정됩니다).

transferSize는 타이밍 허용 검사와 CORS 교차 출처 상태 모두의 영향을 받습니다.

서비스 워커가 respondWith()를 사용하여 처리한 요청의 경우, 보고되는 타이밍 데이터는 서비스 워커 자체의 내부 네트워크 활동이 아니라 클라이언트와 서비스 워커 간의 상호 작용을 반영합니다. 예를 들어 서비스 워커는 동일 출처 요청에 대해 교차 출처 응답으로 응답하거나 그 반대로 응답할 수 있으며, 또는 어느 쪽에든 캐시된 응답이나 합성 응답을 반환할 수 있습니다. 이를 고려하면 서비스 워커에서 전달된 리소스는 해당 리소스를 가져오는 과정의 전체 내용을 보여주지 않으며, 타이밍 허용 검사를 거치지도 않습니다. 이러한 fetch에 관한 전체 정보를 얻으려면 서비스 워커 자체의 성능 타임라인을 확인할 수 있습니다. [SERVICE-WORKERS]

자세한 내용은 HTTP Fetch #4를 참조하십시오. 타이밍 허용 검사는 서비스 워커로부터 응답이 없는 경우에만 수행됩니다. 또한 respondWith() 알고리즘에서 복제되는 응답은 내부 fetch의 fetch 타이밍 정보를 전달하지 않습니다. 해당 정보는 응답이 아니라 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에 따르면 헤더 값은 재검증 응답에서 올 수도 있고, 거기에 존재하지 않으면 원래의 캐시된 리소스에서 올 수 있습니다.

이슈 222 및 223는 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 객체 entry를 global의 realm에 생성합니다.
  2. 리소스 타이밍 항목 설정을 수행합니다: entry에 대해 initiatorType, requestedURL, timingInfo, cacheMode, bodyInfo, responseStatus, 및 deliveryType를 사용합니다.
  3. 큐에 추가한다: PerformanceEntry entry를.
  4. 추가entry를 global의 퍼포먼스 엔트리 버퍼에 추가한다.

리소스 타이밍 항목을 설정하려면, 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. global을 entry의 관련 글로벌 객체로 한다.
  3. 초기화 entry를, 변환한 timingInfo의 시작 시각(global을 기준), "resource", requestedURL, 그리고 변환한 timingInfo의 종료 시각(global을 기준)으로 초기화한다.
  4. entry의 initiator type을 initiatorType으로 설정한다.
  5. entry의 요청된 URL을 requestedURL로 설정한다.
  6. entry의 timing info를 timingInfo로 설정한다.
  7. entry의 resource info를 bodyInfo로 설정한다.
  8. entry의 cache mode를 cacheMode로 설정한다.
  9. entry의 response status를 responseStatus로 설정한다.
  10. deliveryType이 빈 문자열이고 cacheMode가 비어 있지 않으면, deliveryType을 "cache"로 설정한다.
  11. entry의 delivery type을 deliveryType으로 설정한다.

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

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

5. 보안 고려사항

PerformanceResourceTiming 인터페이스는 리소스에 대한 타이밍 정보를 해당 리소스를 요청한 모든 웹 페이지나 워커에 노출합니다. 이 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 표준. 현행 표준. URL: https://dom.spec.whatwg.org/
[FETCH]
Anne van Kesteren. Fetch 표준. 현행 표준. URL: https://fetch.spec.whatwg.org/
[HR-TIME]
Yoav Weiss. 고해상도 시간. 2026년 3월 24일. WD. URL: https://www.w3.org/TR/hr-time-3/
[HTML]
Anne van Kesteren; et al. HTML 표준. 현행 표준. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra 표준. 현행 표준. URL: https://infra.spec.whatwg.org/
[PERFORMANCE-TIMELINE-2]
Nicolas Pena Moreno. Performance 타임라인. 2025년 5월 21일. CRD. URL: https://www.w3.org/TR/performance-timeline/
[RFC2119]
S. Bradner. 요구사항 수준을 나타내기 위해 RFC에서 사용하는 핵심 단어. 1997년 3월. 현행 최선 관행. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SERVICE-WORKERS]
Monica CHINTALA; Yoshisato Yanagisawa. Service Workers 나이틀리. 2026년 8월 12일. CRD. URL: https://www.w3.org/TR/service-workers/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL 표준. 현행 표준. URL: https://webidl.spec.whatwg.org/

비규범적 참고문헌

[BEACON]
Ilya Grigorik; Alois Reitbauer. Beacon. 2022년 8월 3일. CRD. URL: https://www.w3.org/TR/beacon/
[CSS-VALUES]
Tab Atkins Jr.; Elika Etemad. CSS 값과 단위 모듈 레벨 4. 2024년 3월 12일. WD. URL: https://www.w3.org/TR/css-values-4/
[EARLY_HINTS]
Early hints. URL: https://httpwg.org/specs/rfc8297.html
[INCREMENTAL_FONT_TRANSFER]
점진적 글꼴 전송. URL: https://www.w3.org/TR/IFT/
[NAVIGATION-TIMING-2]
Yoav Weiss; Noam Rosenthal. 탐색 타이밍 레벨 2. 2026년 2월 25일. WD. URL: https://www.w3.org/TR/navigation-timing-2/
[RFC2397]
L. Masinter. "data" URL 스킴. 1998년 8월. 제안 표준. URL: https://www.rfc-editor.org/info/rfc2397/
[RFC5234]
D. Crocker, Ed.; P. Overell. 구문 명세를 위한 확장 BNF: ABNF. 2008년 1월. 인터넷 표준. URL: https://www.rfc-editor.org/info/rfc5234/
[RFC9110]
R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed.. HTTP 의미론. 2022년 6월. 인터넷 표준. URL: https://httpwg.org/specs/rfc9110.html
[SVG11]
Erik Dahlström; et al. 확장 가능한 벡터 그래픽(SVG) 1.1 (제2판). 2011년 8월 16일. REC. URL: https://www.w3.org/TR/SVG11/
[SVG2]
Amelia Bellamy-Royds; et al. 확장 가능한 벡터 그래픽(SVG) 2. 2018년 10월 4일. CR. URL: https://www.w3.org/TR/SVG2/
[XHR]
Anne van Kesteren. XMLHttpRequest 표준. 현행 표준. 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?