1. 소개
이 섹션은 규범적이지 않습니다.
웹 애플리케이션의 성능 특성을 정확하게 측정하는 것은 웹 애플리케이션을 더 빠르게 만드는 중요한 요소입니다. [JSMEASURE]에 설명된 JavaScript 기반 방법은 사용자 레이턴시 측정을 위해 애플리케이션 내에서 포괄적인 계측을 제공할 수 있지만, 많은 경우에 전체 또는 상세한 엔드 투 엔드 레이턴시 정보를 제공하지 못합니다. 예를 들어, 다음 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가 실행된 이후 페이지 로드 시간을 계산하지만, 서버에서 페이지를 가져오는 시간이나 페이지 초기화 라이프사이클에 대한 정보는 제공하지 않습니다.
이 명세서는 PerformanceNavigationTiming
인터페이스를 정의하며,
[PERFORMANCE-TIMELINE-2]에 참여하여
문서 내비게이션과 관련된 고해상도 성능 메트릭 데이터를 저장하고
검색할 수 있도록 합니다. PerformanceNavigationTiming
인터페이스는 [HR-TIME]를
사용하므로, 모든 시간 값은
엔트리의 타임 오리진을 기준으로 측정됩니다.
관련 설정 객체의 타임 오리진을 기준으로 측정됩니다.
예를 들어, 응답 끝이 내비게이션 시작 후 100ms에 발생한다면,
PerformanceNavigationTiming
데이터는 다음과 같을 수 있습니다:
startTime: 0.000 // 내비게이션 요청의 시작 시간 responseEnd: 100.000 // 마지막 바이트가 수신된 고해상도 시간
다음 스크립트는 개발자가 PerformanceNavigationTiming
인터페이스를 사용하여
문서 내비게이션과 관련된 정확한 타이밍 데이터를 얻는 방법을 보여줍니다:
< script > function showNavigationDetails() { // 첫 번째 엔트리 가져오기 const [ entry] = performance. getEntriesByType( "navigation" ); // 개발자 콘솔에서 표로 보기 console. table( entry. toJSON()); } </ script > < body onload = "showNavigationDetails()" >
2. 용어
구문 "a Foo object"는 실제로 Foo가 인터페이스인 경우,
더 정확한 "인터페이스 Foo를 구현하는 객체" 대신에 사용되기도 합니다.
current document 용어는 Window 객체의 최신 Document 객체와 연관된 문서를 의미합니다.
본 명세 전체에서, 모든 시간 값은 문서 내비게이션 시작 이후의 밀리초 단위로 측정됩니다. 예를 들어 문서 내비게이션 시작은 시간 0에 발생합니다. 현재 시간 용어는 문서 내비게이션 시작부터 현재 시점까지의 밀리초 수를 의미합니다. 이러한 시간 정의는 [HR-TIME] 명세에 기반합니다.
3. 내비게이션 타이밍
3.1. PerformanceEntry
인터페이스와의 관계
PerformanceNavigationTiming
인터페이스는 아래와 같은
PerformanceEntry
인터페이스 속성을 확장합니다:
entryTypegetter 단계는DOMString"navigation"을 반환합니다.startTimegetter 단계는 시간 값이 0인DOMHighResTimeStamp를 반환합니다.durationgetter 단계는DOMHighResTimeStamp를 반환하며, 그 값은loadEventEnd와 this의startTime차이로 계산합니다.
PerformanceNavigationTiming
을 구현하는 사용자 에이전트는
"navigation"을
supportedEntryTypes
에 포함해야 합니다
Window
컨텍스트에서. 이는 개발자가 내비게이션 타이밍 지원을 감지할 수 있도록 합니다.
3.2.
PerformanceResourceTiming 인터페이스와의 관계
PerformanceNavigationTiming
인터페이스는 아래와 같은
PerformanceResourceTiming
인터페이스 속성을 확장합니다:
-
redirectStartgetter 단계는 아래와 같이 동작합니다:- this의 redirect count가 0이면 0을 반환합니다.
- 그 외에는 this의
redirectStart를 반환합니다.
-
redirectEndgetter 단계는 아래와 같이 동작합니다:- this의 redirect count가 0이면 0을 반환합니다.
- 그 외에는 this의
redirectEnd를 반환합니다.
`redirectStart`와 `redirectEnd`는
PerformanceResourceTiming에서도 노출되지만, 내비게이션 타이밍에서는 교차 출처 리다이렉트 내비게이션의 경우 0을 반환하는 등 의미가 다릅니다. -
workerStartgetter 단계는 아래와 같이 동작합니다:- workerTiming을 this의 service worker timing으로 지정합니다.
- workerTiming이 null이면, this의 프로토타입의 `workerStart`를 반환합니다.
- workerTiming의 start time을 반환합니다.
`workerStart`는
PerformanceResourceTiming에서도 노출되지만, 내비게이션 타이밍에서는 하위 리소스와는 달리, 내비게이션이 서비스 워커의 활성화 또는 실행을 유발할 수 있습니다. 내비게이션 타이밍 맥락에서 `workerStart`는 워커가 활성화 또는 시작되기 직전의 타임스탬프를 반환합니다. 보다 정확한 정의는 [service-workers]를 참고하십시오. -
fetchStartgetter 단계는 아래와 같이 동작합니다:- workerTiming을 this의 service worker timing으로 지정합니다.
- workerTiming이 null이면, this의 프로토타입의 `fetchStart`를 반환합니다.
- workerTiming의 fetch event dispatch time을 반환합니다.
내비게이션에 service worker가 사용되는 경우, `fetchStart` 오버로드는
PerformanceResourceTiming에서의 의미와 다릅니다.FetchEvent가 service worker에 대해 디스패치되기 직전의 타임스탬프를 반환합니다. 문서 내비게이션 타이밍 엔트리에서 `workerStart`와 `fetchStart`의 시간 차이를 사용해, 워커가 초기화 또는 활성화되는 데 걸린 시간을 대략적으로 알 수 있습니다. [service-workers]에 자세한 정의가 있습니다.
current document
리소스만 성능 타임라인에 포함됩니다; 성능 타임라인에는
PerformanceNavigationTiming
객체가 하나만 존재합니다.
3.3. PerformanceNavigationTiming 인터페이스
requestStart,
responseStart
및
responseEnd
속성에서 다룹니다.
[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 readonly attribute PerformanceTimingConfidence ; [confidence Default ]object (); };toJSON
PerformanceNavigationTiming
는 연관된
문서 로드 타이밍 정보 문서 로드 타이밍를 가집니다.
PerformanceNavigationTiming
는 연관된
문서 언로드 타이밍 정보 이전 문서 언로드 타이밍을 가집니다.
PerformanceNavigationTiming
는 연관된
숫자 redirect count를 가집니다.
PerformanceNavigationTiming
는 연관된
NavigationTimingType
navigation type
을 가집니다.
PerformanceNavigationTiming
는 연관된
DOMHighResTimeStamp
`Critical-CH` 재시작 시간
을 가집니다.
PerformanceNavigationTiming
는 연관된
NotRestoredReasons
not restored reasons
을 가집니다.
PerformanceNavigationTiming
는 연관된
PerformanceTimingConfidence
confidence value
를 가집니다.
PerformanceNavigationTiming
는 연관된 실수
randomized trigger rate
를 가지며 이는 구현 정의됨입니다.
PerformanceNavigationTiming
는 연관된 PerformanceTimingConfidenceValue
underlying confidence value
를 가지며 구현 정의됨입니다.
PerformanceNavigationTiming
는 연관된 null 또는 service worker timing info
service worker timing
을 가집니다.
unloadEventStart getter 단계는 this의 이전 문서 언로드 타이밍의 언로드 이벤트 시작 시간을 반환합니다.
이전 문서와 현재 문서가 같은 origin일 경우 이 타임스탬프는 사용자 에이전트가 이전 문서 언로드 이벤트를 시작하기 직전에 측정됩니다. 이전 문서가 없거나 이전 문서의 origin이 현재 문서와 다르면 이 속성은 0을 반환합니다.
unloadEventEnd getter 단계는 this의 이전 문서 언로드 타이밍의 언로드 이벤트 종료 시간을 반환합니다.
이전 문서와 현재 문서가 같은 origin일 경우 이 타임스탬프는 사용자 에이전트가 이전 문서 언로드 이벤트 처리를 완료한 직후에 측정됩니다. 이전 문서가 없거나 이전 문서의 origin이 현재 문서와 다르면 이 속성은 0을 반환합니다.
domInteractive getter 단계는 this의 문서 로드 타이밍의 DOM 인터랙티브 시간을 반환합니다.
이 타임스탬프는 사용자 에이전트가 현재 문서 준비 상태를 "interactive"로 설정하기 전에 측정됩니다.
domContentLoadedEventStart getter 단계는 this의 문서 로드 타이밍의 DOMContentLoaded 이벤트 시작 시간을 반환합니다.
이 타임스탬프는 사용자 에이전트가 DOMContentLoaded 이벤트를 디스패치하기 전에 측정됩니다.
domContentLoadedEventEnd getter 단계는 this의 문서 로드 타이밍의 DOMContentLoaded 이벤트 종료 시간을 반환합니다.
이 타임스탬프는 사용자 에이전트가 DOMContentLoaded 이벤트 처리를 완료한 직후에 측정됩니다.
domComplete getter 단계는 this의 문서 로드 타이밍의 DOM 완료 시간을 반환합니다.
이 타임스탬프는 사용자 에이전트가 현재 문서 준비 상태를 "complete"로 설정하기 전에 측정됩니다. 정확한 정의는 문서 준비 상태를 참고하세요.
loadEventStart getter 단계는 this의 문서 로드 타이밍의 로드 이벤트 시작 시간을 반환합니다.
이 타임스탬프는 사용자 에이전트가 문서에 대해 load 이벤트를 디스패치하기 전에 측정됩니다.
loadEventEnd getter 단계는 this의 문서 로드 타이밍의 로드 이벤트 종료 시간을 반환합니다.
이 타임스탬프는 사용자 에이전트가 문서의 load 이벤트 처리를 끝낸 직후에 측정됩니다.
type getter 단계는 this의 navigation type을 실행합니다.
Refresh 프라그마 지시자와 같은 클라이언트 측 리다이렉트는 이 명세에서 HTTP 리다이렉트로 간주되지 않습니다. 이런 경우 type 속성은 현재 페이지를 새로 고침하는 경우 reload, 새로운 URL로 이동하는 경우 navigate 등 적절한 값을 반환해야 합니다.
redirectCount getter 단계는 this의 redirect count를 반환합니다.
criticalCHRestart getter 단계는 this의 `Critical-CH` 재시작 시간을 반환합니다.
criticalCHRestart가 0이 아닌 경우, navigationStart, unloadEventStart, unloadEventEnd를 제외한 모든 다른 타임스탬프보다 앞에 위치합니다. 이는 내비게이션의 리다이렉트 부분이 재시작된 순간을 표시하기 때문입니다.
notRestoredReasons getter 단계는 this의 not restored reasons를 반환합니다.
confidence getter 단계는 다음 단계를 실행합니다:
- this의 문서 로드 타이밍의 DOM 인터랙티브 시간이 0이면, null을 반환합니다.
- this의 confidence value가 null이 아니면, 이를 반환합니다.
- confidence를,
PerformanceTimingConfidence객체로 생성하고 this의 관련 설정 객체의 관련 realm에서 생성합니다. - confidence의
randomizedTriggerRate를 this의 randomized trigger rate로 설정합니다. -
confidence의
value를 아래 알고리즘으로 결정합니다:- p를 confidence의
randomizedTriggerRate값으로 합니다. - underlying을 this의 underlying confidence
value, 즉
PerformanceTimingConfidenceValue값으로 합니다. - r을 [0, 1) 구간에서 균등 무작위로 추출한 실수로 합니다.
- r ≥ p이면 underlying을 반환합니다.
- 아니면:
- p를 confidence의
- confidence를 반환합니다.
이 값들은 한 번만 정해지고, this의 수명 동안 변경되지 않아야 합니다.
이 섹션은 RUM 제공자와 개발자가
confidence를 해석하는 데 도움이 되도록 작성되었습니다.
randomized trigger rate가 레코드마다
다를 수 있기 때문에
편향 없는 집계를 복원하려면 레코드별 가중치가 필요합니다.
아래 절차는 value
기반 가중치 적용 방법을 요약 통계 산출 전에 보여줍니다.
high
및 low
모두에 대해 편향 보정 평균을 계산하려면:
-
각 레코드마다:
- p를 해당 레코드의
randomizedTriggerRate로 지정합니다. - c를 해당 레코드의
value로 지정합니다. - R을 c가
high일 때 1, 아니면 0으로 지정합니다. -
c에 따라 레코드별 가중치 w를 계산합니다:
- High 평균 추정시: w
= (R - (p / 2)) / (1 - p) - Low 평균 추정시:
w
= ((1 - R) - (p / 2)) / (1 - p)
- High 평균 추정시: w
- weighted_duration =
duration* w
- p를 해당 레코드의
- total_weighted_duration을 모든 레코드의 weighted_duration 합으로 지정합니다.
- sum_weights를 모든 레코드의 w 값 합으로 지정합니다.
- debiased_mean = total_weighted_duration / sum_weights, 즉 sum_weights가 0에 가까워지지 않았을 때 계산합니다.
high
및 low
모두에 대해 편향 보정 분위수를 계산하려면:
- 편향 보정 평균 계산과 동일하게 레코드별 가중치 w를 구합니다.
- sum_weights를 모든 레코드의 w 합으로 지정합니다.
- sorted_records를 모든 레코드에서
duration값 기준으로 오름차순 정렬한 것으로 지정합니다. - 원하는 percentile(0-100)에 대해
q
= percentile / 100.0 -
sorted_records를 순회하며 각 레코드마다:
- 레코드별 누적 가중치 cw 계산:
cw
= sum_{i: duration_i <= duration_j} w_i - 레코드별 편향 보정 누적 분포 함수:
cdf
= cw / sum_weights
- 레코드별 누적 가중치 cw 계산:
cw
- cdf ≥ q인 처음 인덱스 idx를 찾습니다.
-
보간 비율 계산:
- lower_cdf를 sorted_records[idx-1]의 cdf로 지정
- upper_cdf를 sorted_records[idx]의 cdf로 지정
- lower_cdf = upper_cdf면
durationfor sorted_records[idx] 반환 - 아니면:
toJSON() 메서드는 기본 toJSON 단계를 this에 대해 실행합니다.
3.3.1.
NavigationTimingType
열거형
enum {NavigationTimingType ,"navigate" ,"reload" };"back_forward"
값 정의는 다음과 같습니다:
- navigate
- 히스토리 처리 동작이 "default" 또는 "replace"로 설정된 내비게이션.
- reload
- navigable이 재로드(reload)된 내비게이션.
- back_forward
- 히스토리에서 적용된 내비게이션.
위 열거형 값의 형식은 WebIDL의 열거형 값 포맷 권고와 일치하지 않습니다. 이미 출시된 구현과의 하위 호환성 문제로 변경할 수 없습니다. [WebIDL]
3.3.2.
PerformanceTimingConfidence
인터페이스
[Exposed =Window ]interface {PerformanceTimingConfidence readonly attribute double ;randomizedTriggerRate readonly attribute PerformanceTimingConfidenceValue ;value object (); };toJSON
- randomizedTriggerRate
-
이 속성은 [0, 1) 구간의 실수를 반환해야 하며, confidence
value를 노이즈 처리하여 노출하는 빈도를 나타냅니다. - value
-
이 속성은
PerformanceTimingConfidenceValue값을 반환해야 합니다. - toJSON()
-
이 메서드는 기본 toJSON 단계를 this에 대해 실행합니다.
3.3.3. PerformanceTimingConfidenceValue
열거형
enum {PerformanceTimingConfidenceValue ,"high" };"low"
값 정의는 다음과 같습니다:
- high
- 사용자 에이전트가 내비게이션 메트릭이 현재 사용자의 장치를 대표한다고 간주함.
- low
- 내비게이션 메트릭이 반드시 현재 사용자의 장치를 대표하지 않을 수 있습니다. 사용자 에이전트는 장치 상태나 사용자 설정을 고려할 수 있습니다.
underlying confidence value를 결정할 때, 사용자 에이전트는 반드시 일시적 런타임 조건 (예: 사용자 에이전트 시작, 일시적 CPU 사용량 급등, 메모리 압박 등)만을 고려해야 합니다.
사용자 에이전트는 underlying confidence value 기준을 영구적인 장치 또는 프로필 특성(예: 물리적 RAM 용량, CPU 코어 수, 설치된 확장 개수, 기타 정적 환경 설정 등)에 두어서는 안 됩니다.
confidence 값은 시스템 성능보다는 런타임 변동성을 반영하기 위한 것입니다.
4. 프로세스
4.1. 처리 모델
PerformanceNavigationTiming
인터페이스에서 정의된 타이밍 속성을 보여줍니다. 괄호로 표시된 속성은 다른 origin의 문서가 관여하는
내비게이션에서는 제공되지 않을 수 있습니다.
5. 내비게이션 타이밍 항목 생성
각 document에는 navigation timing entry가 연관되어 있으며, 기본값은 설정되지 않음.
내비게이션 타이밍 항목을 생성하려면
Document
document와
fetch timing info fetchTiming,
숫자 redirectCount,
NavigationTimingType
navigationType,
null 또는 service worker timing info serviceWorkerTiming,
DOMString cacheMode,
DOMHighResTimeStamp
criticalCHRestart,
response body info bodyInfo를 받아
다음을 수행합니다:
- global을 document의 relevant global object로 지정
- navigationTimingEntry를 global의
realm에서 새
PerformanceNavigationTiming객체로 생성 - 리소스 타이밍 항목을 설정을
navigationTimingEntry에 대해 "
navigation", document의URL, fetchTiming, cacheMode, bodyInfo로 실행 - navigationTimingEntry의 문서 로드 타이밍을 document의 로드 타이밍 정보로 지정
- navigationTimingEntry의 이전 문서 언로드 타이밍을 document의 이전 문서 언로드 타이밍으로 지정
- navigationTimingEntry의 redirect count를 redirectCount로 지정
- navigationTimingEntry의 navigation type을 navigationType으로 지정
- navigationTimingEntry의 service worker timing 을 serviceWorkerTiming으로 지정
- document의 navigation timing entry를 navigationTimingEntry로 지정
- navigationTimingEntry의 `Critical-CH` 재시작 시간을 criticalCHRestart로 지정
- navigationTimingEntry의 not restored reasons 를 NotRestoredReasons 객체 생성 결과 값(인자로 document의 not restored reasons 사용)으로 지정
- navigationTimingEntry를 global의 performance entry buffer에 추가
navigation timing entry를 큐에 추가하려면
Document
document에 대해,
큐에 document의
navigation timing entry를 넣으십시오.
6. 프라이버시 고려사항
이 섹션은 규범적이지 않습니다.
6.1. 정보 공개
정교하게 설계된 타이밍 공격을 통해 최종 사용자의 브라우징 및 활동 이력이 노출될 가능성이 있습니다. 예를 들어, 언로드 시간(unloading time)은 이전 페이지의 unload handler 실행에 걸린 시간을 드러내므로, 사용자의 로그인 상태를 추론하는 데 이용될 수 있습니다. 이러한 공격은 문서 언로드 시 동일 출처 확인 알고리즘을 강제 적용하여, HTML 명세에 설명된 대로 완화되었습니다.
완화된 동일 출처 정책은 문서 간 무단 접근을 충분히 막지 못합니다. 공유 호스팅 환경에서 신뢰할 수 없는 제3자가 동일 IP에서 다른 포트로 HTTP 서버를 운영할 수 있습니다.
6.2. 디렉터리 교차 접근
같은 호스트명을 공유하는 서로 다른 페이지 ― 예: 사용자 생성 콘텐츠가 있는 사이트에서 서로 다른 저자가 만든 컨텐츠 ― 는 경로로 접근을 제한하는 기능이 없으므로 같은 origin으로 간주됩니다. 이러한 페이지 간 이동 시, 이후 페이지가 이전 페이지의 타이밍 정보(리다이렉션, 언로드 이벤트 등)를 접근할 수 있습니다.
7. 보안 고려사항
이 섹션은 규범적이지 않습니다.
PerformanceNavigationTiming
인터페이스는 이전 문서의 타이밍 정보를 현재
document에 노출합니다.
이전 문서 정보를 포함하는 PerformanceNavigationTiming
속성 접근을 제한하기 위해,
이전 문서 언로딩 알고리즘은 동일 출처 정책을 적용하며,
이전 문서 관련 속성들은 0으로 설정됩니다.
7.1. 프록시 서버 감지
사용자 에이전트와 웹 서버 사이에 프록시가 배치된 경우,
connectStart
와
connectEnd
속성 사이의 시간은 실제로 사용자 에이전트와 프록시 간 지연을 나타냅니다.
이로 인해 웹 서버는 프록시의 존재를 추론할 수 있습니다.
SOCKS 프록시의 경우 이 구간은 프록시 인증 시간, 프록시가 웹 서버에 연결하는 시간도 포함하므로 프록시 탐지가 모호해집니다.
HTTP 프록시의 경우 사용자 에이전트가 프록시 서버 존재 자체를 알지 못할 수 있으므로, 이 공격을 항상 완화할 방법이 있는 것은 아닙니다.
8. 폐기됨
이 섹션은
[NAVIGATION-TIMING] 1레벨에서 도입되었던 속성과 인터페이스를
하위 호환성 유지를 위해 정의합니다. 저자는 아래 인터페이스 사용을 피해야 하며,
새로운 PerformanceNavigationTiming
인터페이스 사용을 권장합니다 ― 변경점 및 개선 요약 참조.
8.1. PerformanceTiming 인터페이스
[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
-
이전 문서와 현재 문서가 같은 origin일 때, 이 속성은 사용자 에이전트가 이전 문서의 unload 이벤트를 시작하기 직전의 시간을 반환해야 합니다. 이전 문서가 없거나 이전 문서의 origin이 현재와 다르면 0을 반환해야 합니다.
- unloadEventEnd
-
이전 문서와 현재 문서가 동일 출처일 때, 이 속성은 사용자 에이전트가 이전 문서의 unload 이벤트 처리를 완료한 직후의 시간을 반환해야 합니다. 이전 문서가 없거나 이전 문서의 origin이 다르거나 unload가 끝나지 않은 경우 0을 반환해야 합니다.
내비게이션 중 HTTP 리다이렉트가 있고, 모든 리다이렉트가 동일 출처가 아닐 경우에는
unloadEventStart와unloadEventEnd모두 0을 반환해야 합니다. - redirectStart
-
내비게이션 중 HTTP 리다이렉트가 있고, 모든 리다이렉트가 동일 출처라면 이 속성은 리다이렉트를 시작하는
페치 시작 시간을 반환해야 합니다. 그렇지 않으면 0을 반환해야 합니다. - redirectEnd
-
내비게이션 중 HTTP 리다이렉트가 있고, 모든 리다이렉트가 동일 출처일 경우 마지막 리다이렉트 응답의 마지막 바이트를 수신한 직후의 시간을 반환해야 합니다. 그렇지 않으면 0을 반환해야 합니다.
- fetchStart
-
새 리소스가 "GET" 요청 메서드로 페치(fetch) 될 때, fetchStart는 사용자 에이전트가 HTTP 캐시 [RFC7234]를 확인하기 직전의 시간을 반환해야 합니다. 그렇지 않은 경우에는 리소스의 페치 시작 시간을 반환해야 합니다.
- domainLookupStart
-
이 속성은 사용자 에이전트가 현재 문서에 대한 도메인 네임 조회를 시작하기 직전의 시간을 반환해야 합니다. 지속 연결 [RFC2616]이 사용된 경우 또는 현재 문서가 HTTP 캐시 [RFC7234]나 로컬 리소스에서 가져온 경우, 이 속성은
fetchStart와 동일한 값을 반환해야 합니다. - domainLookupEnd
-
이 속성은 사용자 에이전트가 도메인 네임 조회를 완료한 직후의 시간을 반환해야 합니다. 지속 연결 [RFC2616]이 사용된 경우 또는 현재 문서가 HTTP 캐시 [RFC7234]나 로컬 리소스에서 가져온 경우, 이 속성은
fetchStart와 동일한 값을 반환해야 합니다.HTTP 캐시 [RFC2616]에서의 내용 확인 및 가져오기는 페치 과정의 일부입니다. 이는
requestStart,responseStart및responseEnd속성에서 다뤄집니다.사용자 에이전트가 이미 캐시에 도메인 정보를 갖고 있는 경우, domainLookupStart와 domainLookupEnd는 캐시에서 도메인 데이터를 가져오기 시작/끝 시간을 의미합니다.
- connectStart
-
이 속성은 사용자 에이전트가 서버와 연결을 시작하기 직전의 시간을 반환해야 합니다. 지속 연결 [RFC2616]이 사용된 경우 또는 현재 문서가 HTTP 캐시 [RFC7234]나 로컬 리소스에서 가져온 경우,
domainLookupEnd값을 반환해야 합니다. - connectEnd
-
이 속성은 사용자 에이전트가 서버와의 연결을 완료한 직후의 시간을 반환해야 합니다. 지속 연결 [RFC2616]이 사용된 경우 또는 현재 문서가 HTTP 캐시 [RFC7234]나 로컬 리소스에서 가져온 경우,
domainLookupEnd값을 반환해야 합니다.트랜스포트 연결이 실패하여 사용자 에이전트가 연결을 다시 열 경우,
connectStart와connectEnd는 새로운 연결에 대한 해당 값을 반환해야 합니다.connectEnd값에는 트랜스포트 연결 수립 시간뿐 아니라, SSL 핸드셰이크나 SOCKS 인증 같은 시간도 포함됩니다. - secureConnectionStart
-
이 속성은 선택적입니다. 이 속성이 없는 사용자 에이전트는 undefined로 설정해야 합니다. 만약 이 속성이 있고, 현재 페이지 스킴(scheme) [URL]이 "https"라면, 사용자 에이전트가 보안 연결 핸드셰이크를 시작하기 직전의 시간을 반환해야 합니다. 이 속성이 있으나 HTTPS가 아닌 경우 0을 반환해야 합니다.
- requestStart
-
이 속성은 사용자 에이전트가 현재 문서를 서버, HTTP 캐시 [RFC7234] 또는 로컬 리소스에서 요청하기 직전의 시간을 반환해야 합니다.
요청 송신 후 트랜스포트 연결이 실패해 사용자 에이전트가 새로 연결하고 요청을 재전송한 경우,
requestStart는 새로운 요청의 해당 값을 반환해야 합니다.본 인터페이스에는 요청 송신 완료(requestEnd 등)를 나타내는 속성이 없습니다.
- 사용자 에이전트의 요청 송신 완료는 네트워크 트랜스포트 계층의 실제 요청 송신 완료와 항상 일치하지 않아, 해당 속성이 큰 의미를 갖지 않습니다.
- 일부 사용자 에이전트는 HTTP 계층 캡슐화 때문에 실제 요청 송신 완료 시점을 판별하는 데 비용이 높습니다.
- responseStart
-
이 속성은 사용자 에이전트가 서버 또는 HTTP 캐시 [RFC7234], 또는 로컬 리소스에서 응답의 첫 바이트를 수신한 직후의 시간을 반환해야 합니다.
- responseEnd
-
이 속성은 사용자 에이전트가 현재 문서의 마지막 바이트를 수신하거나 트랜스포트 연결이 종료되기 직전 중 더 먼저 도달한 시점의 시간을 반환해야 합니다. 문서는 서버, HTTP 캐시 [RFC7234], 또는 로컬 리소스에서 수신될 수 있습니다.
- domLoading
-
이 속성은 사용자 에이전트가 현재 문서 준비 상태를 "loading"으로 설정하기 직전 시점을 반환해야 합니다.
Document 객체가 생성되는 시점 차이 등으로 인해,
domLoading이 반환하는 값은 구현에 따라 다르며, 의미 있는 메트릭에 사용하지 않는 것이 좋습니다. - domInteractive
-
이 속성은 사용자 에이전트가 현재 문서 준비 상태를 "interactive"로 설정하기 직전 시점을 반환해야 합니다.
- domContentLoadedEventStart
-
이 속성은 사용자 에이전트가
Document에 DOMContentLoaded 이벤트를 발생시키기 직전 시점을 반환해야 합니다. - domContentLoadedEventEnd
-
이 속성은 문서의 DOMContentLoaded 이벤트 처리 완료 직후 시점을 반환해야 합니다.
- domComplete
-
이 속성은 사용자 에이전트가 현재 문서 준비 상태를 "complete"로 설정하기 직전 시점을 반환해야 합니다.
현재 문서 준비 상태가 같은 값으로 여러 번 변경될 경우,
domLoading,domInteractive,domContentLoadedEventStart,domContentLoadedEventEnd및domComplete는 해당 문서 준비 상태 변경의 첫 발생 시점을 반환해야 합니다. - loadEventStart
-
이 속성은 현재 문서의 load 이벤트가 발생하기 직전 시점을 반환해야 하며, 아직 load 이벤트가 트리거되지 않았다면 0을 반환해야 합니다.
- loadEventEnd
-
이 속성은 현재 문서의 load 이벤트 처리가 완료된 시점을 반환해야 합니다. load 이벤트가 발생하지 않았거나 아직 완료되지 않았으면 0을 반환해야 합니다.
- toJSON()
- 기본 toJSON 단계를 this에 대해 실행합니다.
8.2. PerformanceNavigation 인터페이스
[Exposed =Window ]interface {PerformanceNavigation const unsigned short = 0;TYPE_NAVIGATE const unsigned short = 1;TYPE_RELOAD const unsigned short = 2;TYPE_BACK_FORWARD const unsigned short = 255;TYPE_RESERVED 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
-
이 속성은 마지막 비-리다이렉트 내비게이션의 타입을 반환해야 합니다. 아래 값 중 하나를 가져야 합니다:
navigation type.Refresh 프라그마 지시어와 같은 클라이언트 측 리다이렉트는 이 명세에서 HTTP 리다이렉트로 간주되지 않습니다. 이 경우
type속성은 현재 페이지를 새로고침했다면TYPE_RELOAD, 새 URL로 이동했다면TYPE_NAVIGATE값 등 적절한 값을 반환해야 합니다. - redirectCount
-
이 속성은 마지막 비-리다이렉트 내비게이션 이후 발생한 리다이렉트 횟수를 반환해야 합니다. 리다이렉트가 없거나, 리다이렉트 중 목적지 문서와 동일 출처가 아닌 것이 있으면 0을 반환해야 합니다.
- toJSON()
- 기본 toJSON 단계를 this에 대해 실행합니다.
8.3.
Performance 인터페이스에 대한 확장
[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. 감사의 말
이 작업에 기여해 주신 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께 감사드립니다.