Copyright © 2024 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
이 명세는 시간의 기준(origin)과 현재 시간을 밀리초 이하의 해상도로 제공하는 API를 정의합니다. 이 시간은 시스템 시계의 변화나 조정에 영향을 받지 않습니다.
이 섹션은 문서가 발행된 시점의 상태를 설명합니다. 현재 W3C 발행물 목록과 최신 기술 보고서 개정판은 W3C 기술 보고서 색인에서 확인할 수 있습니다: https://www.w3.org/TR/.
이 문서는 웹 성능 워킹 그룹에서 권고 트랙을 사용하여 워킹 드래프트로 발행되었습니다.
워킹 드래프트로 발행되었다고 해서 W3C 및 그 회원의 지지를 의미하지는 않습니다.
이 문서는 초안이며 언제든지 다른 문서에 의해 갱신, 대체 또는 폐기될 수 있습니다. 이 문서를 진행 중인 작업 이외의 용도로 인용하는 것은 부적절합니다.
이 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성되었습니다. W3C는 그룹 산출물 관련 공개 특허 목록을 유지하고 있으며, 해당 페이지에는 특허 공개 방법도 안내되어 있습니다. 본인이 필수적 청구(Essential Claim(s))를 포함한다고 생각되는 특허를 알고 있다면, W3C 특허 정책 6절에 따라 정보를 공개해야 합니다.
이 문서는 2023년 11월 3일 W3C 프로세스 문서가 적용됩니다.
이 섹션은 규범적이지 않습니다.
ECMAScript 언어 명세 [ECMA-262]는
Date
객체를 1970년 1월 1일 UTC 이후의 밀리초 단위 시간 값으로 정의합니다. 대부분의 경우, 이러한 시간 정의는 충분하며 해당 값은 1970년 1월 1일 UTC 이후 약 285,616년까지의
임의의 순간을 밀리초 정밀도로 나타낼 수 있습니다.
실제로 이러한 시간 정의는 시계의 드리프트(오차) 및 시스템 시계의 조정에 영향을 받을 수 있습니다. 시간 값이 항상 단조 증가하지 않을 수 있으며, 이후 값이 감소하거나 동일하게 유지될 수 있습니다.
예를 들어, 아래 스크립트에서 계산된 duration
은 양수, 음수 또는 0이 될 수 있습니다:
var mark_start = Date.now();
doTask(); // 어떤 작업
var duration = Date.now() - mark_start;
특정 작업에서는 이러한 시간 정의가 충분하지 않을 수 있습니다. 그 이유는:
이 명세는
Date.now()
[ECMA-262]의 동작을 변경하는 것을 제안하지 않습니다. 이는 현재 캘린더 시간의
값을 결정하는 데 실제로 유용하며 오랜 기간 활용되어 왔기 때문입니다. DOMHighResTimeStamp
타입,
Performance
.now
()
메서드, 그리고
Performance
.timeOrigin
속성들은
Performance
인터페이스에서 위 문제를 해결하며,
밀리초 이하의 해상도를 가진 단조 증가하는 시간 값을 제공합니다.
밀리초 이하의 해상도를 제공하는 것은 이 명세에서 반드시 요구되는 사항이 아닙니다. 구현체에서는 개인정보 보호 및 보안상의 이유로 노출되는 타이머 해상도를 제한하거나, 밀리초 이하의 타이머를 제공하지 않을 수 있습니다. 밀리초 이하의 해상도에 의존하는 사용 사례는 이러한 상황에서 만족되지 않을 수 있습니다.
이 섹션은 규범적이지 않습니다.
이 명세는 몇 가지 주요 기능을 정의합니다: 안정적인 단조 시계를 기반으로 하는 타임스탬프를 제공하며, 서로 다른 컨텍스트 간에 비교 가능하고, 잠재적으로 밀리초 이하의 해상도를 가집니다.
성능 측정과 관련하여 안정적인 단조 시계가 필요한 이유는, 무관한 시계 드리프트가 측정값을 왜곡시켜 측정이 무의미해질 수 있기 때문입니다. 예를 들어, 문서 탐색, 리소스 가져오기, 스크립트 실행의 경과 시간을 정확하게 측정하려면, 밀리초 이하의 해상도를 가진 단조 증가 시계가 필요합니다.
컨텍스트 간 타임스탬프 비교는 예를 들어 Worker
와 메인 스레드 간에 작업을 동기화하거나,
이벤트 타임라인의 통합 뷰를 만들기 위해 계측할 때 필수적입니다.
마지막으로, 밀리초 이하의 타이머가 필요한 대표적인 사용 사례는 다음과 같습니다:
이 섹션은 규범적이지 않습니다.
개발자는 Worker
또는 SharedWorker
와 같이
서로 다른 시간 기준(origin)을 가진 이벤트를
포함하여,
전체 애플리케이션의 타임라인을 구성하고자 할 수 있습니다. 이러한 이벤트를 동일한 타임라인에 표시하기 위해,
애플리케이션은 DOMHighResTimeStamp
를
Performance
.timeOrigin
속성을 활용해 변환할 수 있습니다.
// ---- worker.js -----------------------------
// Shared worker 스크립트
onconnect = function(e) {
var port = e.ports[0];
port.onmessage = function(e) {
// 워커에서 작업 실행 시간 측정
var task_start = performance.now();
result = runSomeWorkerTask();
var task_end = performance.now();
}
// 결과 및 epoch 기준 타임스탬프를 다른 컨텍스트로 전송
port.postMessage({
'task': 'Some worker task',
'start_time': task_start + performance.timeOrigin,
'end_time': task_end + performance.timeOrigin,
'result': result
});
}
// ---- application.js ------------------------
// 문서에서 작업 타이밍 측정
var task_start = performance.now();
runSomeApplicationTask();
var task_end = performance.now();
// 개발자가 제공한 런타임 성능 데이터 업로드 메서드
reportEventToAnalytics({
'task': 'Some document task',
'start_time': task_start,
'duration': task_end - task_start
});
// 워커 타임스탬프를 문서의 시간 기준(origin)으로 변환
var worker = new SharedWorker('worker.js');
worker.port.onmessage = function (event) {
var msg = event.data;
// epoch 기준 타임스탬프를 문서의 시간 기준으로 변환
msg.start_time = msg.start_time - performance.timeOrigin;
msg.end_time = msg.end_time - performance.timeOrigin;
reportEventToAnalytics(msg);
}
시계는 시간의 흐름을 추적하며 알고리즘 단계가 실행되고 있는 안전하지 않은 현재 시간을 보고할 수 있습니다. 웹 플랫폼에는 다양한 종류의 시계가 있습니다. 모든 웹 플랫폼의 시계는 실제 세계의 1밀리초 시간에 대해 1밀리초의 시계 시간을 세려고 하지만, 정확하게 맞지 않는 경우를 처리하는 방식에는 차이가 있습니다.
단조 시계의 안전하지 않은 현재 시간은 절대 감소하지 않으므로 시스템 시계 조정에 영향을 받지 않습니다. 단조 시계는 단일 user agent의 실행 안에서만 존재하므로, 서로 다른 실행에서 발생하는 이벤트를 비교하는 데 사용할 수 없습니다.
단조 시계는 사용자의 시간 개념에 맞게 조정할 수 없으므로, 측정 용도로만 사용해야 하며 사용자에게 보여지는 시간에는 벽시계를 사용해야 합니다.
user agent는 브라우저를 재시작하거나, 격리된 브라우징 세션(예: 시크릿 모드 등)을 시작하거나 또는 기존 설정 객체와 통신할 수 없는 environment settings object를
생성할 때,
Unix
epoch의 추정 단조 시간을 새로 선택할 수 있습니다. 따라서 개발자는 공유된 타임스탬프를 모든 과거, 현재, 미래 컨텍스트에서 단조 속성을 유지하는
절대 시간으로 사용해서는 안 되며, 실제로 단조 속성은 메시지 교환 메커니즘(예: postMessage
(message, options)
,
BroadcastChannel
등)을 통한 메시지 교환이 가능한 컨텍스트에만 적용됩니다.
특정 상황(예: 탭이 백그라운드로 전환될 때)에는 user agent가 해당 컨텍스트에서 타이머와 주기적 콜백을 제한하거나 완전히 중지할 수 있습니다. 이러한 제한은 단조 시계가 반환하는 시간의 해상도나 정확성에는 영향을 주지 않아야 합니다.
각 시계의 안전하지 않은 현재 시간은 안전하지 않은 순간을 반환합니다. 시간을 거칠게(coarsen) 변환하면 이 안전하지 않은 순간이 거칠게 변환된 순간(moment)으로 바뀝니다. 안전하지 않은 순간과 순간은 서로 다른 시계 간에는 비교할 수 없습니다.
순간과 안전하지 않은 순간은 시간의 한 지점을 나타내므로, 직접 숫자로 저장할 수 없습니다. 구현체는 일반적으로 순간을 다른 고정된 시간 지점으로부터의 기간(duration)으로 표현하지만, 명세는 순간 자체를 다루어야 합니다.
기간(duration)은 동일한 시계에서 두 순간 사이의 거리입니다. 양 끝점 모두 안전하지 않은 순간이 아니어야 하며, 이렇게 해야 기간이나 기간의 차이가 9.1 시계 해상도에서의 문제를 완화해줍니다. 기간은 밀리초, 초 등으로 측정됩니다. 모든 시계가 동일한 속도로 시간을 세려고 하므로 기간은 특정 시계와 연결되어 있지 않으며, 하나의 시계에서 두 순간으로 계산된 기간을 두 번째 순간에 더해 해당 시계의 또 다른 순간을 얻을 수 있습니다.
기간 계산은 a에서 b까지의 결과를 다음 알고리즘으로 정의합니다:
기간은 암시적으로 DOMHighResTimeStamp
로 사용할 수 있습니다. 기간을 타임스탬프로 암시적 변환은 기간 d에 대해, d의 밀리초 수를 반환합니다.
단일 페이지(하나의 environment settings object 컨텍스트) 내에서 시간을
측정하려면,
settingsObject의 현재 상대 타임스탬프를 사용합니다.
이는 settingsObject의 시간 기준(origin)에서
settingsObject의 현재 단조
시간까지의 기간(duration)으로 정의됩니다. 이 값은 기간의 암시적 변환을 통해 DOMHighResTimeStamp
로 자바스크립트에 직접 노출할 수 있습니다.
단일 UA 실행 내에서 시간을 측정할 때 environment settings object의 시간 기준(origin)이 적합한 기준이 아니면, 현재 단조 시간을 사용하여 순간(moment)을 생성합니다. environment settings object settingsObject의 현재 단조 시간은 다음 단계의 결과입니다:
단조 시계의 순간(moment)은 자바스크립트나 HTTP에서 직접 표현할 수 없습니다. 대신 두 순간 사이의 기간(duration)을 노출합니다.
여러 UA 실행에 걸쳐 시간을 측정하려면, 현재 거칠게 변환된 벽시계 시간(current coarsened wall time)이나 (더 높은 정밀도가 필요한 교차 출처 격리 컨텍스트에서는) environment settings object의 현재 벽시계 시간(current wall time)을 사용하여 순간(moment)을 생성합니다. 현재 거칠게 변환된 벽시계 시간은 벽시계의 안전하지 않은 현재 시간을 거칠게 변환(coarsen time)한 결과입니다.
environment settings object settingsObject의 현재 벽시계 시간(current wall time)은 다음 단계의 결과입니다:
벽시계의 순간(moment)을 사용할 때, 사용자가 시계를 앞으로 또는 뒤로 조정하는 상황을 반드시 고려해야 합니다.
벽시계의 순간(moment)은
유닉스 에폭(Unix epoch)으로부터 해당 순간까지의 밀리초 수를
생성자에 전달하거나,
유닉스 에폭으로부터 나노초 수를 순간까지 전달하여 Temporal.Instant 생성자를 사용할 수 있습니다.
Date
컴퓨터 간에 유사한 표현(representation)을 전송하는 것은 피하세요. 이렇게 하면 사용자의 시계 드리프트가 노출되어 추적 벡터(tracking vector)가 될 수 있습니다. 대신 단조 시계(monotonic clock) 순간(moment) 방식처럼 두 순간(moment) 사이의 기간(duration)을 전송하는 방식을 사용하세요.
DOM 이벤트가 발생한 시간을 다음과 같이 보고할 수 있습니다:
timeStamp
속성을
this의 관련 settings object(relevant settings
object)의 현재 상대 타임스탬프(current
relative timestamp)로 초기화합니다.
오류 보고서의 경과 시간(age)은 다음과 같이 계산할 수 있습니다:
이후:
며칠에 걸친 속성 보고서 만료는 다음과 같이 처리할 수 있습니다:
value["expiry"]
로부터
며칠 후:
유닉스 에폭(Unix epoch)은 벽시계에서 1970년 1월 1일 00:00:00 UTC에 해당하는 순간(moment)입니다.
어떤 방식으로든 통신할 수 있는 environment settings object 그룹마다 유닉스 에폭의 추정 단조 시간(estimated monotonic time of the Unix epoch)이 있습니다. 이는 단조 시계(monotonic clock)의 순간(moment)으로, 다음 단계에 따라 초기화됩니다:
monotonic time - (wall time - 유닉스 에폭)
으로
설정합니다.
Worker
도 포함됩니다.
성능 측정값은 관련 environment settings object의 초기화 시점에 초기 순간(moment)으로부터의 기간(duration)을 보고합니다. 해당 순간(moment)은 해당 settings object의 시간 기준(time origin)에 저장됩니다.
시간 기준 타임스탬프 가져오기(get time origin timestamp)는 global object global이 주어졌을 때, 다음 단계를 실행해 기간(duration)을 반환합니다:
timeOrigin을 global의 관련 settings object(relevant settings object)의 시간 기준(time origin)으로 설정합니다.
Window
컨텍스트에서는 이 값이
내비게이션이 시작된 시점을 나타냅니다. Worker
및
ServiceWorker
컨텍스트에서는
워커가 실행된 시점을 나타냅니다. [service-workers]
시간 기준 타임스탬프 가져오기(get time origin timestamp)가 반환하는
값은
global의 시간 기준(time origin)이
유닉스 에폭 이후에 발생한 시간에 근접한 값입니다.
이 값은 Date.now()
를 해당 시점에 실행한 값과 다를 수 있는데,
전자는 시스템 및 사용자 시계 조정, 시계 드리프트 등에 영향을 받지 않는 단조 시계(monotonic clock) 기준으로 기록되기 때문입니다.
현재 고해상도 시간(current high resolution time)은 global object current global이 주어졌을 때, 상대적 고해상도 시간(relative high resolution time)을 안전하지 않은 공유 현재 시간(unsafe shared current time) 및 current global을 인자로 호출한 결과를 반환해야 합니다.
거칠게 변환된 공유 현재 시간(coarsened shared current time)은 선택적 boolean crossOriginIsolatedCapability(기본값 false)를 받아, 안전하지 않은 공유 현재 시간과 crossOriginIsolatedCapability를 사용해 시간 거칠게(coarsen) 변환을 호출한 결과를 반환해야 합니다.
안전하지 않은 공유 현재 시간(unsafe shared current time)은 단조 시계(monotonic clock)의 안전하지 않은 현재 시간을 반환해야 합니다.
DOMHighResTimeStamp
타입은
밀리초 단위의 기간(duration)을 저장하는 데 사용됩니다. 문맥에 따라, 이는 순간(moment)을 나타내기도 하며,
해당 기간(duration)이 기준 순간(base moment) 이후의 시점(예: 시간 기준(origin) 또는 유닉스 에폭)을 나타낼 수 있습니다.
WebIDLtypedef double DOMHighResTimeStamp
;
DOMHighResTimeStamp
는 측정을 허용할 만큼 충분히 정확한 밀리초 단위의
시간을
나타내야 하지만, 타이밍 공격을 방지할 수 있도록 해야 합니다. 자세한 고려 사항은 9.1
시계 해상도를 참고하세요.
DOMHighResTimeStamp
는
double
이므로,
유닉스 에폭(Unix epoch)부터 특정 순간(moment)까지의 밀리초 수를 유한한 해상도로만
표현할 수 있습니다. 2023년의 순간(moment)에 대해, 그 해상도는 약 0.2마이크로초입니다.
WebIDLtypedef unsigned long long EpochTimeStamp
;
EpochTimeStamp
는
유닉스 에폭에서 특정 순간(moment)까지의 정수 밀리초 수를
벽시계 기준으로 나타냅니다. 윤초(leap seconds)는 포함하지 않습니다. 이 타입을 사용하는 명세에서는 밀리초 값의
해석 방법을 정의합니다.
WebIDL[Exposed=(Window,Worker)]
interface Performance
: EventTarget {
DOMHighResTimeStamp
now
();
readonly attribute DOMHighResTimeStamp
timeOrigin
;
[Default] object toJSON
();
};
now()
메서드는 반드시(MUST)
현재 고해상도 시간(current high resolution time)에서
this의 관련 글로벌 객체(relevant global object)에 대해
밀리초 단위의 기간(duration) 값을 반환해야 합니다.
동일한 시간 기준(time origin)을 가진
Performance
객체에서 now
()
메서드를 호출할 때 반환되는 시간 값들은
반드시(MUST) 동일한 단조 시계(monotonic clock)를 사용해야 합니다.
동일한 시간 기준(time origin)을 가진
now
()
메서드에서
시간 값을 연속적으로 기록했을 때, 두 값의 차이는 절대 음수가 되어서는 안 됩니다(MUST never be negative).
timeOrigin
속성은 반드시(MUST)
기간(duration)을
시간 기준 타임스탬프(get time origin timestamp)에서
관련 글로벌 객체(relevant global object)에 대해 반환해야 합니다.
Performance
.timeOrigin
을 가져올 때 반환되는 시간 값들은
반드시(MUST) 단조 시계(monotonic clock)를 사용해야 하며,
이 시계는 시간 기준(time origin)이 공유하는
기준점이고,
[ECMA-262]
time 정의를 기준으로 합니다. 자세한 내용은 9.
보안 고려사항(Security Considerations)을 참고하세요.
toJSON()
를 호출하면, [WEBIDL]의 기본 toJSON 단계(default toJSON steps)를 실행합니다.
인터페이스 믹스인 performance
속성은
WindowOrWorkerGlobalScope
에서
성능 관련 속성과 메서드에 글로벌 객체(global object)를 통해 접근할 수 있게 해줍니다.
WebIDLpartial interface mixin WindowOrWorkerGlobalScope {
[Replaceable] readonly attribute Performance
performance
;
};
정확한 타이밍 정보에 접근하는 것은 측정이나 스케줄링 목적 모두에서 많은 애플리케이션에 일반적으로 필요한 요구입니다. 예를 들어, 애니메이션, 사운드 및 기타 활동을 페이지에서 조정하려면 좋은 사용자 경험을 위해 고해상도 시간에 접근해야 합니다. 마찬가지로, 측정은 개발자가 중요한 코드 컴포넌트의 성능을 추적하고, 리그레션을 감지하는 데 도움이 됩니다.
하지만 동일한 정확한 타이밍 정보에 접근하는 것은 때때로 공격자가 볼 수 없거나 접근할 수 없는 데이터를 추측하거나 유추하는 악의적 목적으로도 사용될 수 있습니다. 예를 들어, 캐시 공격, 통계적 지문 채취, 마이크로 아키텍처 공격은 프라이버시 및 보안 문제이며 악의적인 웹사이트가 다양한 브라우저 또는 애플리케이션 시작 작업의 고해상도 타이밍 데이터를 사용해 사용자 집합을 구분하거나 특정 사용자를 식별하거나 관련 없는 동일 프로세스의 사용자 데이터를 드러낼 수 있습니다. 더 자세한 내용은 [CACHE-ATTACKS] 와 [SPECTRE]을 참고하세요.
이 명세는 이전에 EpochTimeStamp
로 노출되던 밀리초
해상도보다 더 정확한
밀리초 이하 해상도를 제공하는 API를 정의합니다.
하지만, 이 새로운 API가 없어도 공격자는 반복 실행과 통계 분석을 통해 고해상도 추정치를 얻을 수 있습니다.
이 새로운 API가 이러한 공격의 정확도 또는 속도를 크게 향상시키지 않도록,
DOMHighResTimeStamp
타입의 최소 해상도는 공격을 방지할 만큼 충분히 부정확해야 합니다.
필요하다면, 사용자 에이전트는 시간 거칠게(coarsen) 변환 처리 모델에서 time resolution 값을 더 높게 설정해 아키텍처나 소프트웨어 제약, 기타 고려사항에 따른 프라이버시 및 보안 문제를 해결해야 합니다.
이러한 공격을 완화하기 위해 사용자 에이전트는 필요하다고 판단하는 모든 기법을 적용할 수 있습니다. 이러한 기법의 배포는 브라우저 아키텍처, 사용자 기기, 콘텐츠 및 교차 출처 데이터의 악의적 읽기 능력, 기타 실제적 고려사항에 따라 달라질 수 있습니다.
이러한 기법에는 다음이 포함될 수 있습니다:
이러한 타이밍 측면 채널 공격을 완전히 방지하는 것은 실질적으로 불가능합니다: 모든 작업이 어떠한 비밀 정보 값에도 영향을 받지 않는 시간 내에 실행되어야 하거나, 애플리케이션이 모든 시간 관련 프리미티브(시계, 타이머, 카운터 등)로부터 격리되어야 합니다. 어느 쪽도 브라우저와 애플리케이션 개발자에게 복잡성을 야기하며, 애플리케이션의 성능 및 반응성에 부정적인 영향을 미치므로 현실적이지 않습니다.
이 명세는 시간 기준(origin)의 0시점에 대한 밀리초 이하 해상도를 제공하는 API도 정의하며, 애플리케이션에 단조 시계(monotonic clock)를 노출해야 하며, 브라우저의 모든 컨텍스트에서 공유되어야 합니다. 단조 시계(monotonic clock)는 물리적 시간에 반드시 연결될 필요는 없지만, [ECMA-262]의 time 정의를 기준으로 설정하는 것이 사용자의 새로운 지문 엔트로피 노출을 피하는 데 권장됩니다. 예를 들어, 이 시간은 이미 애플리케이션이 쉽게 얻을 수 있지만, 새로운 논리 시계를 노출하면 새로운 정보가 제공됩니다.
하지만 위의 메커니즘이 있더라도, 단조 시계(monotonic clock)는
추가적인 시계 드리프트(clock drift) 해상도를 제공할 수 있습니다.
오늘날 애플리케이션은 동일 컨텍스트 내에서 시각(time-of-day)과 단조 시간 값을
(Date.now()
및
now
()
를 통해) 여러 시점에 타임스탬핑하고,
자동 또는 사용자 시계 조정 등으로 인한 드리프트를 관찰할 수 있습니다.
timeOrigin
속성을 사용하면
공격자가 시간 기준(time origin)을
단조 시계(monotonic clock) 기준으로 보고,
현재 시각 추정치와 비교할 수 있습니다(즉, performance.timeOrigin
과
Date.now() - performance.now()
의 차이).
이를 통해 장기간에 걸쳐 두 시계 사이의 드리프트를 관찰할 수 있습니다.
실제로 동일한 시간 드리프트는 애플리케이션이 여러 번 내비게이션을 거치면서도 관찰할 수 있습니다: 애플리케이션은 각 컨텍스트에서 논리 시간을 기록하고, 클라이언트 또는 서버의 시간 동기화 메커니즘을 사용해 사용자의 시계 변화를 추론할 수 있습니다. 마찬가지로 TCP 타임스탬프와 같은 하위 계층의 메커니즘으로도 여러 번 방문하지 않고도 서버에 동일한 고해상도 정보를 노출할 수 있습니다. 따라서 이 API가 제공하는 정보는 사용자의 중요한 또는 이전에 노출되지 않았던 엔트로피를 추가로 노출해서는 안 됩니다.
시간 기준(time origin)의 현재 정의는
Document
에 대해,
문서의 origin에 요청이 도달하기 전까지의 교차 출처 리디렉트의 총 시간을 노출합니다.
이로 인해 교차 출처 정보가 노출되지만, 성능 메트릭에 중대한 손상을 주지 않고 이를 완화하는 방법은 아직 결정되지 않았습니다.
논의 상황을 추적하려면 Navigation Timing Issue 160을 참고하세요.
비규범적(non-normative)으로 표시된 섹션뿐만 아니라, 이 명세의 모든 저작 지침, 다이어그램, 예시, 참고 사항도 비규범적입니다. 그 외 이 명세의 모든 내용은 규범적입니다.
이 문서의 MUST와 SHOULD라는 키워드는 BCP 14 [RFC2119] [RFC8174] 에서 설명된 대로, 오직 대문자로 나타날 때만 해당 의미로 해석되어야 합니다.
일부 적합성 요구사항은 속성, 메서드 또는 객체에 대한 요구사항으로 표현됩니다. 이러한 요구사항은 사용자 에이전트(user agent)에 대한 요구사항으로 해석되어야 합니다.
DOMHighResTimeStamp
§5.
EpochTimeStamp
§6.
now()
메서드(Performance
용)
§7.1
performance
속성(WindowOrWorkerGlobalScope
용)
§8.1
Performance
인터페이스
§7.
timeOrigin
속성(Performance
용)
§7.2
toJSON()
메서드(Performance
용)
§7.3
Document
인터페이스
EventTarget
인터페이스
timeStamp
속성(Event
용)
BroadcastChannel
인터페이스
realm
용)
postMessage(message, options)
(Window
용)
Window
인터페이스
WindowOrWorkerGlobalScope
인터페이스
Worker
인터페이스
ServiceWorker
인터페이스
[Default]
확장 속성(extended attribute)
double
타입(type)
[Exposed]
확장 속성(extended attribute)
object
타입(type)
[Replaceable]
확장 속성(extended attribute)
unsigned long long
타입(type)
WebIDLtypedef double DOMHighResTimeStamp
;
typedef unsigned long long EpochTimeStamp
;
[Exposed=(Window,Worker)]
interface Performance
: EventTarget {
DOMHighResTimeStamp
now
();
readonly attribute DOMHighResTimeStamp
timeOrigin
;
[Default] object toJSON
();
};
partial interface mixin WindowOrWorkerGlobalScope {
[Replaceable] readonly attribute Performance
performance
;
};
이 작업에 기여해 주신 Arvind Jain, Angelos D. Keromytis, Boris Zbarsky, Jason Weber, Karen Anderson, Nat Duca, Philippe Le Hegaret, Ryosuke Niwa, Simha Sethumadhavan, Todd Reifsteck, Tony Gentilcore, Vasileios P. Kemerlis, Yoav Weiss, 그리고 Yossef Oren께 감사드립니다.
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: