이 문서는 User timing (W3C Recommendation 12 December 2013)의 한국어 번역본입니다.
이 문서에 오역 및 오타를 포함할 수 있습니다. 가능하면 원문도 확인하시길 바랍니다.

공개일
2015-11-08
번역자:
조은 <[email protected]>
W3C

유저 타이밍 (User Timing)

2013년 12월 12일 W3C 권고안

이 버전:
http://www.w3.org/TR/2013/REC-user-timing-20131212/
최신 버전:
http://www.w3.org/TR/user-timing/
이전 버전:
http://www.w3.org/TR/2013/PR-user-timing-20131031/
Editors:
Jatinder Mann, Microsoft Corp.,
Zhiheng Wang, Google Inc. (2013년 7월까지)
Anderson Quach, Microsoft Corp. (2011년 3월까지)

이 문서의 표준 관련 수정을 포함하고 있을 수 있는 errata를 참고하시길 바랍니다.

번역본도 제공합니다.


요약

이 스펙문서는 고정밀 타임스탬프에 접근할 수 있게 하여, 웹 개발자가 어플리케이션 퍼포먼스 측정을 할 수 있게 돕는 인터페이스를 정의합니다.

이 문서의 상태

이 섹션은 이 문서를 공개했을 때 상태에 대해 설명합니다. 다른 문서가 이 문서를 덮어쓸 가능성이 있으니 주의하시길 바랍니다. 이 문서 및 W3C에서 공개한 다른 문서의 최신 버전은 W3C technical reports index at http://www.w3.org/TR/에서 확인 가능합니다.

이 문서는 Web Performance 워킹 그룹에서 제공하는 "유저 타이밍 스펙문서"의 W3C 권고안입니다. 2013년 8월 제공한 구현 보고서도 확인 가능합니다.

이 문서는 이전 버전 문서에서 변경내용이 없습니다.

이 문서를 권고안으로 발행함으로써, W3C는 성능 타임라인 권고안이 Web IDL 문서의 권고안 제정단계 진행으로 인한 영향을 받지 않을거라 기대하고 있습니다.

코멘트는 [email protected] (archived)로 보내주시길 바라며, 제목을 [UserTiming]으로 시작하시길 바랍니다.

이 문서는 W3C 멤버, 소프트웨어 개발자, 그리고 다른 W3C 그룹 및 관계자들이 평가를 진행하여, 디렉터에 의해 W3C 권고안으로 발표했습니다. 이 문서는 안정적이며, 참고자료로 사용하거나 다른 문서에서 인용해도 좋습니다. 스펙 문서의 권고를 통해 W3C가 하는 역할은 스펙 문서에 관심을 모으고 다방면으로 퍼뜨리는 일입니다. 이를 통해 웹의 기능과 상호운용성 향상을 기대할 수 있습니다.

이 문서는 2004년 2월 6일 W3C 특허 정책을 따르는 그룹에서 작성하였습니다. W3C는 그룹의 성과물에 관련하여 모든 공개 특허 공개 리스트를 관리합니다. 여기에는 특허 공개에 대한 지시사항도 포함합니다. 특허에 대해서 충분한 지식이 있는 사람이, 스펙 문서의 Essential Claim(s)에 인정된다고 파악되는 경우, W3C 특허 정책 제 6장에 의거하여 정보를 공개해야 할 필요가 있습니다.

목차

  1. 1 소개
  2. 2 적합 요구사항
  3. 3 용어
  4. 4 유저 타이밍
    1. 4.1 소개
    2. 4.2 Performance 인터페이스 확장
    3. 4.3 PerformanceMark 인터페이스
    4. 4.4 PerformanceMeasure 인터페이스
    5. 4.5 벤더 접두사
  5. 5 단순증가 시간
  6. 6 프라이버시 및 보안
  7. 감사의 말
  8. 참고 문서

1 소개

이 섹션은 표준에 준하지 않습니다.

웹 개발자는 어플리케이션의 퍼포먼스 특성에 접근하여 이해할 수 있는 능력을 필요로합니다. JavaScript[ECMA262]는 어플리케이션의 지연을 측정하기위한 메커니즘(Date.now() 메서드로 현재 타임스탬프를 획득)을 제공하지만, 이 타임스탬프의 정밀도가 유저 에이전트에 따라 각기 다릅니다.

이 문서는 개발자가 어플리케이션의 퍼포먼스를 더 정확하게 측정할 수 있게 하는 고정밀 타임스탬프를 공개하기 위한, PerformanceMarkPerformanceMeasure 인터페이스, Performance 인터페이스의 확장을 정의합니다.

아래 스크립트는 개발자가 개발자 스크립트와 관련있는 타이밍 데이터를 얻기 위해, 이 문서에서 정의하는 인터페이스를 어떻게 사용할 수 있는지 보여줍니다.

    <!doctype html>
    <html>
      <head>
        <title>User Timing example</title>
      </head>
      <body onload="init()">
        <script>
           function init() 
           {
                performance.mark("startTask1");
                doTask1(); // 개발자 코드
                performance.mark("endTask1");
                
                performance.mark("startTask2");
                doTask2(); // 개발자 코드 
                performance.mark("endTask2");

                measurePerf();
           }

           function measurePerf() 
           {
               var perfEntries = performance.getEntriesByType("mark");
               for (var i = 0; i < perfEntries.length; i++)
               {
                     if (window.console) console.log("Name: "        + perfEntries[i].name      + 
                                                     " Entry Type: " + perfEntries[i].entryType +
                                                     " Start Time: " + perfEntries[i].startTime + 
                                                     " Duration: "   + perfEntries[i].duration  + "\n");
               }
           }
        </script>
      </body>
    </html>
    

2 적합 요구사항

이 스펙문서 안에서 모든 다이어그램, 예제, 노트 및 표준이 아니라 명시한 섹션은 모두 표준이 아닙니다. 그 외의 모든 내용은 표준입니다.

이 스펙 문서 내 키워드 "MUST", "MUST NOT", "REQUIRED", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL"는 RFC 2119에 기술되어있는대로 해석합니다. 가독성을 위해, 이 스펙문서에서 이 키워드들을 모두 대문자로 표기하지는 않습니다.

알고리즘 중 명령적 표현에 따른 요건(예를 들면: "선두 공백문자열 제거", "false를 반환하여 이 절차를 완료" 등) 은 알고리즘을 도입할 때 사용할 수 있는 키워드("must", "should", "may", etc)의 의미로 해석합니다.

일부 적합성 요구사항은 속성, 메소드, 오브젝트에 대한 요구사항으로 언급합니다. 이러한 요구 사항은 사용자 에이전트(UA)에 부과하는 요구사항으로 해석해야 합니다.

알고리즘 또는 특정 스텝으로 기록하는 적합성 요구사항은 최종 결과가 같은 값인 경우, 어떤 방식으로 구현해도 상관 없습니다. (특히, 이 스펙 문서에서 정의하는 알고리즘은 쫓기 쉽도록 기술되어 있어, 성능을 고려하지 않습니다)

이 스펙의 IDL 코드는 Web IDL 스펙에서 언급한 적합 IDL 코드에 부과한 요구 사항에 따르는 것으로 해석해야 합니다. [Web IDL]

3 용어

Foo를 인터페이스로 할 때, "Foo 인터페이스를 구현하는 객체"의 약자로 "Foo 객체"를 사용합니다.

용어 "JavaScript"는 ECMAScript 대신에 사용하며,[ECMA262], 공식 용어인 ECMAScript가 더 낫지만, 용어 JavaScript가 더 광범위하게 알려져있습니다.

이 작업을 통해, 모든 시간값은 문서 네비게이션 시작을 기점으로 밀리초 단위로 측정됩니다. 예를 들어, 문서 네비게이션 시작 시간은 0부터 시작합니다. 용어 현재 시간 (current time)은 문서 네비게이션 시작 시점부터 그 시점까지 경과한 시간을 밀리초로 나타냅니다. 이러한 시간 정의는 High Resolution Time 스펙 문서[High Resolution Time]에 기준을 두고 있으며, 1970년 1월 1일 0시 0분 0초 (UTC)를 기점으로 하는 Navigation Timing 스펙 문서[Navigation Timing]와 다릅니다.

4 유저 타이밍

4.1 소개

이 섹션은 표준에 준하지 않습니다.

PerformanceMarkPerformanceMeasure 인터페이스, Performance 인터페이스의 확장은 고정밀 단조증가 타임스탬프에 액세스를 할 수 있게 하며 웹 개발자가 어플리케이션의 퍼포먼스 정보를 더 정확하게 측정 가능하도록 합니다.

4.2Performance 인터페이스 확장

  partial interface Performance {
    void mark(DOMString markName);
    void clearMarks(optional  DOMString markName);

    void measure(DOMString measureName, optional DOMString startMark, optional DOMString endMark);
    void clearMeasures(optional DOMString measureName);
  };
    

mark 메서드

이 메서드는 이름이 부여된 타임스탬프("mark")를 기록합니다.

인수

DOMString 타입 markName

타임스탬프에 부여하는 이름입니다.

표시명(Mark name)은 같은 문서 내에서 재사용할 수 있습니다. 각 mark() 메서드 호출은 정의된 표시명 아래에서 새로운 타임스탬프를 기록합니다.

표시명은 PerformanceTiming 인터페이스 내 속성의 어떤 이름과도 같을 수 없습니다. [Navigation Timing].

권장 표시명

개발자들이 공통 인터렉션을 표시할 때 아래와 같은 권장 표시명을 사용하기를 권장합니다. 유저 에이전트는 정의된 표시명 하에 새로운 타임스탬프를 기록할 것입니다. 유저 에이전트는 권장 표시명 이용이 적절한지, 혹은 그 설명과 일치하는 지 여부는 검증하지 않을 것입니다.

"mark_fully_loaded"

어플리케이션에서 개발자가 표시한대로 페이지 전체를 로딩했을 때 시간

"mark_fully_visible"

어플리케이션에서 개발자가 표시한대로 엔드 유저가 페이지를 완전히 볼 수 있을 때 시간

"mark_above_the_fold"

어플리케이션에서 개발자가 표시한대로 엔드유저의 볼 수 있는 뷰포트 내 콘텐츠가 모두 나타났을 때 시간

"mark_time_to_user_action"

어플리케이션에서 개발자가 표시한대로 페이지 사이나 네비게이션 이후에 발생할 수 있는 스크롤이나 클릭같은 첫번째 유저 인터렉션 시간

리턴값 없음

예외

만약 markName 인수가 PerformanceTiming 인터페이스 안 속성과 같은 이름을 가진다면 SYNTAX_ERR를 던져 예외처리함.

clearMarks 메서드

만약 markName 인수가 정의되어있지 않은 경우, 이 메서드는 모든 mark와 그 이름이 부여되어있는 DOMHighResTimeStamp 시간 값을 제거합니다.

만약 markName 인수가 정의되어있는 경우, 이 메서드는 주어진 표시명을 가진 모든 DOMHighResTimeStamp 시간 값을 제거합니다.

만약 markName 인수는 정의되어있지만, 정의되어있는 markName이 없는 경우, 이 메서드는 아무것도 하지 않습니다.

인수

DOMString 타입 markName

[옵션] 클리어 대상인 DOMHighResTimeStamp 시간값을 정의하는 표시명. 정의되지 않은 경우 모든 마크를 제거합니다.

리턴값 없음

예외 없음

measure 메서드

이 메서드는 두 마크 사이의 DOMHighResTimeStamp에 이름을 부여하여 기록합니다. ("measure")

이 메서드의 동작은 인수에 의존하여 정의되어있습니다.

startMark 인수와 endMark 인수는 PerformanceTiming 인터페이스의 속성명 중 하나와 같은 이름일 수 있습니다. [Navigation Timing]. 이 경우, 그 속성값은 DOMHighResTimeStamp 시간 값을 사용합니다.

인수

DOMString 타입 name

이 measure에 붙여진 이름

Measure 이름은 같은 문서에서 재사용될 수 있습니다. 각 measure() 메서드 호출은 정의한 measure 이름 하에 새로운 소요 시간을 기록합니다.

Measure 이름은 mark 이름과 별도입니다.

DOMString 타입 startMark

[옵션] start mark의 이름.

정의되어 있다면, 가장 최근에 쓰여진 start mark DOMHighResTimeStamp 시간 값을 사용합니다.

정의되어 있지 않다면, navigationStart를 사용합니다.

PerformanceTiming 인터페이스 속성 중 하나로 이름이 정의되어있는 경우, 그 속성 값은 시작 DOMHighResTimeStamp 시간 값으로 사용됩니다. [Navigation Timing].

DOMString 타입 endMark

[옵션] end mark의 이름

정의되어 있다면, 가장 최근에 쓰여진 end mark DOMHighResTimeStamp 시간 값을 사용합니다.

정의되어있지 않다면, DOMHighResTimeStamp을 현재 시간으로써 사용합니다.

PerformanceTiming 인터페이스 속성 중 하나로 이름이 정의되어있는 경우, 그 속성 값은 시작 DOMHighResTimeStamp 시간 값으로 사용됩니다. [Navigation Timing].

리턴값 없음

예외

만약 start mark와 end mark가 존재하지 않는다면 SYNTAX_ERR 예외를 던집니다.

만약 startMarkendMark 인수 중 하나, 혹은 모두가 PerformanceTiming 속성과 같은 이름을 가지고 시간 값이 0인 경우 INVALID_ACCESS_ERR 예외를 던집니다.

clearMeasures 메서드

만약 measureName 인수가 정의되어있지 않다면, 이 메서드는 측정과 그게 적용되어있는 DOMHighResTimeStamp 기간을 삭제합니다.

만약 measureName 인수가 정의되어있다면, 이 메서드는 주어진 measureName을 가진 모든 DOMHighResTimeStamp 기간을 삭제합니다.

만약 measureName 인수가 정의되어있지만, 정의되어있는 measureName이 존재하지 않는 경우, 이 메서드는 아무 행동도 하지 않습니다.

인수

DOMString 타입 measureName

[옵션] 클리어되어야하는 DOMHighResTimeStamp 기간을 가진 측정 이름 만약 이 인수가 정의되어있지 않다면, 모든 측정을 클리어합니다.

리턴값 없음

예외 없음

4.3 PerformanceMark 인터페이스

  interface PerformanceMark : PerformanceEntry {
  };
    

PerformanceMark 인터페이스는 mark() 메서드에 의해 작성된 mark도 성능 타임라인에서 공개합니다. [Performance Timeline] PerformanceMark 인터페이스는 PerformanceEntry 인터페이스의 아래 속성을 확장합니다.

mark의 이름을 리턴하는 name 속성

DOMString mark를 리턴하는 entryType 속성

mark의 시간값과 함께 DOMHighResTimeStamp를 반환하는 startTime 속성[High Resolution Time].

값 0의 DOMHighResTimeStamp를 반환하는 duration 속성

4.4 PerformanceMeasure 인터페이스

  interface PerformanceMeasure : PerformanceEntry {
  };
    

PerformanceMeasure 인터페이스는 measure() 메서드에 의해 작성된 measure도 Performance Timeline에서 공개합니다.[Performance Timeline]. PerformanceMeasure 인터페이스는 PerformanceEntry 인터페이스의 아래 속성을 확장합니다.

mark의 이름을 리턴하는 name 속성

DOMString mark를 리턴하는 entryType 속성

measure의 start mark와 함께 DOMHighResTimeStamp를 반환하는 startTime 속성[High Resolution Time].

measure의 duration과 함께 DOMHighResTimeStamp를 반환하는 duration 속성

4.5 벤더 접두사

벤더별 독점 유저 에이전트 확장은 권장하지 않습니다. 만약 실험적인 목적으로 확장이 필요한 경우, 벤더는 반드시 아래 확장 메커니즘을 이용해야 합니다.

만약 Standard Mark Name으로 확장을 추가하는 경우, Standard Mark Name은 반드시,

5 단순증가 시간

인터페이스 내에 기록되는 시간값은, 시스템 시간의 조정에 영향을 받지 않도록, 단순증가해야만 합니다. 시간순서대로 기록된 어떤 두 시간값의 차이도 음수여서는 안됩니다. 유저에이전트는 네비게이션 시작시간의 시스템 시간을 기록하여, 후속 시간값을 단순증가 시간에 의해 측정되는 네비게이션 시작부터 경과시간으로 정의해야합니다.

6 프라이버시 및 보안

이 섹션은 표준에 준하지 않습니다.

이 스펙문서에서 정의하는 인터페이스는 페이지 상 특정 JavaScript 동작에 있어 sensitive가 될 수 있는 타이밍 정보를 공개합니다. 그러나, 성능 타임라인에서 정의하는 다른 인터페이스와 달리, 이 스펙문서에서 정의하는 인터페이스 스크립트를 통한 타이밍 공유에 제약은 없습니다. 이는 웹 플랫폼이 스크립트의 origin에 상관 없이 페이지에 포함되어있는 모든 스크립트가 같은 페이지에 포함되어있는 다른 스크립트와 동일한 권한을 가진것으로 설계되어있기 때문입니다.

감사의 말

Thanks to Karen Anderson, Tony Gentilcore, Nic Jansma, James Simonsen, Steve Souders, Sigbjorn Vik, and Jason Weber for their useful comments that led to changes to this specification and their contributions to this work.

참고 문서

[IETF RFC 2119]
Key words for use in RFCs to Indicate Requirement Levels, Scott Bradner, Author. Internet Engineering Task Force, March 1997. Available at http://www.ietf.org/rfc/rfc2119.txt.
[ECMA-262]
ECMAScript Language Specification, 5.1 Edition. ECMA International, Standard ECMA-262, June 2011. This version of the ECMAScript Language is available from http://www.ecma-international.org/publications/standards/Ecma-262.htm.
[Navigation Timing]
Navigation Timing, Zhiheng Wang, Editor. World Wide Web Consortium, December 2012. This version of the Navigation Timing specification is available from http://www.w3.org/TR/2012/REC-navigation-timing-20121217/. The latest version of Navigation Timing is available at http://www.w3.org/TR/navigation-timing/.
[Performance Timeline]
Performance Timeline, Jatinder Mann, et al, Editors. W3C Recommendation, World Wide Web Consortium, December 2013. This version of the Performance Timeline Recommendation is available from http://www.w3.org/TR/2013/REC-performance-timeline-20131212/. The latest version of Performance Timeline is available at http://www.w3.org/TR/performance-timeline/.
[High Resolution Time]
High Resolution Time, Jatinder Mann, Editor. W3C Recommendation, World Wide Web Consortium, December 2012. This version of the High Resolution Time specification is available from http://www.w3.org/TR/2012/REC-hr-time-20121217/. The latest version of High Resolution Time is available at http://www.w3.org/TR/hr-time/.
[Web IDL]
Web IDL, Cameron McCormack, Editor. World Wide Web Consortium, April 2012. This version of the Web IDL specification is available from http://www.w3.org/TR/2012/CR-WebIDL-20120419/. The latest version of Web IDL is available at http://www.w3.org/TR/WebIDL/.