네비게이션 타이밍 레벨 2

W3C 워킹 드래프트

이 문서에 대한 추가 정보
이 버전:
https://www.w3.org/TR/2025/WD-navigation-timing-2-20250213/
최신 공개 버전:
https://www.w3.org/TR/navigation-timing-2/
최신 에디터 드래프트:
https://w3c.github.io/navigation-timing/
이력:
https://www.w3.org/standards/history/navigation-timing-2/
커밋 이력
테스트 스위트:
https://wpt.fyi/navigation-timing/
에디터:
Yoav Weiss (Google)
(초청 전문가)
이전 에디터:
Ilya Grigorik (Google)
(Microsoft Corp.) -
(Microsoft Corp.) -
(Google Inc.) -
피드백:
GitHub w3c/navigation-timing (풀 리퀘스트, 새 이슈, 오픈 이슈)
public-web-perf@w3.org 제목 [NavigationTiming] (아카이브)
브라우저 지원:
caniuse.com

요약

이 명세는 웹 애플리케이션이 문서의 네비게이션에 대한 전체 타이밍 정보를 접근할 수 있는 인터페이스를 정의합니다.

이 문서의 상태

이 섹션은 본 문서가 발행된 시점에서의 상태를 설명합니다. 현재 W3C 발행 목록과 이 기술 보고서의 최신 개정판은 W3C 기술 보고서 인덱스에서 https://www.w3.org/TR/ 에서 확인할 수 있습니다.

네비게이션 타이밍 2는 [NAVIGATION-TIMING]의 첫 번째 버전을 대체하며 다음과 같은 변경 사항을 포함합니다:

본 문서는 Web Performance 작업 그룹에서 권고안 트랙을 사용하여 워킹 드래프트로 발행되었습니다.

워킹 드래프트로 발행되었다고 해서 W3C 및 회원의 승인임을 의미하지 않습니다.

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

본 문서는 W3C 특허 정책에 따라 운영되는 그룹에 의해 제작되었습니다. W3C공개 특허 공개 목록을 유지하고 있으며, 그룹의 산출물과 관련된 특허 공개가 있을 경우 해당 페이지에 안내와 함께 공개됩니다. 실제로 특허를 알고 있는 개인은 필수 청구가 포함되어 있다고 생각하는 경우 W3C 특허 정책 6절에 따라 정보를 공개해야 합니다.

본 문서는 2023년 11월 3일 W3C 프로세스 문서에 의해 관리됩니다.

1. 소개

이 섹션은 규범적이지 않습니다.

웹 애플리케이션의 성능 특성을 정확하게 측정하는 것은 웹 애플리케이션을 더 빠르게 만드는 중요한 요소입니다. [JSMEASURE]에 설명된 것과 같은 JavaScript 기반 메커니즘은 사용자 지연 측정을 위한 포괄적인 인스트루먼테이션을 제공할 수 있지만, 많은 경우 완전하거나 상세한 종단 간(latency) 지연 정보를 제공하지 못합니다. 예를 들어 아래 JavaScript는 페이지가 완전히 로드되는 데 걸리는 시간을 측정하려는 단순한 시도를 보여줍니다:

<html>
<head>
<script type="text/javascript">
var start = new Date().getTime();
function onLoad() {
  var now = new Date().getTime();
  var latency = now - start;
  alert("page loading time: " + latency);
}
</script>
</head>
<body onload="onLoad()">
<!- Main page body goes from here. -->
</body>
</html>

위의 스크립트는 head의 첫 JavaScript가 실행된 이후 페이지가 로드되는 데 걸리는 시간을 계산하지만, 서버에서 페이지를 가져오는 데 걸리는 시간이나 페이지의 초기화 라이프사이클에 대한 정보는 제공하지 않습니다.

이 명세는 문서의 네비게이션과 관련된 고해상도 성능 메트릭 데이터를 저장하고 가져올 수 있도록 [PERFORMANCE-TIMELINE-2]에 참여하는 PerformanceNavigationTiming 인터페이스를 정의합니다. PerformanceNavigationTiming 인터페이스는 [HR-TIME]을 사용하므로, 모든 시간 값은 해당 entry의 타임 오리진(time origin)관련 설정 객체(relevant settings object)를 기준으로 측정됩니다.

예를 들어, response end가 네비게이션 시작 후 100ms에 발생한다고 알면 PerformanceNavigationTiming 데이터는 다음과 같을 수 있습니다:

startTime:           0.000  // 네비게이션 요청의 시작 시간
responseEnd:       100.000  // 마지막 바이트 수신의 고해상도 시간

다음 스크립트는 개발자가 PerformanceNavigationTiming 인터페이스를 활용해 문서의 네비게이션과 관련된 정확한 타이밍 데이터를 얻는 방법을 보여줍니다:

<script>
function showNavigationDetails() {
  // 첫 번째 entry 가져오기
  const [entry] = performance.getEntriesByType("navigation");
  // 개발자 콘솔에 보기 좋게 테이블로 출력
  console.table(entry.toJSON());
}
</script>
<body onload="showNavigationDetails()">

2. 용어

실제로 인터페이스인 Foo를 지칭할 때, "an object implementing the interface Foo" 대신에 "a Foo object"라는 표현을 사용하는 경우가 있습니다.

현재 문서라는 용어는 Window 객체에 연결된 최신 Document 객체를 의미합니다.

전체적으로 모든 시간 값은 문서의 네비게이션 시작 시점부터 경과된 밀리초 단위로 측정됩니다. 예를 들어, 문서의 네비게이션 시작은 0 시점에 발생합니다. 현재 시간이라는 용어는 문서의 네비게이션 시작 후 현재 시점까지 경과한 밀리초를 의미합니다. 이러한 시간의 정의는 [HR-TIME] 명세를 기반으로 합니다.

3. 네비게이션 타이밍

3.1 PerformanceEntry 인터페이스와의 관계

PerformanceNavigationTiming 인터페이스는 PerformanceEntry 인터페이스의 다음 속성을 확장합니다:

참고

PerformanceNavigationTiming 을 구현하는 사용자 에이전트는 supportedEntryTypes"navigation"을 Window 컨텍스트에 포함해야 합니다. 이는 개발자가 네비게이션 타이밍 지원을 감지할 수 있도록 해줍니다.

3.2 PerformanceResourceTiming 인터페이스와의 관계

PerformanceNavigationTiming 인터페이스는 PerformanceResourceTiming 인터페이스의 다음 속성을 확장합니다:

참고

오직 현재 문서 리소스만 성능 타임라인에 포함되며, 성능 타임라인에는 하나의 PerformanceNavigationTiming 객체만 존재합니다.

3.3 PerformanceNavigationTiming 인터페이스

참고

HTTP 캐시 [RFC7234]에서의 내용 확인 및 조회는 패칭 과정의 일부입니다. 이는 requestStart, responseStart responseEnd 속성에 의해 다뤄집니다.

WebIDL[Exposed=Window]
interface PerformanceNavigationTiming : PerformanceResourceTiming {
    readonly        attribute DOMHighResTimeStamp  unloadEventStart;
    readonly        attribute DOMHighResTimeStamp  unloadEventEnd;
    readonly        attribute DOMHighResTimeStamp  domInteractive;
    readonly        attribute DOMHighResTimeStamp  domContentLoadedEventStart;
    readonly        attribute DOMHighResTimeStamp  domContentLoadedEventEnd;
    readonly        attribute DOMHighResTimeStamp  domComplete;
    readonly        attribute DOMHighResTimeStamp  loadEventStart;
    readonly        attribute DOMHighResTimeStamp  loadEventEnd;
    readonly        attribute NavigationTimingType type;
    readonly        attribute unsigned short       redirectCount;
    readonly        attribute DOMHighResTimeStamp  criticalCHRestart;
    readonly        attribute NotRestoredReasons?  notRestoredReasons;
    [Default] object toJSON();
};

PerformanceNavigationTiming문서 로드 타이밍 정보 문서 로드 타이밍과 연관되어 있습니다.

PerformanceNavigationTiming문서 언로드 타이밍 정보 이전 문서 언로드 타이밍과 연관되어 있습니다.

PerformanceNavigationTiming리디렉션 횟수와 연관된 숫자를 가집니다.

PerformanceNavigationTimingNavigationTimingType 네비게이션 타입과 연관되어 있습니다.

PerformanceNavigationTimingDOMHighResTimeStamp Critical-CH 재시작 시간과 연관되어 있습니다.

PerformanceNavigationTimingNotRestoredReasons 복원되지 않은 이유와 연관되어 있습니다.

PerformanceNavigationTiming는 null 또는 service worker timing 정보 서비스 워커 타이밍과 연관되어 있습니다.

unloadEventStart getter 단계는 this이전 문서 언로드 타이밍unload 이벤트 시작 시간을 반환합니다.

참고

이전 문서와 현재 문서가 동일한 origin을 가질 경우, 이 타임스탬프는 사용자 에이전트가 이전 문서의 unload 이벤트를 시작하기 직전에 측정됩니다. 이전 문서가 없거나 이전 문서의 origin이 현재 문서와 다를 경우, 이 속성은 0을 반환합니다.

unloadEventEnd getter 단계는 this이전 문서 언로드 타이밍unload 이벤트 종료 시간을 반환합니다.

참고

이전 문서와 현재 문서가 동일한 origin을 가질 경우, 이 타임스탬프는 사용자 에이전트가 이전 문서의 unload 이벤트 처리를 완료한 직후에 측정됩니다. 이전 문서가 없거나 이전 문서의 origin이 현재 문서와 다를 경우, 이 속성은 0을 반환합니다.

domInteractive getter 단계는 this문서 로드 타이밍DOM 인터랙티브 시간을 반환합니다.

참고

이 타임스탬프는 사용자 에이전트가 현재 문서 준비 상태"interactive"로 설정하기 전에 측정됩니다.

domContentLoadedEventStart getter 단계는 this문서 로드 타이밍DOM content loaded 이벤트 시작 시간을 반환합니다.

참고

이 타임스탬프는 사용자 에이전트가 DOMContentLoaded 이벤트를 디스패치하기 전에 측정됩니다.

domContentLoadedEventEnd getter 단계는 this문서 로드 타이밍DOM content loaded 이벤트 종료 시간을 반환합니다.

참고

이 타임스탬프는 사용자 에이전트가 DOMContentLoaded 이벤트 처리를 완료한 후에 측정됩니다.

domComplete getter 단계는 this문서 로드 타이밍DOM 완료 시간을 반환합니다.

참고

이 타임스탬프는 사용자 에이전트가 현재 문서 준비 상태"complete"로 설정하기 전에 측정됩니다. 자세한 정의는 문서 준비 상태를 참고하세요.

loadEventStart getter 단계는 this문서 로드 타이밍load 이벤트 시작 시간을 반환합니다.

참고

이 타임스탬프는 사용자 에이전트가 문서에 대한 load 이벤트를 디스패치하기 전에 측정됩니다.

loadEventEnd getter 단계는 this문서 로드 타이밍load 이벤트 종료 시간을 반환합니다.

참고

이 타임스탬프는 사용자 에이전트가 문서에 대한 load 이벤트 처리를 완료한 후에 측정됩니다.

type getter 단계는 this네비게이션 타입을 실행합니다.

참고

Refresh 프라그마와 같은 클라이언트 측 리디렉션은 이 명세에서 HTTP 리디렉션으로 간주되지 않습니다. 이런 경우 type 속성은 적절한 값을 반환해야 하며, 예를 들어 현재 페이지를 다시 로드하는 경우 reload, 새 URL로 이동하는 경우 navigate 등입니다.

redirectCount getter 단계는 this리디렉션 횟수를 반환합니다.

criticalCHRestart getter 단계는 thisCritical-CH 재시작 시간을 반환합니다.

참고

criticalCHRestart가 0이 아니면 navigationStart, unloadEventStart, unloadEventEnd를 제외한 모든 타임스탬프보다 먼저 발생합니다. 이는 네비게이션 리디렉션 부분이 재시작된 순간을 의미합니다.

notRestoredReasons getter 단계는 this복원되지 않은 이유를 반환합니다.

toJSON() 메서드는 기본 toJSON 단계this에 대해 실행합니다.

3.3.1 NavigationTimingType 열거형(enum)

WebIDLenum NavigationTimingType {
    "navigate",
    "reload",
    "back_forward",
    "prerender"
};

값은 다음과 같이 정의됩니다:

navigate
history handling behavior"default" 또는 "replace" 로 설정되어 있으며, prerender 힌트 [RESOURCE-HINTS]에 의해 시작되지 않은 네비게이션입니다.
reload
navigable리로드(reloaded)된 네비게이션입니다.
back_forward
히스토리에서 적용된 네비게이션입니다.
prerender
prerender 힌트 [RESOURCE-HINTS]에 의해 시작된 네비게이션입니다.
참고

위 열거형 값의 형식은 WebIDL의 열거형 값 형식에 대한 권고안과 일치하지 않습니다. 이는 이미 구현된 브라우저와의 하위 호환성 문제로 인해 변경할 수 없습니다. [WebIDL]

4. 처리 과정

4.1 처리 모델

그림 1 이 그림은 PerformanceNavigationTiming 인터페이스에서 정의하는 타이밍 속성을 보여줍니다. 괄호로 표시된 속성은 서로 다른 출처의 문서 네비게이션에서는 제공되지 않을 수 있습니다.
Navigation Timing 속성

5. 네비게이션 타이밍 항목 생성

문서는 관련된 네비게이션 타이밍 항목을 가지며, 초기에는 설정되지 않습니다.

네비게이션 타이밍 항목 생성을 위해 Document document와, fetch 타이밍 정보 fetchTiming, 숫자 redirectCount, NavigationTimingType navigationType, null 또는 service worker 타이밍 정보 serviceWorkerTiming, DOMString cacheMode, DOMHighResTimeStamp criticalCHRestart, 그리고 response body info bodyInfo가 주어졌을 때, 다음을 수행합니다:

  1. globaldocument관련 글로벌 객체로 설정합니다.
  2. navigationTimingEntryglobalrealm에서 새로운 PerformanceNavigationTiming 객체로 설정합니다.
  3. 리소스 타이밍 항목 설정navigationTimingEntry에 대해 "navigation", documentURL, fetchTiming, cacheMode, bodyInfo를 사용하여 수행합니다.
  4. navigationTimingEntry문서 로드 타이밍documentload timing info로 설정합니다.
  5. navigationTimingEntry이전 문서 언로드 타이밍document이전 문서 언로드 타이밍으로 설정합니다.
  6. navigationTimingEntry리디렉션 횟수redirectCount로 설정합니다.
  7. navigationTimingEntry네비게이션 타입navigationType으로 설정합니다.
  8. navigationTimingEntry서비스 워커 타이밍serviceWorkerTiming으로 설정합니다.
  9. document네비게이션 타이밍 항목navigationTimingEntry로 설정합니다.
  10. navigationTimingEntryCritical-CH 재시작 시간criticalCHRestart로 설정합니다.
  11. navigationTimingEntry복원되지 않은 이유(not restored reasons)document복원되지 않은 이유NotRestoredReasons 객체 생성의 결과로 설정합니다.
  12. navigationTimingEntryglobal성능 항목 버퍼(performance entry buffer)에 추가합니다.

네비게이션 타이밍 항목 큐잉을 위해 Document documentdocument네비게이션 타이밍 항목을 추가합니다.

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

이 섹션은 규범적이지 않습니다.

6.1 정보 공개

정교하게 설계된 타이밍 공격을 통해 최종 사용자의 브라우징 및 활동 이력이 노출될 가능성이 있습니다. 예를 들어, 언로드 시간으로 이전 페이지의 unload 핸들러가 실행된 시간을 알 수 있으며, 이를 통해 사용자의 로그인 상태를 추론할 수 있습니다. 이러한 공격은 문서 언로드 시 동일 출처 검사 알고리즘을 강제 적용함으로써 완화되었습니다. 자세한 내용은 HTML 명세를 참고하세요.

완화된 동일 출처 정책(relaxed same origin policy)은 문서 간 무단 방문에 대해 충분한 보호를 제공하지 않습니다. 공유 호스팅 환경에서는 신뢰하지 않는 제3자가 동일한 IP 주소의 다른 포트에 HTTP 서버를 호스팅할 수 있습니다.

6.2 교차 디렉터리 접근

동일한 호스트명을 공유하는 서로 다른 페이지(예: 사용자 생성 콘텐츠가 있는 사이트의 서로 다른 작성자 콘텐츠)는 경로(pathname)로 접근을 제한하는 기능이 없으므로 동일 출처로 간주됩니다. 이러한 페이지 간 네비게이션을 통해 이후의 페이지가 이전 페이지의 타이밍 정보(리디렉션 및 언로드 이벤트 타이밍 등)에 접근할 수 있습니다.

7. 보안 고려사항

이 섹션은 규범적이지 않습니다.

PerformanceNavigationTiming 인터페이스는 현재 문서에 이전 문서에 대한 타이밍 정보를 노출합니다. 이전 문서에 대한 정보를 포함하는 PerformanceNavigationTiming 속성에 접근을 제한하기 위해, 이전 문서 언로드 알고리즘은 동일 출처 정책을 강제 적용하며, 이전 문서와 관련된 속성은 0으로 설정됩니다.

7.1 프록시 서버 감지

사용자 에이전트와 웹 서버 사이에 프록시가 배치된 경우, connectStartconnectEnd 속성 사이의 시간 간격은 사용자 에이전트와 프록시 사이의 지연을 나타내며, 웹 서버가 프록시의 존재를 추론할 수 있습니다. SOCKS 프록시의 경우 이 시간 간격은 프록시 인증 시간과 프록시가 웹 서버에 연결하는 데 걸리는 시간도 포함되어 프록시 감지를 어렵게 합니다. HTTP 프록시의 경우 사용자 에이전트가 프록시 서버에 대해 아무런 정보를 알지 못할 수도 있으므로, 이런 공격을 항상 완화하는 것은 불가능할 수 있습니다.

8. 폐기됨

이 섹션에서는 [NAVIGATION-TIMING] 1레벨에서 도입되었던 속성과 인터페이스를 정의하며, 하위 호환성을 위해 유지됩니다. 작성자는 다음 인터페이스를 사용하지 말아야 하며, 강력히 권장하는 것은 새로운 PerformanceNavigationTiming 인터페이스를 사용하는 것입니다. 자세한 변경 및 개선 사항은 변경 및 개선 요약을 참고하세요.

8.1 PerformanceTiming 인터페이스

WebIDL[Exposed=Window]
interface PerformanceTiming {
  readonly attribute unsigned long long navigationStart;
  readonly attribute unsigned long long unloadEventStart;
  readonly attribute unsigned long long unloadEventEnd;
  readonly attribute unsigned long long redirectStart;
  readonly attribute unsigned long long redirectEnd;
  readonly attribute unsigned long long fetchStart;
  readonly attribute unsigned long long domainLookupStart;
  readonly attribute unsigned long long domainLookupEnd;
  readonly attribute unsigned long long connectStart;
  readonly attribute unsigned long long connectEnd;
  readonly attribute unsigned long long secureConnectionStart;
  readonly attribute unsigned long long requestStart;
  readonly attribute unsigned long long responseStart;
  readonly attribute unsigned long long responseEnd;
  readonly attribute unsigned long long domLoading;
  readonly attribute unsigned long long domInteractive;
  readonly attribute unsigned long long domContentLoadedEventStart;
  readonly attribute unsigned long long domContentLoadedEventEnd;
  readonly attribute unsigned long long domComplete;
  readonly attribute unsigned long long loadEventStart;
  readonly attribute unsigned long long loadEventEnd;
  [Default] object toJSON();
};
참고

이 섹션에서 정의된 모든 시간 값은 자정 이후의 밀리초 단위로 측정됩니다.

navigationStart

이 속성은 사용자 에이전트가 이전 문서를 언로드 프롬프트를 마친 직후의 시간을 반환해야 합니다. 만약 이전 문서가 없으면, 현재 문서가 생성된 시간을 반환해야 합니다.

참고

이 속성은 PerformanceNavigationTiming에서는 정의되지 않습니다. 대신에, 작성자는 timeOrigin을 사용하여 동일한 타임스탬프를 얻을 수 있습니다.

unloadEventStart

이전 문서와 현재 문서가 동일 출처인 경우, 이 속성은 이전 문서의 언로드 이벤트가 시작되기 직전의 시간을 반환해야 합니다. 이전 문서가 없거나 출처가 다르면 0을 반환해야 합니다.

unloadEventEnd

이전 문서와 현재 문서가 동일 출처인 경우, 이 속성은 이전 문서의 언로드 이벤트가 완료된 직후의 시간을 반환해야 합니다. 만약 이전 문서가 없거나 출처가 다르거나 언로드가 아직 완료되지 않은 경우, 0을 반환해야 합니다.

네비게이션 시 HTTP 리디렉션이 발생하고, 모든 리디렉션이 동일 출처가 아니라면, PerformanceTiming.unloadEventStartPerformanceTiming.unloadEventEnd는 0을 반환해야 합니다.

redirectStart

네비게이션 시 HTTP 리디렉션이 발생하고 모든 리디렉션이 동일 출처라면, 이 속성은 리디렉션을 시작하는 fetch의 시작 시간을 반환해야 합니다. 그렇지 않으면 0을 반환해야 합니다.

redirectEnd

네비게이션 시 HTTP 리디렉션이 발생하고 모든 리디렉션이 동일 출처라면, 이 속성은 마지막 리디렉션 응답의 마지막 바이트를 받은 직후의 시간을 반환해야 합니다. 그렇지 않으면 0을 반환해야 합니다.

fetchStart

새 리소스를 "GET" 요청 방식으로 가져올(fetch) 경우, fetchStart는 사용자 에이전트가 HTTP 캐시를 확인하기 직전의 시간을 반환해야 합니다. 그렇지 않으면, 리소스를 가져오기 시작한 시간을 반환해야 합니다.

domainLookupStart

이 속성은 사용자 에이전트가 현재 문서에 대해 도메인 이름 조회를 시작하기 직전의 시간을 반환해야 합니다. 지속적 연결 [RFC2616]이 사용되거나, 현재 문서가 HTTP 캐시 또는 로컬 리소스에서 가져온 경우, 이 속성은 PerformanceTiming.fetchStart와 동일한 값을 반환해야 합니다.

domainLookupEnd

이 속성은 사용자 에이전트가 현재 문서의 도메인 이름 조회를 마친 직후의 시간을 반환해야 합니다. 지속적 연결 [RFC2616]이 사용되거나, 현재 문서가 HTTP 캐시 또는 로컬 리소스에서 가져온 경우, 이 속성은 PerformanceTiming.fetchStart와 동일한 값을 반환해야 합니다.

참고

HTTP 캐시 [RFC2616]에서 내용을 확인하고 가져오는 과정은 가져오기(fetching) 과정의 일부입니다. 이는 PerformanceTiming.requestStart, PerformanceTiming.responseStartPerformanceTiming.responseEnd 속성에 해당합니다.

참고

사용자 에이전트가 이미 캐시에 도메인 정보를 가지고 있는 경우, domainLookupStart와 domainLookupEnd는 캐시에서 도메인 데이터를 가져오는 시작과 끝 시간을 나타냅니다.

connectStart

이 속성은 사용자 에이전트가 문서를 가져오기 위해 서버에 연결을 시작하기 직전의 시간을 반환해야 합니다. 지속적 연결 [RFC2616]이 사용되거나, 현재 문서가 HTTP 캐시 또는 로컬 리소스에서 가져온 경우, 이 속성은 PerformanceTiming.domainLookupEnd의 값을 반환해야 합니다.

connectEnd

이 속성은 사용자 에이전트가 현재 문서를 가져오기 위해 서버와의 연결을 마친 직후의 시간을 반환해야 합니다. 지속적 연결 [RFC2616]이 사용되거나, 현재 문서가 HTTP 캐시 또는 로컬 리소스에서 가져온 경우, 이 속성은 PerformanceTiming.domainLookupEnd의 값을 반환해야 합니다.

트랜스포트 연결이 실패하고 사용자 에이전트가 연결을 재설정하는 경우, PerformanceTiming.connectStartPerformanceTiming.connectEnd는 새로운 연결에 해당하는 값을 반환해야 합니다.

PerformanceTiming.connectEnd는 트랜스포트 연결을 설정하는 시간뿐만 아니라 SSL 핸드셰이크, SOCKS 인증과 같은 추가적인 시간도 포함해야 합니다.

secureConnectionStart

이 속성은 선택 사항입니다. 이 속성을 사용할 수 없는 사용자 에이전트는 undefined로 설정해야 합니다. 이 속성을 사용할 수 있고, 현재 페이지의 scheme [URL]이 "https"인 경우, 이 속성은 사용자 에이전트가 현재 연결을 보안 처리하기 위해 핸드셰이크를 시작하기 직전의 시간을 반환해야 합니다. 이 속성이 있지만 HTTPS가 사용되지 않는 경우 0을 반환해야 합니다.

requestStart

이 속성은 사용자 에이전트가 서버, HTTP 캐시 또는 로컬 리소스에서 현재 문서를 요청하기 직전의 시간을 반환해야 합니다.

요청이 전송된 후 트랜스포트 연결이 실패하고 사용자 에이전트가 연결을 재설정하여 요청을 다시 보내는 경우, PerformanceTiming.requestStart는 새로운 요청에 해당하는 값을 반환해야 합니다.

참고

이 인터페이스에는 요청 전송 완료(예: requestEnd)를 나타내는 속성이 포함되어 있지 않습니다.

  • 사용자 에이전트가 요청 전송을 완료했다는 사실이 네트워크 트랜스포트에서의 실제 완료 시간을 항상 의미하지는 않으므로, 그런 속성의 장점이 크지 않습니다.
  • 일부 사용자 에이전트는 HTTP 계층 캡슐화로 인해 실제 요청 전송 완료 시간을 결정하는 데 높은 비용이 발생합니다.
responseStart

이 속성은 사용자 에이전트가 서버, HTTP 캐시 또는 로컬 리소스에서 응답의 첫 바이트를 받은 직후의 시간을 반환해야 합니다.

responseEnd

이 속성은 사용자 에이전트가 현재 문서의 마지막 바이트를 받거나, 트랜스포트 연결이 종료되기 직전(둘 중 먼저 발생)을 반환해야 합니다. 문서는 서버, HTTP 캐시 또는 로컬 리소스에서 받을 수 있습니다.

domLoading

이 속성은 사용자 에이전트가 현재 문서 준비 상태"loading"으로 설정하기 직전의 시간을 반환해야 합니다.

경고

기존 사용자 에이전트마다 Document 객체가 생성되는 시점이 다르기 때문에, domLoading이 반환하는 값은 구현에 따라 다르며, 의미 있는 메트릭에 사용해서는 안 됩니다.

domInteractive

이 속성은 사용자 에이전트가 현재 문서 준비 상태"interactive"로 설정하기 직전의 시간을 반환해야 합니다.

domContentLoadedEventStart

이 속성은 사용자 에이전트가 DOMContentLoaded 이벤트Document에 발행하기 직전의 시간을 반환해야 합니다.

domContentLoadedEventEnd

이 속성은 문서의 DOMContentLoaded 이벤트가 완료된 직후의 시간을 반환해야 합니다.

domComplete

이 속성은 사용자 에이전트가 현재 문서 준비 상태"complete"로 설정하기 직전의 시간을 반환해야 합니다.

현재 문서 준비 상태가 여러 번 동일한 상태로 변경되면, PerformanceTiming.domLoading, PerformanceTiming.domInteractive, PerformanceTiming.domContentLoadedEventStart, PerformanceTiming.domContentLoadedEventEndPerformanceTiming.domComplete는 해당 문서 준비 상태가 처음 변경된 시점의 시간을 반환해야 합니다.

loadEventStart

이 속성은 현재 문서의 load 이벤트가 발생하기 직전의 시간을 반환해야 하며, load 이벤트가 아직 발생하지 않은 경우 0을 반환해야 합니다.

loadEventEnd

이 속성은 현재 문서의 load 이벤트가 완료된 시점을 반환해야 하며, load 이벤트가 발생하지 않았거나 완료되지 않은 경우 0을 반환해야 합니다.

toJSON()
기본 toJSON 단계this에 대해 실행합니다.

8.2 PerformanceNavigation 인터페이스

WebIDL[Exposed=Window]
interface PerformanceNavigation {
  const unsigned short TYPE_NAVIGATE = 0;
  const unsigned short TYPE_RELOAD = 1;
  const unsigned short TYPE_BACK_FORWARD = 2;
  const unsigned short TYPE_RESERVED = 255;
  readonly attribute unsigned short type;
  readonly attribute unsigned short redirectCount;
  [Default] object toJSON();
};
TYPE_NAVIGATE

히스토리 처리 동작"default" 또는 "replace"로 설정된 네비게이션입니다.

TYPE_RELOAD

히스토리 처리 동작"reload"로 설정된 네비게이션입니다.

TYPE_BACK_FORWARD

히스토리 처리 동작"entry update"로 설정된 네비게이션입니다.

TYPE_RESERVED

위 값에 정의되지 않은 기타 네비게이션 타입입니다.

type

이 속성은 현재 브라우징 컨텍스트에서 마지막 비-리디렉션 네비게이션의 타입을 반환합니다. 반드시 아래 네비게이션 타입 값 중 하나를 가져야 합니다.

참고

Refresh pragma 지시문과 같은 클라이언트 측 리디렉션은 이 명세에서 HTTP 리디렉션으로 간주되지 않습니다. 이런 경우 type 속성은 현재 페이지를 리로드하면 TYPE_RELOAD, 새 URL로 네비게이션하면 TYPE_NAVIGATE와 같이 적절한 값을 반환해야 합니다.

redirectCount

이 속성은 현재 브라우징 컨텍스트에서 마지막 비-리디렉션 네비게이션 이후의 리디렉션 횟수를 반환해야 합니다. 리디렉션이 없거나 목적지 문서와 동일 출처가 아닌 리디렉션이 있는 경우 0을 반환해야 합니다.

toJSON()
기본 toJSON 단계this에 대해 실행합니다.

8.3 Performance 인터페이스에 대한 확장

WebIDL[Exposed=Window]
partial interface Performance {
  [SameObject]
  readonly attribute PerformanceTiming timing;
  [SameObject]
  readonly attribute PerformanceNavigation navigation;
};

Performance 인터페이스는 [PERFORMANCE-TIMELINE-2]에서 정의됩니다.

timing

timing 속성은 마지막 비-리디렉션 네비게이션 이후 브라우징 컨텍스트와 관련된 타이밍 정보를 나타냅니다. 이 속성은 PerformanceTiming 인터페이스에 의해 정의됩니다.

navigation

navigation 속성은 PerformanceNavigation 인터페이스에 의해 정의됩니다.

9. 적합성

비규범적으로 표시된 섹션뿐만 아니라, 이 명세에서 작성 지침, 다이어그램, 예시 및 참고 사항도 모두 비규범적입니다. 명세의 나머지 부분은 모두 규범적입니다.

이 문서에서 SHOULD라는 키워드는 BCP 14 [RFC2119] [RFC8174]에서 설명한 대로, 오직 대문자로 나타날 때만 해당 의미로 해석됩니다.

A. 감사의 글

Anne Van Kesteren, Arvind Jain, Boris Zbarsky, Jason Weber, Jonas Sicking, James Simonsen, Karen Anderson, Nic Jansma, Philippe Le Hegaret, Steve Souders, Todd Reifsteck, Tony Gentilcore, William Chan 그리고 Zhiheng Wang에게 본 작업에 대한 기여에 감사를 표합니다.

B. 참고문헌

B.1 규범적 참고문헌

[dom]
DOM 표준. Anne van Kesteren. WHATWG. 현행 표준. URL: https://dom.spec.whatwg.org/
[FETCH]
Fetch 표준. Anne van Kesteren. WHATWG. 현행 표준. URL: https://fetch.spec.whatwg.org/
[HR-TIME]
고해상도 시간. Yoav Weiss. W3C. 2024년 11월 7일. W3C 작업 초안. URL: https://www.w3.org/TR/hr-time-3/
[HTML]
HTML 표준. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. 현행 표준. URL: https://html.spec.whatwg.org/multipage/
[NAVIGATION-TIMING]
네비게이션 타이밍. Zhiheng Wang. W3C. 2012년 12월 17일. W3C 권고안. URL: https://www.w3.org/TR/navigation-timing/
[PERFORMANCE-TIMELINE-2]
성능 타임라인. Nicolas Pena Moreno. W3C. 2024년 2월 16일. CRD. URL: https://www.w3.org/TR/performance-timeline/
[RESOURCE-HINTS]
리소스 힌트. Ilya Grigorik. W3C. 2023년 3월 14일. W3C 작업 초안. URL: https://www.w3.org/TR/resource-hints/
[RESOURCE-TIMING-2]
리소스 타이밍. Yoav Weiss; Noam Rosenthal. W3C. 2024년 11월 4일. CRD. URL: https://www.w3.org/TR/resource-timing/
[RFC2119]
RFC에서 요구 사항 수준을 나타내는 키워드. S. Bradner. IETF. 1997년 3월. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC2616]
Hypertext Transfer Protocol -- HTTP/1.1. R. Fielding; J. Gettys; J. Mogul; H. Frystyk; L. Masinter; P. Leach; T. Berners-Lee. IETF. 1999년 6월. 표준 초안. URL: https://www.rfc-editor.org/rfc/rfc2616
[RFC7234]
Hypertext Transfer Protocol (HTTP/1.1): 캐싱. R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed. IETF. 2014년 6월. 제안된 표준. URL: https://httpwg.org/specs/rfc7234.html
[RFC8174]
RFC 2119 키워드의 대소문자 모호성. B. Leiba. IETF. 2017년 5월. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8174
[service-workers]
서비스 워커. Jake Archibald; Marijn Kruisselbrink. W3C. 2022년 7월 12일. CRD. URL: https://www.w3.org/TR/service-workers/
[URL]
URL 표준. Anne van Kesteren. WHATWG. 현행 표준. URL: https://url.spec.whatwg.org/
[WEBIDL]
Web IDL 표준. Edgar Chen; Timothy Gu. WHATWG. 현행 표준. URL: https://webidl.spec.whatwg.org/

B.2 참고용 참고문헌

[HR-TIME-2]
고해상도 시간 레벨 2. Ilya Grigorik. W3C. 2019년 11월 21일. W3C 권고안. URL: https://www.w3.org/TR/hr-time-2/
[JSMEASURE]
WWW에서 클라이언트 인지 응답 시간 측정. Ramakrishnan Rajamony; Mootaz Elnozahy. 2001년 3월. 제3회 USENIX 인터넷 기술 및 시스템 심포지엄(USITS) 논문집. URL: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.69.7329&rep=rep1&type=pdf