Google Analytics の
で、
こちらを
参考
前提
以下の
OS
% sw_vers ProductName: Mac OS X ProductVersion: 10.12.6 BuildVersion: 16G29
Dockerの
Version % docker version Client: Version: 17.06.2-ce API version: 1.30 Go version: go1.8.3 Git commit: cec0b72 Built: Tue Sep 5 20:12:06 2017 OS/Arch: darwin/amd64 Server: Version: 17.06.2-ce API version: 1.30 (minimum version 1.12) Go version: go1.8.3 Git commit: cec0b72 Built: Tue Sep 5 19:59:19 2017 OS/Arch: linux/amd64 Experimental: true
そもそも Browsertime とは
Documentation sitespeed.io 5.x の
Browsertime に
Navigation Timing
と、User Timing
、Resource Timing
、RUM Speed Index
(Resource Timing API からSpeed Index指標を 頑張って 算出する ) を ブラウザから 直接取得できる。 ブラウザアクセス時の
HARファイルを 生成できる。
HARファイルが何かよく わかって おらず、 以下が 参考に なりました。
Firefox のFirebug や Chrome の デベロッパーツールの Network の 結果を HAR に エクスポートしたり PDF に 印刷する 方法 | ウェブル ブラウザで
カスタムJavascriptが 実行できる。
やりたいのはこれです。 動画を
記録し、 結果を 分析できる。
CUIから
ブラウザ自動操作 とか
Browsertimeを 実行する
Browsertime に
コマンド は、
https://www.sitespeed.io/
の メトリクスを 取得する
** コマンドを
実行** docker run --shm-size=1g --rm -v "$(pwd)":/browsertime-results sitespeedio/browsertime --video --speedIndex https://www.sitespeed.io/
** OUTPUT**
以下のエラーが 発生しました。 17:55:03.581 - No video frames found in /browsertime-results/www.sitespeed.io/2017-09-08T175442+0000/video/images/0 at Promise.all.then.arr (/usr/src/app/node_modules/execa/index.js:208:11) at process._tickCallback (internal/process/next_tick.js:109:7) From previous event: at /usr/src/app/node_modules/mkdirp/index.js:30:20 at FSReqWrap.oncomplete (fs.js:123:15) From previous event: at Object.run (/usr/src/app/lib/support/video/scripts/runVisualMetrics.js:13:8) at Promise.mapSeries.postScript (/usr/src/app/lib/core/engine.js:360:24) From previous event: at Promise.resolve.tap.tap.tap.tap.tap.tap.tap.tap.tap.tap.results (/usr/src/app/lib/core/engine.js:359:19) From previous event: at runIteration (/usr/src/app/lib/core/engine.js:358:10) at Promise.reduce (/usr/src/app/lib/core/engine.js:405:27) From previous event: at Promise.resolve.tap.tap.tap.tap.result (/usr/src/app/lib/core/engine.js:402:17) at runCallback (timers.js:672:20) at tryOnImmediate (timers.js:645:5) at processImmediate [as _immediateCallback] (timers.js:617:5) From previous event: at Engine.run (/usr/src/app/lib/core/engine.js:401:8) at /usr/src/app/bin/browsertime.js:63:21 From previous event: at run (/usr/src/app/bin/browsertime.js:62:6) at Object.<anonymous> (/usr/src/app/bin/browsertime.js:137:1) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) at Module.runMain (module.js:604:10) at run (bootstrap_node.js:389:7) at startup (bootstrap_node.js:149:9) at bootstrap_node.js:504:3
対処方法が
https://www.yahoo.com
の メトリクスを 取得する
** コマンドを
実行**
browsertimeで、Webページの 描画過程を 録画する - togatttiの エンジニアメモ に 記載されている コマンドを 拝借して、 https://www.yahoo.com
のメトリクスを 取得します。 docker run --privileged --shm-size=1g --rm -v "$(pwd)":/browsertime-results sitespeedio/browsertime -n 1 -c cable --video --speedIndex 'https://www.yahoo.com'
** OUTPUT**
よくGoogle Chrome 60.0.3112.78 Mozilla Firefox 54.0 [2017-09-08 18:12:29] Running chrome for url: https://www.yahoo.com [2017-09-08 18:12:29] sudo tc qdisc add dev eth0 root netem delay 28ms loss 0% rate 5000kbps [2017-09-08 18:12:29] Testing url https://www.yahoo.com run 1 [2017-09-08 18:13:26] 153 requests, 1599.72 kb, backEndTime: 763ms, firstPaint: 1.84s, firstVisualChange: 2.62s, DOMContentLoaded: 5.41s, Load: 8.97s, speedIndex: 5396, visualComplete85: 8.42s, lastVisualChange: 11.07s, rumSpeedIndex: 2790 [2017-09-08 18:13:27] Wrote data to browsertime-results/www.yahoo.com/2017-09-08T181228+0000 [2017-09-08 18:13:27] sudo tc qdisc del dev eth0 root
わかりませんが、 正常終了しました。
https://www.sitespeed.io/
の メトリクスを 再取得する
コマンドを
再実行
もう1度コマンドを実行してみます。 docker run --shm-size=1g --rm -v "$(pwd)":/browsertime-results sitespeedio/browsertime --video --speedIndex https://www.sitespeed.io/
OUTPUT
1回目のGoogle Chrome 60.0.3112.78 Mozilla Firefox 54.0 [2017-09-08 18:16:43] Running chrome for url: https://www.sitespeed.io/ [2017-09-08 18:16:43] Testing url https://www.sitespeed.io/ run 1 [2017-09-08 18:16:55] Testing url https://www.sitespeed.io/ run 2 [2017-09-08 18:17:06] Testing url https://www.sitespeed.io/ run 3 [2017-09-08 18:17:16] 10 requests, 96.46 kb, backEndTime: 114ms (±9.67ms), firstPaint: 181ms (±10.91ms), firstVisualChange: 250ms (±17.90ms), DOMContentLoaded: 140ms (±12.38ms), Load: 229ms (±9.13ms), speedIndex: 258 (±14.80), visualComplete85: 261ms (±14.06ms), lastVisualChange: 284ms (±11.79ms), rumSpeedIndex: 191 (±9.42) (3 runs) [2017-09-08 18:17:16] Wrote data to browsertime-results/www.sitespeed.io/2017-09-08T181642+0000
失敗が 謎ですが、 2回目は 成功しました。 出力ファイル
tree コマンドが無い 環境で tree コマンドを 実現 - Qiita から コマンドは 拝借しました。
動画と、speedindex の 測定結果 browsertime.json
、harファイル browsertime.har
が出力されています。 % find www.sitespeed.io/ | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--\1/;s/\/[^/|]*/| /g' www.sitespeed.io| |--.DS_Store www.sitespeed.io| |--2017-09-08T181642+0000 www.sitespeed.io| | |--browsertime.har www.sitespeed.io| | |--browsertime.json www.sitespeed.io| | |--video www.sitespeed.io| | | |--0.mp4 www.sitespeed.io| | | |--1.mp4 www.sitespeed.io| | | |--2.mp4 www.sitespeed.io| | | |--images www.sitespeed.io| | | | |--0 www.sitespeed.io| | | | | |--ms_000000.jpg www.sitespeed.io| | | | | |--ms_000300.jpg www.sitespeed.io| | | | | |--ms_000317.jpg www.sitespeed.io| | | | |--1 www.sitespeed.io| | | | | |--ms_000000.jpg www.sitespeed.io| | | | | |--ms_000217.jpg www.sitespeed.io| | | | | |--ms_000234.jpg www.sitespeed.io| | | | | |--ms_000250.jpg www.sitespeed.io| | | | | |--ms_000267.jpg www.sitespeed.io| | | | |--2 www.sitespeed.io| | | | | |--ms_000000.jpg www.sitespeed.io| | | | | |--ms_000234.jpg www.sitespeed.io| | | | | |--ms_000250.jpg www.sitespeed.io| | | | | |--ms_000267.jpg
カスタム javascript を 実行する
自サイト対して
実行する スクリプト
browsertime/browserscripts/timings at master · sitespeedio/browsertime
を
Google Analytics の
- MyCustomScript.js
(function() { 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 jsonObject; })();
コマンドを 実行
コマンド
以下指定オプションにdocker run --shm-size=1g --rm -v "$(pwd)":/browsertime-results sitespeedio/browsertime \ --skipHar \ --script /browsertime-results/MyCustomScript.js \ --prettyPrint \ -n 5 \ --speedIndex https://www.monotalk.xyz
ついて 説明します。
sitespeedio/browsertime: Your browser, your page, your scripts! に指定可能な オプションは 記載されています。 –skipHar
harファイルを取得しないようにします。 –script /browsertime-results/MyCustomScript.js
customスクリプトファイルを指定します。
-v "$(pwd)":/browsertime-results
でホストの カレントディレクトリを コンテナの /browsertime-results
にマウントしていますので、 MyCustomScript.js
はカレントディレクトリに 配置します。 –prettyPrint
browsertime.json
を整形して 出力します。 -n 5
メトリクス取得回数を指定します。 この 場合5回です。 –speedIndex
スピードインデックスメトリクスを取得します。
指定しない場合は デフォルトで これが 効いていそうに 思います。 OUTPUT
取得指定した覚えのない jpg
が出力されております。
browsertime.json
は取得できていますので、 内容を 確認します。 % find www.monotalk.xyz/ | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--\1/;s/\/[^/|]*/| /g' www.monotalk.xyz| |--2017-09-09T031247+0000 www.monotalk.xyz| | |--browsertime.json www.monotalk.xyz| | |--video www.monotalk.xyz| | | |--images www.monotalk.xyz| | | | |--0 www.monotalk.xyz| | | | | |--ms_000000.jpg ..... www.monotalk.xyz| | | | |--1 www.monotalk.xyz| | | | | |--ms_000000.jpg ..... www.monotalk.xyz| | | | |--2 www.monotalk.xyz| | | | | |--ms_000000.jpg ..... www.monotalk.xyz| | | | |--3 www.monotalk.xyz| | | | | |--ms_000000.jpg ..... www.monotalk.xyz| | | | |--4 www.monotalk.xyz| | | | | |--ms_000000.jpg .....
browsertime.jsonの 抜粋
以下、browsertime.json
の
5回記録していたため、
"custom": { "MyCustomScript": { "backEnd": { "domainLookupTime": 0, "pageDownloadTime": 8, "pageLoadTime": 108, "redirectionTime": 0, "serverConnectionTime": 45, "serverResponseTime": 4209 }, "frontEnd": { "domContentLoadedTime": 3, "domInteractiveTime": 1740, "pageLoadTime": 108 } } }
まとめ
以下まとめます。
sitespeed.io は、
browsertime を 内部で 使用して おり、 browsertime単独でも 実行できる browsertime には、
カスタム指標を 取得する スクリプトが 登録でき、 custom プロパティに 出力される。
sitespeed.ioは、内部で browsertimeを 使用している ため、 sitespeed.ioでも 同様の ことができる。 出力形式は
jsonのみ、 htmlレポートは sitespeed.ioの 機能で 出力する 必要が ある。
単独だと、
sitespeed.ioだと
スポットで
以上です。
コメント