公式の修正が含まれ得る,この文書の エラッタ も参照願います。 Please refer to the errata for this document, which may include some normative corrections.
翻訳 もご覧ください。 See also translations.
Copyright © 2012 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.この仕様は、ウェブアプリケーションからナビゲーション(ページ遷移)と要素に関する計時情報へアクセスするためのインタフェースを規定する。 This specification defines an interface for web applications to access timing information related to navigation and elements.
この節では公開された時点におけるこの文書の位置付けについて述べます。他の文書がこの文書に取って代わる可能性があります。W3C の現在の出版リストとこの文書の最新の状態は http://www.w3.org/TR/ W3C technical reports index にて見られます。 This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.
これは W3C 勧告( Recommendation ) "Navigation Timing Specification" です。 勧告候補の段階で 2012 年に作成された, Navigation Timing テストスイート に基づく 実装報告書 が入手できます。 This is the W3C Recommendation for "Navigation Timing Specification". An implementation report, produced during the Candidate Recommendation phase in 2012, is available based on the Navigation Timing test suite.
コメントは、件名の最初の部分を [NavigationTiming] としたメールを public-web-perf@w3.org (アーカイブ) 宛てまで送られるよう願います。 Please send comments to public-web-perf@w3.org (archived) with [NavigationTiming] at the start of the subject line.
この文書は Web Performance Working Group により作成されました。 以前の草案との 差分 も用意されています。 This document is produced by the Web Performance Working Group. A diff document with the previous draft is available.
この文書は W3C メンバ, ソフトウェア開発者達, W3C グループや関心を持つ団体から吟味され、ディレクターにより W3C 勧告として承認されたものです。 これは安定的な文書であり、規範として利用したり,他の文書に引用することができます。 勧告の発行における W3C の役割は、仕様に対する注目を集め,広範囲への普及を促進する所にあります。 これはウェブの相互運用性と機能性を向上させるものです。 This document has been reviewed by W3C Members, by software developers, and by other W3C groups and interested parties, and is endorsed by the Director as a W3C Recommendation. It is a stable document and may be used as reference material or cited from another document. W3C's role in making the Recommendation is to draw attention to the specification and to promote its widespread deployment. This enhances the functionality and interoperability of the Web.
この文書は 5 February 2004 W3C Patent Policy に従事するグループにより作成されました。 W3C はグループの成果物に関連して public list of any patent disclosures を作成し維持管理しています。 そのページには特許開示の手引きも含まれます。 特許に関する実際的知識を持ち、そこに Essential Claim(s) が含まれていると主張する者は W3C Patent Policy 6 節 に従って情報を公開しなければなりません。 This document was produced by a group operating under the 5 February 2004 W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.
この節は規定ではない。 This section is non-normative.
利用者が知覚し得る遅延はウェブアプリケーションにとり重要な品質ベンチマークである。 [JSMEASURE] などの,スクリプトに基づく仕組みは、アプリケーション内における利用者遅延の測定のための包括的な手段を提供し得る一方で、多くの局面で,それらはエンドツーエンドにおける遅延の完全な様相を提供できない。 User latency is an important quality benchmark for Web Applications. While script-based mechanisms, such as the one described in [JSMEASURE], can provide comprehensive instrumentation for user latency measurements within an application, in many cases, they are unable to provide a complete end-to-end latency picture.
例えば、次のスクリプトは単純な方法により,ページが完全に読み込まれるまでの時間の測定を試行する: For example, the following script shows a naive attempt to measure the time it takes to fully load a page:
<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 の最初のビットが実行された後から,ページが読み込まれるまでの時間は算出するが、サーバからページの回収に要した時間についての情報は供さない。 The script calculates the time it takes to load the page after the first bit of JavaScript in the head is executed, but it does not give any information about the time it takes to get the page from the server.
ユーザエクスペリエンスについての完全な情報を得る必要性を解決するため、この文書は
PerformanceTiming
インタフェースを導入する。
このインタフェースは、アプリケーション内におけるクライアント側の完全な遅延測定を可能にする, JavaScript による仕組みを提供する。
この提案されたインタフェースにより、前の例を,利用者が感知し得るページ読み込み時間を測定するものに仕立て上げられる。
To address the need for complete information on user experience, this document introduces the PerformanceTiming interfaces. This interface allows JavaScript mechanisms to provide complete client-side latency measurements within applications. With the proposed interface, the previous example can be modified to measure a user's perceived page load time.
次のスクリプトは、直近のナビゲーションからページが読み込まれるまでの時間を算出する: The following script calculates how much time to load a page since the most recent navigation.
<html>
<head>
<script type="text/javascript">
function onLoad() {
var now = new Date().getTime();
var page_load_time = now - performance.timing.navigationStart;
alert("User-perceived page loading time: " + page_load_time);
}
</script>
</head>
<body onload="onLoad()">
<!- Main page body goes from here. -->
</body>
</html>
この仕様で提供されるインタフェースは、 UA のいかなる種類の速度性能ベンチマークへの利用も意図するものではない。 The interface provided by this work does not intend to be used as any sort of performance benchmark for user agents.
明示的に規定でないもの( “参考” )と記された節に加え,この仕様におけるすべての図式, 例, 注記は規定ではない。 他のすべては規定である。 All diagrams, examples, and notes in this specification are non-normative, as are all sections explicitly marked non-normative. Everything else in this specification is normative.
この文書におけるキーワード: 「〜しなければ(〜しては)ならない」 = “MUST (NOT)”, 「要求される」= REQUIRED, 「〜すべきである(でない)」 = “SHOULD (NOT)”, 「推奨される」 = “RECOMMENDED”, 「〜してもよい」 = “MAY”, 「任意選択 」 = “OPTIONAL”, は、 [RFC 2119] に則って解釈されるものとする。 可読性のため、この仕様ではこれらの語が大文字化されて出現することはない。 The key words "MUST", "MUST NOT", "REQUIRED", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in the normative parts of this document are to be interpreted as described in RFC 2119. For readability, these words do not appear in all uppercase letters in this specification.
アルゴリズムの中の命令的言い回しによる要件(例えば “先頭部のスペース文字並びを取り除く”, あるいは “false を返してこの手続きを終了” など)は、アルゴリズムを導入する際に利用されているキーワード( “〜しなければならない ”, “〜すべき”, “〜してもよい” )の意味の下で解釈されることになる。 Requirements phrased in the imperative as part of algorithms (such as "strip any leading space characters" or "return false and abort these steps") are to be interpreted with the meaning of the key word ("must", "should", "may", etc) used in introducing the algorithm.
一部の適合性の要件は、属性, メソッド, オブジェクトに対する要件として言及されている。 その種の要件は UA (利用者エージェント)に対する要件として解釈される。 Some conformance requirements are phrased as requirements on attributes, methods or objects. Such requirements are to be interpreted as requirements on user agents.
アルゴリズムまたは特定の手続きとして記される適合性の要件は、最終的な結果が等価になるのであれば,どのように実装されてもよい。(特に、この仕様で定義されるアルゴリズムは追い易くなるように記述されており,パフォーマンスは考慮されていない。) Conformance requirements phrased as algorithms or specific steps may be implemented in any manner, so long as the end result is equivalent. (In particular, the algorithms defined in this specification are intended to be easy to follow, and not intended to be performant.)
この仕様の IDL 片は、 Web IDL 仕様に述べられる,適合 IDL 片に課される要件に従うものとして、解釈されなければならない。 [Web IDL] The IDL fragments in this specification must be interpreted as required for conforming IDL fragments, as described in the Web IDL specification. [Web IDL]
Foo をインタフェースとするとき, “Foo インタフェースを実装するオブジェクト” の略記として、語 “Foo オブジェクト” が用いられる。
The construction "a Foo object", where Foo is actually an interface, is sometimes used instead of the more accurate "an object implementing the interface Foo".
語 “ナビゲーション” は navigating (ページ遷移)の動作を指す。 The term "navigation" refers to the act of navigating.
語 “JavaScript” は ECMA-262 を指す。 ECMA-262 を指す公式の語 ECMAScript もあるが、 JavaScript の方が広く知れ渡っているので。 The term "JavaScript" is used to refer to ECMA-262, rather than the official term ECMAScript, since the term JavaScript is more widely known.
この仕様を通して、時刻は 1970 年 1 月 1 日 0 時 0 分 0 秒 (UTC) を起点としてミリ秒単位で計測されたものとする。 注記: Navigation Timing 2 仕様 [Navigation Timing 2] では、代わりにサブミリ秒 【具体的にはミリ秒の 1/1000 】 の解像度による,ナビゲーションに関連する計時情報へのアクセスが可能にされている。 Throughout this work, time is measured in milliseconds since midnight of January 1, 1970 (UTC). Note that the Navigation Timing 2 specification [Navigation Timing 2] allows access to timing information related to navigation using sub-milliseconds resolution instead.
window.performance.timing と window.performance.navigation
のすべての属性は、(記述の便宜上,下の手続きにて参照されているとしても)
現在の文書の Window オブジェクトが作成される
まで、書き込まれるべきでない。
All the attributes in window.performance.timing and window.performance.navigation should not be written to until the Window object of the current document is created, even though their attributes are referred to in the following steps to facilitate description.
UA は
window.performance.timing と window.performance.navigation
インタフェースの無効化オプションを利用者に提供してもよい。
これらのインタフェースが無効化されている間は
window.performance.timing も window.performance.navigation
も null 値を返さなければならない。
User agents may provide users the option of disabling the window.performance.timing and window.performance.navigation interfaces. When these interfaces are disabled, both window.performance.timing and window.performance.navigation must return a null value.
UA は,
window.performance.timing と window.performance.navigation
がこれらのインスタンスに置換されたときは、現在の文書に結び付けられている Window オブジェクト
が作成されるまで,
PerformanceTiming および PerformanceNavigation
インタフェースのインスタンスを維持してもよい。
A user agent may maintain instances of the PerformanceTiming and PerformanceNavigation interfaces until the Window object associated with the current document is created, when window.performance.timing and window.performance.navigation are replaced with these instances.
次の図式は規定ではない。 This illustration is non-normative.
次の図式は、
PerformanceTiming
インタフェースと
PerformanceNavigation
インタフェースに定義される計時属性を(リダイレクトあり/なしの場合も含めて)示したものである。
【と原文には書かれているが PerformanceNavigation についての記述が図のどこにも見当たらない。】
下線付きの属性は、異なる生成元に属する文書を含むナビゲーションでは利用できない。
UA は、2つの計時の間の非標準の時区間を許容するために、その間の内部処理を行ってもよい。
【?】
The following graph illustrates the timing attributes defined by the PerformanceTiming interface and the PerformanceNavigation interface with or without redirect, respectively. Attributes underlined may not be available in navigation involving documents from different origins. User agents may perform internal processing in between timings, which allow for non-normative intervals between timings.
ナビゲーション
が次の理由で中止された場合、
window.performance.timing および window.performance.navigation
属性には変更を加えずに,この手続きを中止する。
If the navigation is aborted for any of the following reasons, abort these steps without changing the attributes in window.performance.timing and window.performance.navigation.
navigationStart
に記録する。
Immediately after the user agent prompts to unload the previous document, record the current time as navigationStart.
window.performance.navigation.type に現在のナビゲーション型がまだ設定されていない場合、それを記録する: Record the current navigation type in window.performance.navigation.type if it has not been set:
TYPE_NAVIGATE
。
If the navigation was started by clicking on a link, or entering the URL in the user agent's address bar, or form submission, or initializing through a script operation other than the location.reload() method, let the navigation type be TYPE_NAVIGATE.
TYPE_RELOAD
。
If the navigation was started either as a result of a meta refresh, or the location.reload() method, or other equivalent actions, let the navigation type be TYPE_RELOAD.
TYPE_BACK_FORWARD
。
If the navigation was started as a result of history traversal, let the navigation type be TYPE_BACK_FORWARD.
TYPE_RESERVED
。
Otherwise, let the navigation type be TYPE_RESERVED.
unloadEventStart
と
unloadEventEnd
を 0 にして,
取得開始段
へ進む。
他の場合、 unload イベントの直前の時刻を
unloadEventStart
に記録する。
If the current document and the previous document are from different origins, set both unloadEventStart and unloadEventEnd to 0 then go to step 6. Otherwise, record unloadEventStart as the time immediately before the unload event.
unloadEventEnd
に記録する。
Immediately after the unload event is completed, record the current time as unloadEventEnd.
fetchStart
に記録する。
他の場合、 UA は 取得プロセスを開始する直前に現在の時刻を
fetchStart
に記録する。
If the new resource is to be fetched using HTTP GET or equivalent, immediately before a user agent checks with the relevant application caches, record the current time as fetchStart. Otherwise, immediately before a user agent starts the fetching process, record the current time as fetchStart.
domainLookupStart,
domainLookupEnd,
connectStart,
connectEnd
を
fetchStart
と同じ値にする。
Let domainLookupStart, domainLookupEnd, connectStart and connectEnd be the same value as fetchStart.
domainLookupStart
に記録する。
If no domain lookup is required, go to step 11. Otherwise, immediately before a user agent starts the domain name lookup, record the time as domainLookupStart.
domainLookupEnd
に記録する。
UA はその前に複数回の再試行が必要になり得る。
ドメイン名検索に失敗した場合、残りの手続きを中止する。
Record the time as domainLookupEnd immediately after the domain name lookup is successfully done. A user agent may need multiple retries before that. If the domain lookup fails, abort the rest of the steps.
connectStart
と
connectEnd
を
domainLookupEnd
と同じ値にする。
他の場合、サーバへの接続を始める直前の時刻を
connectStart
に記録し,サーバまたはプロキシへの接続が確立された直後の時刻を
connectEnd
に記録する。
UA はその前に複数回の再試行が必要になり得る。
接続が確立できなかった場合、残りの手続きを中止する。
If a persistent transport connection is used to fetch the resource, let connectStart and connectEnd be the same value of domainLookupEnd. Otherwise, record the time as connectStart immediately before initiating the connection to the server and record the time as connectEnd immediately after the connection to the server or the proxy is established. A user agent may need multiple retries before this time. If a connection can not be established, abort the rest of the steps.
接続開始段
において、 UA が
secureConnectionStart
属性をサポートする場合、次の追加の手続きも行われるべきである:
In step 11, a user agent should also carry out these additional steps if it supports the secureConnectionStart attribute:
secureConnectionStart
に記録しなければならない。
If the scheme of the current document is HTTPS, the user agent must record the time as secureConnectionStart immediately before the handshake process to secure the connection.
secureConnectionStart
の値を 0 にしなければならない。
If the scheme of the current document is not HTTPS, the user agent must set the value of secureConnectionStart to 0.
requestStart
に記録する。
Immediately before a user agent starts sending request for the document, record the current time as requestStart.
responseStart
に記録する。
Record the time as responseStart immediately after the user agent receives the first byte of the response.
UA が応答の最後のバイトを受信した直後の時刻を
responseEnd
に記録する。
Record the time as responseEnd immediately after receiving the last byte of the response.
UA がリクエストの送信または応答全体の受信に失敗し,接続の再オープンを要する場合、 接続開始段 へ戻る。 Return to step 11 if the user agent fails to send the request or receive the entire response, and needs to reopen the connection.
持続的接続
[RFC 2616]
が有効にされているときは、
UA はまず最初に,リクエスト送信のためのオープン接続の再利用を(その接続は
非同期に切断
され得るが)試行してよい。
そのような場合、
connectStart,
connectEnd,
requestStart
は再オープン接続において収集された計時情報を表現するべきである。
When persistent connection [RFC 2616] is enabled, a user agent may first try to re-use an open connect to send the request while the connection can be asynchronously closed. In such case, connectStart, connectEnd and requestStart should represent timing information collected over the re-open connection.
リソース取得の結果が, HTTP リダイレクト 等 になる場合: If the fetched resource results in an HTTP redirect or equivalent, then
redirectStart,
redirectEnd,
unloadEventStart,
unloadEventEnd,
redirectCount
を 0 にする。
新たなリソースの下に、
取得開始段
へ戻る。
if the current document and the document that is redirected to are not from the same origin, set redirectStart, redirectEnd, unloadEventStart, unloadEventEnd and redirectCount to 0. Then, return to step 6 with the new resource.
redirectStart,
redirectEnd,
unloadEventStart,
unloadEventStart,
redirectCount
を 0 にする。
新たなリソースの下に、
取得開始段
へ戻る。
if there is previous redirect involving documents that are not from the same origin, set redirectStart, redirectEnd, unloadEventStart, unloadEventStart and redirectCount to 0. Then, return to step 6 with the new resource.
redirectCount
を 1 増やす。
Increment redirectCount by 1.
redirectStart
の値が 0 の場合、
その値 ←
fetchStart
の値とする。
If the value of redirectStart is 0, let it be the value of fetchStart.
redirectEnd
←
responseEnd
の値。
Let redirectEnd be the value of responseEnd.
navigationStart,
redirectStart,
redirectEnd,
unloadEventStart,
unloadEventEnd
を除く, window.performance.timing のすべての属性を 0 にする。
Set all the attributes in window.performance.timing to 0 except navigationStart, redirectStart, redirectEnd, unloadEventStart and unloadEventEnd.
domLoading
に記録する。
Record the time as domLoading immediately before the user agent sets the current document readiness to "loading".
domInteractive
に記録する。
Record the time as domInteractive immediately before the user agent sets the current document readiness to "interactive".
DOMContentLoaded イベント
を発火する直前の時刻を
domContentLoadedEventStart
に記録する。
Record the time as domContentLoadedEventStart immediately before the user agent fires the DOMContentLoaded event at the document.
DOMContentLoaded イベント
が完了した直後の時刻を
domContentLoadedEventEnd
に記録する。
Record the time as domContentLoadedEventEnd immediately after the DOMContentLoaded event completes.
domComplete
に記録する。
Record the time as domComplete immediately before the user agent sets the current document readiness to "complete".
loadEventStart
に記録する。
Record the time as loadEventStart immediately before the user agent fires the load event.
loadEventEnd
に記録する。
Record the time as loadEventEnd immediately after the user agent completes the load event.
window オブジェクトからその
window.performance.timing と window.performance.navigation
オブジェクトへの
暗黙的な強い参照
が存在する。
【強い参照:参照元が参照先を “所有” する(参考)】
There are implied strong references from the window object to its window.performance.timing and window.performance.navigation objects.
計時属性の値は、ナビゲーションの間,計時属性がシステムクロックに対する調整によりスキューされないように、単調増加でなければならない。 時系列順に記録された2つの計時属性の差分は決して負であってはならない。 下位文書のナビゲーションも含む,すべてのナビゲーションにおいて、 UA はルート文書ナビゲーションの開始時点のシステムクロックを記録し,後続の計時属性は、ナビゲーションの開始からの経過時間を測定する単調増加クロックの下で定義されなければならない。 The value of the timing attributes must monotonically increase to ensure timing attributes are not skewed by adjustments to the system clock during the navigation. The difference between any two chronologically recorded timing attributes must never be negative. For all navigations, including subdocument navigations, the user agent must record the system clock at the beginning of the root document navigation and define subsequent timing attributes in terms of a monotonic clock measuring time elapsed from the beginning of the navigation.
ベンダ固有のプロプライエタリ UA 拡張は推奨されない。 例えば,試験的な目的でその種の拡張が必要になった場合、ベンダは次の拡張の仕組みを利用しなければならない: Vendor-specific proprietary user agent extensions are discouraged. If such extensions are needed, e.g., for experimental purposes, vendors must use the following extension mechanisms:
追加の拡張が新たなナビゲーション型である場合、その型は次を満たさなければならない: If the extension to be added is an navigation type, the new type must
追加の拡張が新たな計時属性である場合、その属性は次を満たさなければならない: If the extension is a new timing attribute, it must
この節は規定ではない。 This section is non-normative.
注意深く組み上げられた計時攻撃の利用により、末端利用者による閲覧と行動の履歴が流出する可能性がある。 例えば、 unload 時刻から前のページの unload ハンドラに要した時間が明らかにされ,利用者のログイン状態の推定に利用され得る。 これらの攻撃は、前のナビゲーションを含む計時情報がアクセスされる際に同一生成元ポリシーを適用することによって軽減される。 There is the potential for disclosing an end-user's browsing and activity history by using carefully crafted timing attacks. For instance, the unloading time reveals how long the previous page takes to execute its unload handler, which could be used to infer the user's login status. These attacks have been mitigated by enforcing the same origin policy when timing information involving the previous navigation is accessed.
緩い同一生成元ポリシー は、文書間に渡る,未承認の訪問に対する十分な保護を提供しない。 共有されているホストにおいては、信頼できない第三者が同じ IP アドレスの異なるポートの HTTP サーバをホストし得る。 The relaxed same origin policy doesn't provide sufficient protection against unauthorized visits across documents. In shared hosting, an untrusted third party is able to host an HTTP server at the same IP address but on a different port.
1つのホスト名を共有する異なるページ,例えばサイトにホストされている異なる文書作成者による,利用者が生成した内容を伴う内容は、パス名に応じたアクセスの制限機能が存在しないため,同じ生成元に属するものと見なされる。 これらのページ間のナビゲーションおいては、後のページから,リダイレクトや unload イベントに対する計時など,前のページの計時情報へのアクセスが可能になる。 Different pages sharing one host name, for example contents from different authors hosted on sites with user generated content are considered from the same origin because there is no feature to restrict the access by pathname. Navigating between these pages allows a latter page to access timing information of the previous one, such as timing regarding redirection and unload event.
この節は規定ではない。 This section is non-normative.
UA とウェブサーバとの間にプロキシが配備されている場合、
connectStart
と属性と
connectEnd
属性の間の時区間は、 ウェブサーバではなく,プロキシと UA との間の遅延を示すものになる。
それにより、ウェブサーバは,プロキシの存在を推定できる可能性がある。
SOCKS プロキシについては、この時区間にはプロキシ認証に要した時間とプロキシがウェブサーバへの接続に要した時間も含まれ,プロキシの検出を難しくする。
HTTP プロキシの場合、 UA はプロキシサーバについての知識を一切持たないこともあるので、この攻撃の緩和が常に実現できるとは限らない。
In case a proxy is deployed between the user agent and the web server, the time interval between the connectStart and the connectEnd attributes indicates the delay between the user agent and the proxy instead of the web server. With that, web server can potentially infer the existence of the proxy. For SOCKS proxy, this time interval includes the proxy authentication time and time the proxy takes to connect to the web server, which obfuscate the proxy detection. In case of an HTTP proxy, the user agent might not have any knowledge about the proxy server at all so it's not always feasible to mitigate this attack.
window.performance オブジェクトは、同じオブジェクトを利用する既存ページとの混同を避けるため、他のものに置換し得る。
それにより、第三者がそのオブジェクトを置換して,この仕様に述べたインタフェースに依存するスクリプトを破壊できる可能性がある。
The window.performance object is replaceable to avoid conflicts with existing pages using the same object. By doing that, it is possible for third-party to replace the object and scripts relying on the interface described in this work would break.
この草案を手がけるにあたってレビューとフィードバックをされた次の方々に謝意を表したい: I would like to offer my sincere thanks to all the people that I have been in touch with regarding this draft, including
Anderson Quach, Alex Russell, Alois Reitbauer, Annie Sullivan, Christian Biesinger, Darin Fisher, Eric Lawrence, James Simonsen, Jatinder Mann, Jason Sobel, Jason Weber, Jonas Sicking, Kyle Scholz, Lenny Rachitsky, Nic Jansma, Richard Rabbat, Sergey Novikov, Sigbjørn Vik, Steve Souders, Tony Gentilcore for their reviews and feedback.