~web~appの処理能~特性の測定-法は、 ~web~appをより高速にするために重要な側面になる。 `JSMEASURE$r などの~JSに基づく仕組みは、 ~appにおける利用者の待時間( `latency^en )測定~用の包括的な~~手段を供せる一方で、 多くの事例で,それらは端点間における待時間の完全なあるいは詳細な様相を供せない。 例えば,次の~JSは、 ~pageが全部的に~loadされるまでの時間を,ごく素朴に測定しようと試みる: ◎ Accurately measuring performance characteristics of web applications is an important aspect of making web applications faster. While JavaScript-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 or detailed end-to-end latency picture. For example, the following JavaScript 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()"> <!-- --> </body> </html>
上の~scriptは `head^e ~tag内の最初の~JS~codeが実行されて以降から,~pageが~loadされるまでの時間は計算するが、 ~serverから~pageを得るために要した時間や, ~pageの初期~化 lifecycle 【! * 】についての情報は与えない。 ◎ The above 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, or the initialization lifecycle of the page.
この仕様は、 文書の~naviに関係する高分解能な処理能~計量~dataを格納する/検索取得するための, `PERFORMANCE-TIMELINE-2$r に関与する `PerformanceNavigationTiming$I ~interfaceを定義する。 `PerformanceNavigationTiming$I ~interfaceは `HR-TIME$r を利用するので、 すべての時刻~値は, 当の~entryに`関連な設定群~obj$の`時刻起点$enVを~~基準に測定される。 【したがって、 `PerformanceNavigationTiming^I ~interfaceが返す時刻~値 0 は,`時刻起点$enVを表すことになる。】 ◎ This specification defines the PerformanceNavigationTiming interface which participates in the [PERFORMANCE-TIMELINE-2] to store and retrieve high resolution performance metric data related to the navigation of a document. As the PerformanceNavigationTiming interface uses [HR-TIME], all time values are measured with respect to the time origin of the entry's relevant settings object.
例えば,~HTTP応答の終了が~naviの開始から 100ms 後であったとするなら、 `PerformanceNavigationTiming$I の~dataは次の様になるであろう: ◎ For example, if we know that the response end occurs 100ms after the start of navigation, the PerformanceNavigationTiming data could look like so:
startTime: 0.000 /* */ responseEnd: 100.000 /* */
文書の~naviに関係する正確aな計時~dataを得するために, `PerformanceNavigationTiming$I ~interfaceを利用する例を次の~scriptに示す: ◎ The following script shows how a developer can use the PerformanceNavigationTiming interface to obtain accurate timing data related to the navigation of the document:
<script> function showNavigationDetails() { /* */ const [%entry] = performance.getEntriesByType("navigation"); /* */ console.table(%entry.toJSON()); } </script> <body onload="showNavigationDetails()">
【 利用中の~UAで、 この~scriptに等価な処理を
】
(結果は~consoleではなく,ここに示される)
【 他~pageでも利用できる`ブックマークレット@~bookmarklet2$(結果は~consoleに示される) 】【 `~level 1 実装~用のもの@#_test_level1$もある 】
2. 各種用語【 この節の内容うち一部は省略する。 】 ◎ 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.
【この仕様の~APIの記述に現れる】 `現在の文書@ ( `current document^en )は、 【コレに`関連な大域~obj$である】`~window$に`結付けられた文書$を指す。 ◎ The term current document refers to the document associated with the Window object's newest Document object.
【 加えて, “前-文書” ( `previous document^en )は、 `現在の文書$へ~navigateされる前の時点で,同じ`~navigable$にて`作動中な文書$navであったものを指す(もしあれば)。 】
この仕様を通して、 時刻は,文書の~naviの開始から~milli秒数で測定される。 例えば,文書の~naviの開始は、 時刻 0 で生じる。 語 “〜の時刻” は、[ 文書の~naviの開始から その時点までに経過した~milli秒数 ]による時刻を指す。 この[ 時刻の定義 ]は、 `HR-TIME$r に基づく。 ◎ Throughout this work, all time values are measured in milliseconds since the start of navigation of the document. For example, the start of navigation of the document occurs at time 0. The term current time refers to the number of milliseconds since the start of navigation of the document until the current moment in time. This definition of time is based on [HR-TIME] specification.
3. ~naviの計時 3.1. `PerformanceEntry^I ~interfaceとの関係`PerformanceNavigationTiming$I ~interfaceは、 次に挙げる[ `PerformanceEntry$I ~interfaceの属性 ]を拡張する: ◎ PerformanceNavigationTiming interface extends the following attributes of PerformanceEntry interface:
注記: `PerformanceNavigationTiming$I を実装する~UAは、 その~supportを開発者が検出できるよう,`~window$文脈~用の `supportedEntryTypes$m 内に `navigation^l を含める必要がある。 ◎ Note A user agent implementing PerformanceNavigationTiming would need to include "navigation" in supportedEntryTypes for Window contexts. This allows developers to detect support for Navigation Timing.
3.2. `PerformanceResourceTiming^I ~interfaceとの関係`PerformanceNavigationTiming$I ~interfaceは、 次に挙げる[ `PerformanceResourceTiming$I ~interfaceの属性 ]を拡張する: ◎ PerformanceNavigationTiming interface extends the following attributes of the PerformanceResourceTiming interface:
`redirectStart$m 取得子~手続きは: ◎ The redirectStart getter steps are to perform the following steps:
`redirectEnd$m 取得子~手続きは: ◎ The redirectEnd getter steps are to perform the following steps:
`workerStart$m 取得子~手続きは: ◎ The workerStart getter steps are to perform the following steps:
注記: `workerStart$m は `PerformanceResourceTiming$I にて公開されるが、 ~navi計時における その意味は異なる — ~naviは、 下位資源と違って, ~swの[ 作動化/稼働 ]を誘発し得るので。 ~navi計時の文脈における `workerStart^m は、 当の~workerが作動化されるか開始される直前に測定された時刻印を返す。 精確な定義は、 `service-workers$r を見よ。 ◎ Note Though workerStart is exposed in PerformanceResourceTiming, it has a different meaning in Navigation Timing, as unlike subresources, a navigation may trigger the activation or running of a service worker. In the context of Navigation Timing, workerStart returns the timestamp measured just before the worker has been activated or started. See [service-workers] for a precise definition.
`fetchStart$m 取得子~手続きは: ◎ The workerStart getter steps are to perform the following steps:
注記: `~sw$が~naviの一部として利用される場合、 ~navi計時における `fetchStart$m の意味は, `PerformanceResourceTiming$I における それと異なる。 それは、[ `~sw$に向けて `FetchEvent$I が配送される直前 ]に測定された時刻印を返す。 `現在の文書$の~navi計時~entryにおける[ `workerStart$m と `fetchStart$m の時間~差 ]を利用すれば、 当の~workerが[ 初期化される/作動化される ]までにかかった およその~~時間を決定できる。 精確な定義は、 `service-workers$r を見よ。 ◎ Note When a service worker is used as part of the navigation, The fetchStart overload holds a different meaning than the meaning in PerformanceResourceTiming. It returns the timestamp measured right before the FetchEvent is dispatched for the service worker. The time difference between workerStart and fetchStart in the document's navigation timing entry can be used to determine roughly how long it took for the worker to be initialized or activated. See [service-workers] for a precise definition.
注記: `処理能~時列線$に含められるのは、 `現在の文書$を与える資源に限られる — `処理能~時列線$内にある `PerformanceNavigationTiming$I ~objは 1 個に限られる。 ◎ Note Only the current document resource is included in the performance timeline; there is only one PerformanceNavigationTiming object in the performance timeline.
3.3. `PerformanceNavigationTiming^I ~interface注記: `~HTTP~cache$ `RFC7234$r を検査して,そこから内容を検索取得することは、 `~fetching$の一部を成す。 それは、[ `requestStart$m, `responseStart$m, `responseEnd$m ]属性が受持つ。 ◎ Note Checking and retrieving contents from the HTTP cache [RFC7234] is part of the fetching process. It's covered by the requestStart, responseStart and responseEnd attributes.
[`Exposed$=Window] interface `PerformanceNavigationTiming@I : `PerformanceResourceTiming$I { readonly attribute `DOMHighResTimeStamp$I `unloadEventStart$m; readonly attribute `DOMHighResTimeStamp$I `unloadEventEnd$m; readonly attribute `DOMHighResTimeStamp$I `domInteractive$m; readonly attribute `DOMHighResTimeStamp$I `domContentLoadedEventStart$m; readonly attribute `DOMHighResTimeStamp$I `domContentLoadedEventEnd$m; readonly attribute `DOMHighResTimeStamp$I `domComplete$m; readonly attribute `DOMHighResTimeStamp$I `loadEventStart$m; readonly attribute `DOMHighResTimeStamp$I `loadEventEnd$m; readonly attribute `NavigationTimingType$I `type$m; readonly attribute unsigned short `redirectCount$m; readonly attribute `DOMHighResTimeStamp$I `criticalCHRestart$m; readonly attribute `NotRestoredReasons$I? `notRestoredReasons$m; [`Default$] object `toJSON()$m; };
各 `PerformanceNavigationTiming$I ~objには、 次に挙げるものが結付けられる: ◎ ↓
`~Critical-CH~restart時刻@pT ⇒ `DOMHighResTimeStamp$I 値 ◎ A PerformanceNavigationTiming has an associated DOMHighResTimeStamp Critical-CH restart time.
【 ~Critical-CHは、 ~HTTP~header名 — 参考: `仕様@https://www.ietf.org/archive/id/draft-davidben-http-client-hint-reliability-03.html$, `MDN@https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Critical-CH$ 】
`unloadEventStart@m 取得子~手続きは ⇒ ~RET コレの`前-文書の~unload計時$pTの`~unload~event開始~時刻$ ◎ The unloadEventStart getter steps are to return this's previous document unload timing's unload event start time.
注記: 前-文書は在る, かつ それは`現在の文書$と`同一-生成元$である場合、 この時刻印は,~UAが前-文書の `unload^et ~eventを — `文書を~unloadする$手続きの中で — 開始する直前に測定される。 他の場合、 この属性は 0 を返すことになる。 ◎ Note If the previous document and the current document have the same origin, this timestamp is measured immediately before the user agent starts the unload event of the previous document. If there is no previous document or the previous document has a different origin than the current document, this attribute will return zero.
`unloadEventEnd@m 取得子~手続きは ⇒ ~RET コレの`前-文書の~unload計時$pTの`~unload~event終了~時刻$ ◎ The unloadEventEnd getter steps are to return this's previous document unload timing's unload event end time.
注記: 前-文書は在る, かつ それは`現在の文書$と`同一-生成元$である場合、 この時刻印は,~UAが前-文書の `unload^et ~eventを — `文書を~unloadする$手続きの中で — 取扱った直後に測定される。 他の場合、 この属性は 0 を返すことになる。 ◎ Note If the previous document and the current document have the same origin, this timestamp is measured immediately after the user agent handles the unload event of the previous document. If there is no previous document or the previous document has a different origin than the current document, this attribute will return zero.
`domInteractive@m 取得子~手続きは ⇒ ~RET コレの`文書~load計時$pTの`~DOMヤリトリあり時刻$ ◎ The domInteractive getter steps are to return this's document load timing's DOM interactive time.
注記: この時刻印は、 ~UAが`現在の文書$の`現在の準備度$docを `interactive^l に`設定する@~HTMLdom#update-the-current-document-readiness$前【!~HTMLparsing#the-end】に測定される。 ◎ Note This timestamp is measured before the user agent sets the current document readiness to "interactive".
`domContentLoadedEventStart@m 取得子~手続きは ⇒ ~RET コレの`文書~load計時$pTの`~DOMContentLoaded~event開始~時刻$ ◎ The domContentLoadedEventStart getter steps are to return this's document load timing's DOM content loaded event start time.
注記: この時刻印は、 ~UAが`現在の文書$に向けて `DOMContentLoaded^et `~eventを配送する@~HTMLparsing#the-end:event-domcontentloaded$直前に測定される。 ◎ Note This timestamp is measured before the user agent dispatches the DOMContentLoaded event.
`domContentLoadedEventEnd@m 取得子~手続きは ⇒ ~RET コレの`文書~load計時$pTの`~DOMContentLoaded~event終了~時刻$ ◎ The domContentLoadedEventEnd getter steps are to return this's document load timing's DOM content loaded event end time.
注記: この時刻印は、 ~UAが`現在の文書$に対する `DOMContentLoaded^et `~eventの取扱い@~HTMLparsing#the-end:event-domcontentloaded$を完了した直後に測定される。 ◎ Note This timestamp is measured after the user agent completes handling of the DOMContentLoaded event.
`domComplete@m 取得子~手続きは ⇒ ~RET コレの`文書~load計時$pTの`~DOM完了-時刻$ ◎ The domComplete getter steps are to return this's document load timing's DOM complete time.
注記: この時刻印は、 ~UAが`現在の文書$の`現在の準備度$docを `complete^l に`設定する@~HTMLdom#update-the-current-document-readiness$【!~HTMLparsing#the-end】前に測定される。 精確な定義は、 `現在の準備度$docを見よ。 ◎ Note This timestamp is measured before the user agent sets the current document readiness to "complete". See document readiness for a precise definition.
`loadEventStart@m 取得子~手続きは ⇒ ~RET コレの`文書~load計時$pTの`~load~event開始~時刻$ ◎ The loadEventStart getter steps are to return this's document load timing's load event start time.
注記: この時刻印は、 ~UAが`現在の文書$に向けて `load^et `~eventを配送する@~HTMLparsing#the-end:event-load$【!the-end:event-event-load】直前に測定される。 ◎ Note This timestamp is measured before the user agent dispatches the load event for the document.
`loadEventEnd@m 取得子~手続きは ⇒ ~RET コレの`文書~load計時$pTの`~load~event終了~時刻$ ◎ The loadEventEnd getter steps are to return this's document load timing's load event end time.
注記: この時刻印は、 ~UAが`現在の文書$に対する `load^et `~eventの取扱い@~HTMLparsing#the-end:event-load$【!the-end:event-event-load】を完了した後に測定される。 ◎ Note This timestamp is measured after the user agent completes handling the load event for the document.
`type@m 取得子~手続きは ⇒ ~RET【!to run the】 コレの`~navi種別$pT ◎ The type getter steps are to run the this's navigation type.
注記: `refresh$v ~pragma指令を利用する類いの,~client側~redirectは、 この仕様においては`~HTTP~redirect$とは見なされない。 そのような事例では、 `type$m 属性は適切な値を返すベキである — [ 現在の~pageを~reloadしている場合は `reload$l / 新たな~URLへ~navigateしている場合は `navigate$l ]など。 ◎ Note Client-side redirects, such as those using the Refresh pragma directive, are not considered HTTP redirects by this spec. In those cases, the type attribute SHOULD return appropriate value, such as reload if reloading the current page, or navigate if navigating to a new URL.
`redirectCount@m 取得子~手続きは ⇒ ~RET コレの`~redirect回数$pT ◎ The redirectCount getter steps are to return this's redirect count.
`criticalCHRestart@m 取得子~手続きは ⇒ ~RET コレの`~Critical-CH~restart時刻$pT ◎ The criticalCHRestart getter steps are to return this's Critical-CH restart time.
注記: `criticalCHRestart$m は、 0 でないならば,[ `navigationStart$1【 `timeOrigin$m 】, `unloadEventStart$m, `unloadEventEnd$m ]以外の時刻印より前になる — それは、[ ~naviの~redirectionを成す部分が~restartした時点 ]を~markするので。 ◎ If criticalCHRestart is not 0 it will be before all other timestamps except for navigationStart, unloadEventStart, and unloadEventEnd. This is because it marks the moment the redirection part of the navigation was restarted.
`notRestoredReasons@m 取得子~手続きは ⇒ ~RET コレの`復旧されない事由~群$pT ◎ The notRestoredReasons getter steps are to return this's not restored reasons.
`toJSON()@m ~methodは、 コレ用の`既定の~toJSON手続き$を走らす。 ◎ The toJSON() method runs the default toJSON steps for this.
3.3.1. `NavigationTimingType^I 列挙enum `NavigationTimingType@I { `navigate$l, `reload$l, `back_forward$l, `prerender$l };
各種 値は、 以下の定義に従う: ◎ The values are defined as follows:
注記: 上の列挙~値 `back_forward^l は `~Web~IDLが推奨する列挙~値の形式@~WEBIDL#idl-enums$に整合していないが、 出荷-済み実装との後方-互換性を保つため,変更するわけにはいかない。 `WebIDL$r ◎ Note The format of the above enumeration value is inconsistent with the WebIDL recommendation for formatting of enumeration values. Unfortunately, we are unable to change it due to backwards compatibility issues with shipped implementations. [WebIDL]
4. ~navi計時~属性【 この節は規範的ではない。 (この節の原文の~titleは “処理n~model” であるが、 処理n~modelは,各種 “計時~報” として他の仕様( `FETCH$r, `HTML$r など)に統合された。) 】 ◎ 4. Process ◎ 4.1. Processing Model
`PerformanceNavigationTiming$I ~interfaceにて定義される計時~属性を次の図式に示す。 括弧内の属性は、 `同一-生成元$でない文書を孕む~naviでは可用でない。 ◎ Figure 1 This figure illustrates the timing attributes defined by the PerformanceNavigationTiming interface. Attributes in parenthesis indicate that they may not be available for navigations involving documents from different origins. (時間は下に向かって進行する。) ← `startTime$m【 `~EQ 0 になる@#performanceentry$ 】~redirect 〜 応答: `RESOURCE-TIMING$r による`図式@~RESOURCE-TIMING#attribute-descriptions$を見よ ← ( `unloadEventStart$m ) ~unload~eventの処理n(応答と並列的) ← ( `unloadEventEnd$m )
← `domInteractive$m ← `domContentLoadedEventStart$m 処理 ← `domContentLoadedEventEnd$m ← `domComplete$m ← `loadEventStart$m ~load ← `loadEventEnd$m【 原文では,[ ~redirect 〜 応答 ]の箇所にも `PerformanceResourceTiming$I `RESOURCE-TIMING$r に定義される各~属性が記されているが、 その仕様の図式と重複するので,和訳では省略する。 】【 この訳では、 原文の図式( ~SVG )を~HTMLと~CSSによる等価な図式に差し替えている。 】
5. ~navi計時~entryの作成-法各 `文書$には、 `~navi計時~entry@doc が結付けられ,初期~時には ε (未設定)とする。 ◎ Each document has an associated navigation timing entry, initially unset.
`~navi計時~entryを作成する@ ~algoは、 所与の ⇒# `文書$ %文書, `~fetch計時~報$ %~fetch計時, 整数 %~redirect回数, `NavigationTimingType$I %~navi種別, ~NULL/`~sw計時~報$ %~sw計時, 文字列 %~cache~mode, `DOMHighResTimeStamp$I %~Critical-CH~restart, `応答~本体~報$ %本体~報 ◎終 に対し: ◎ To create the navigation timing entry for Document document, given a fetch timing info fetchTiming, a number redirectCount, a NavigationTimingType navigationType, a null or service worker timing info serviceWorkerTiming, a DOMString cacheMode, a DOMHighResTimeStamp criticalCHRestart, and a response body info bodyInfo, do the following:
`~navi計時を~queueする@ ~algoは、 所与の ( `文書$ %文書 ) に対し ⇒ `処理能~entryを~queueする$( %文書 の`~navi計時~entry$doc ) ◎ To queue the navigation timing entry for Document document, queue document's navigation timing entry.
~privacyの考慮点 ◎非規範的`PerformanceNavigationTiming$I ~interfaceは、 前-文書についての計時~情報を`現在の文書$に公開する。 `PerformanceNavigationTiming$I の属性のうち,前-文書の情報を含むものへの~accessを制限するため、 前-文書を~unloadするときに — `新たな~pageで~session履歴を更新する$ ~algo `HTML$r の中で — `同一-生成元$施策が施行され,【失敗した場合は】前-文書に関係する属性は 0 に設定される。 ◎ The PerformanceNavigationTiming interface exposes timing information about the previous document to the current document. To limit the access to PerformanceNavigationTiming attributes which include information on the previous document, the previous document unloading algorithm enforces the same origin policy and attributes related to the previous document are set to zero.
この節では、 以前に `NAVIGATION-TIMING$r ~level 1 にて導入された[ 属性, ~interface ]を定義し,後方-互換性のために ここに保つ。 作者には、 以下の~interfaceを利用するべきでない — 新たな `PerformanceNavigationTiming$I ~interfaceを利用することを強く勧める。 `変更点と改善点の要約@#sotd$を見よ。 ◎ This section defines attributes and interfaces previously introduced in [NAVIGATION-TIMING] Level 1 and are kept here for backwards compatibility. Authors should not use the following interfaces and are strongly advised to use the new PerformanceNavigationTiming interface—see summary of changes and improvements.
【この訳( ~level 1 )に特有な表記規約】この節にて原文が参照する~HTTP用語は,過去の~HTTP仕様 `RFC2616$r を参照しているが、 この訳では,最新な~HTTP仕様( ~RFC 9110 〜 9112 )の等価な記述を参照することにする。
用語 “前-文書( `previous document^en )” は、 `現在の文書$へ~navigateされる前の時点で,当の`~navigable$にて`作動中な文書$navであったものを指す(明確には定義されていない)。
以下における `局所~cache等@ は、[ ~HTTP~cache/局所~資源 ]を指す総称である。
`PerformanceTiming^I ~interface[`Exposed$=Window] interface `PerformanceTiming$I { readonly attribute unsigned long long `navigationStart$1; readonly attribute unsigned long long `unloadEventStart$1; readonly attribute unsigned long long `unloadEventEnd$1; readonly attribute unsigned long long `redirectStart$1; readonly attribute unsigned long long `redirectEnd$1; readonly attribute unsigned long long `fetchStart$1; readonly attribute unsigned long long `domainLookupStart$1; readonly attribute unsigned long long `domainLookupEnd$1; readonly attribute unsigned long long `connectStart$1; readonly attribute unsigned long long `connectEnd$1; readonly attribute unsigned long long `secureConnectionStart$1; readonly attribute unsigned long long `requestStart$1; readonly attribute unsigned long long `responseStart$1; readonly attribute unsigned long long `responseEnd$1; readonly attribute unsigned long long `domLoading$1; readonly attribute unsigned long long `domInteractive$1; readonly attribute unsigned long long `domContentLoadedEventStart$1; readonly attribute unsigned long long `domContentLoadedEventEnd$1; readonly attribute unsigned long long `domComplete$1; readonly attribute unsigned long long `loadEventStart$1; readonly attribute unsigned long long `loadEventEnd$1; [`Default$] object `toJSON$1(); };
【 利用中の~UAで、 この~pageについて,これらの属性~値を
(括弧内は `navigationStart$1 からの時間~差) 】
(結果は~consoleではなく,ここに示される)
【 他~pageでも利用できる`ブックマークレット@~bookmarklet1$(結果は~consoleに示される) 】【 `~level 2 実装~用のもの@#_test_level2$もある 】
注記: この節に定義されるすべての時刻~値は、 1970 年 1 月 1 日, 午前 0 時( UTC )から~milli秒数で測定される。 ◎ Note All time values defined in this section are measured in milliseconds since midnight of January 1, 1970 (UTC).
注記: この~interfaceには requestEnd
のような類いの,要請の送信の完了を表現する属性は含まれていない: ◎ Note This interface does not include an attribute to represent the completion of sending the request, e.g., requestEnd.
DOMContentLoaded
~event が完了した直後の時刻を返すモノトスル。 ◎ This attribute must return the time immediately after the document's DOMContentLoaded event completes.
[`Exposed$=Window] interface `PerformanceNavigation$I { const unsigned short `TYPE_NAVIGATE$1n = 0; const unsigned short `TYPE_RELOAD$1n = 1; const unsigned short `TYPE_BACK_FORWARD$1n = 2; const unsigned short `TYPE_RESERVED$1n = 255; readonly attribute unsigned short `type$1n; readonly attribute unsigned short `redirectCount$1n; [`Default$] object `toJSON$1n(); };
[`Exposed$=Window] partial interface `Performance^I { [`SameObject$] readonly attribute `PerformanceTiming$I `timing$1; [`SameObject$] readonly attribute `PerformanceNavigation$I `navigation$1; };
`Performance^I ~interfaceは `PERFORMANCE-TIMELINE-2$r にて定義される。 【! ~TIMELINE#extensions-to-the-performance-interface】 ◎ The Performance interface is defined in [PERFORMANCE-TIMELINE-2].
貢献された次の方々に感謝する:
Thanks to 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 and Zhiheng Wang for their contributions to this work.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.3