Navigation Timing API - Web API
各計測方法は、
前提
以下の
OS
% sw_vers ProductName: Mac OS X ProductVersion: 10.12.6 BuildVersion: 16G29
動作確認を
行った ブラウザ Google Chrome バージョン: 61.0.3163.79(Official Build) (64 ビット)
動機
ブラウザ操作ツールで、
フロントエンドの パフォーンマンスを 測定したい。 フロンドエンドの
パフォーマンス測定用途で、 javascript timing api 使えそうに 思ったが、 なるべく 一般化された 指標を もちいたい。 Google Analytics 上で
閲覧できる 速度指標が、 javascript timing api で 計算されているので、 その 計算式を 再現すれば、 画面と 一致して 見やすい。 (かもしれない。 )
というのが
参考
Google Analytics の サイトの 速度に 関する 理解
確認方法
現状(2017/09/07)だと、
エクスプローラ タブ
時系列での
分布
以下の
[ページ読み込み時間バケット(秒)] が
計測している
ページ読み
込み時間バケット(秒) リダイレクト時間
バケット(秒) ドメイン ルックアップ時間
バケット(秒) サーバー接続時間バケット(秒)
サーバー応答時間バケット(秒)
ページ ダウンロード時間
バケット(秒) ドキュメント インタラクティブ時間
バケット(秒) ドキュメント コンテンツ読み込み時間バケット(秒)
この記事では、
地図表示
全世界での、
直帰率との
Google Analytics の サイトの 速度指標に 関する ドキュメント
Google Analytics が
javascript navigation time API のMetrics
が
Metrics
のCalculated Metrics
が
Metrics
Metrics
には
末尾にTime
のSample
で
ga:pageLoadTime
ga:pageLoadSample
ga:domainLookupTime
ga:pageDownloadTime
ga:redirectionTime
ga:serverConnectionTime
ga:serverResponseTime
ga:speedMetricsSample
ga:domInteractiveTime
ga:domContentLoadedTime
ga:domLatencyMetricsSample
Calculated Metrics
Calculated Metrics
には
こちらは、Metrics
を
個別指標を
Google Analytics での
指標名(日本語名) | 指標名(英語) | 計算式 |
---|---|---|
ページ読み込み時間バケット(秒) | ga:avgPageLoadTime | (ga:pageLoadTime / ga:pageLoadSample / 1000) |
リダイレクト時間バケット(秒) | ga:avgRedirectionTime | (ga:redirectionTime / ga:speedMetricsSample / 1000) |
ドメイン ルックアップ時間バケット(秒) | ga:avgDomainLookupTime | (ga:domainLookupTime / ga:speedMetricsSample / 1000) |
サーバー接続時間バケット(秒) | ga:avgServerConnectionTime | (ga:serverConnectionTime / ga:speedMetricsSample / 1000) |
サーバー応答時間バケット(秒) | ga:avgServerResponseTime | (ga:serverResponseTime / ga:speedMetricsSample / 1000) |
ページ ダウンロード時間バケット(秒) | ga:avgPageDownloadTime | (ga:pageDownloadTime / ga:speedMetricsSample / 1000) |
ドキュメント インタラクティブ時間バケット(秒) | ga:avgDomInteractiveTime | (ga:domInteractiveTime / ga:domLatencyMetricsSample / 1000) |
ドキュメント コンテンツ読み込み時間バケット(秒) | ga:avgDomContentLoadedTime | (ga:domContentLoadedTime / ga:domLatencyMetricsSample / 1000) |
Metrics
を javascript に 置き換える。
本題です。
Metrics
を
Calculated Metrics
はMetrics
同士 のMetrics
のCalculated Metrics
の
置き換えの 前提
ga:pageLoadTime
等のGA上の 指標は、 ページ単位で<wbr>計測した<wbr>時間<wbr> * 計測ページ
数の合計で 表されますが、 以下の javascriptは ページ単位で<wbr>計測した<wbr>時間<wbr>
を計算する javascriptに なります。 あくまで
ドキュメントを 見ながら 推測で これじゃないかと いう 計算式を 記述しています。
Gooogle Analytics 側の実際の 計算式は 違ったは あり 得ると 思います。が、 近い値は 出ているかと 思ってます。
ga:pageLoadTime
ページ読み込み 時間
Navigation Timing API - Web API
var perfData = window.performance.timing; var pageLoadTime = perfData.loadEventEnd - perfData.navigationStart; console.log(pageLoadTime);
statckovergflow には
ページの<wbr>読み込みが<wbr>完了するまで
なのでperfData.loadEventEnd - perfData.navigationStart;
でのあまり
// stackoverflowの記事には以下が記載されていました。 var pageLoadTime = perfData.loadEventStart - perfData.navigationStart; console.log(pageLoadTime);
var perfData = window.performance.timing; var pageLoadTime = perfData.loadEventEnd - perfData.navigationStart; console.log(pageLoadTime / 1000 + ":seconds");
perfData.loadEventEnd
は実行は
ga:redirectionTime
リダイレクト時間
リダイレクトに
プロパティ redirectEnd
、redirectStart
を
var perfData = window.performance.timing; var redirectionTime = perfData.redirectEnd - perfData.redirectStart; console.log(redirectionTime / 1000 + ":seconds"); // stackoverflowの記載だとこちら // ユーザーからみてのリダイレクト時間はこちらな気がします。 // が、ブラウザ側を採用 var redirectionTime = perfData.fetchStart - perfData.navigationStart; console.log(redirectionTime / 1000 + ":seconds");
ga:domainLookupTime
ドメイン ルックアップ時間
DSN LookUp に
navigation timing api にdomainLookupStart
、domainLookupEnd
と
それを
var perfData = window.performance.timing; var domainLookupTime = perfData.domainLookupEnd - perfData.domainLookupStart; console.log(domainLookupTime / 1000 + ":seconds");
ga:serverConnectionTime
サーバー接続時間
サーバへの
プロパティ connectEnd
、connectStart
を
var perfData = window.performance.timing; var serverConnectionTime = perfData.connectEnd - perfData.connectStart; console.log(serverConnectionTime / 1000 + ":seconds");
ga:serverResponseTime
サーバー応答時間
ユーザーの
なので、responseStart
、requestStart
の
var perfData = window.performance.timing; var serverResponseTime = perfData.responseStart - perfData.requestStart; console.log(serverResponseTime / 1000 + ":seconds");
ga:pageDownloadTime
平均ダウンロード時間
ページの
プロパティ responseEnd
、responseStart
を
var perfData = window.performance.timing; var pageDownloadTime = perfData.responseEnd - perfData.responseStart; console.log(pageDownloadTime / 1000 + ":seconds");
ga:domInteractiveTime
ドキュメント インタラクティブ時間
ブラウザが
計算式は
domInteractive
と、domComplete
の
var perfData = window.performance.timing; var domInteractiveTime = perfData.domComplete - perfData.domInteractive; console.log(domInteractiveTime / 1000 + ":seconds");
ga:domContentLoadedTime
ドキュメント コンテンツ読み込み 時間
ブラウザが
domContentLoadedEventStart
とdomContentLoadedEventEnd
の
var perfData = window.performance.timing; var domContentLoadedTime = perfData.domContentLoadedEventEnd - perfData.domContentLoadedEventStart; console.log(domContentLoadedTime / 1000 + ":seconds");
バックエンド側の 指標、 フロントエンド側の 指標で グループ化して、 JSONで 書き出す。
上記個別に
backEnd
を
frontEnd
を
dumpTimingMetrix.js
function dumpTimingMetrix() { var perfData = window.performance.timing; var jsonObject = { "backEnd" : { "pageLoadTime" : perfData.fetchStart - perfData.navigationStart, "redirectionTime" : perfData.redirectEnd - perfData.redirectStart, "domainLookupTime" : perfData.domainLookupEnd - perfData.domainLookupStart, "serverConnectionTime" : perfData.connectEnd - perfData.connectStart, "serverResponseTime" : perfData.responseStart - perfData.requestStart, "pageDownloadTime" : perfData.responseEnd - perfData.responseStart }, "frontEnd": { "pageLoadTime" : perfData.fetchStart - perfData.navigationStart, "domInteractiveTime" : perfData.domComplete - perfData.domInteractive, "domContentLoadedTime" : perfData.domContentLoadedEventEnd - perfData.domContentLoadedEventStart } }; return JSON.stringify(jsonObject); }
OUTPUT
OUTPUTとして、 以下が 得られます。 { "backEnd":{ "pageLoadTime":21, "redirectionTime":0, "domainLookupTime":3072, "serverConnectionTime":83, "serverResponseTime":257, "pageDownloadTime":245 }, "frontEnd":{ "pageLoadTime":21, "domInteractiveTime":4830, "domContentLoadedTime":51 } }
これを
以上です。
コメント