気になる問題
「Loading Time」を実際に使って調査していると、気になる問題が出て来ました。
ver.0.1 では 100msec(0.1秒)にしましたが、これは2秒前後の計測をする予測から、それに見合うインターバルにしたものです。 しかし、比較的短時間でロードされる要素の計測では、100msecはアバウト過ぎます。 実際は10msecのロード時間が100msecの結果になるからです。
それだけでなく、例えば 100msecの精度で計測すると 200msecの結果なのに、10msecの精度で計測すると 80msecの結果になる場合があり、計測のインターバルで結果のシフトが生じる疑いが出て来ました。 原因は不明ですが、これはもう少しテストをして校正する必要があるかもしれません。
以上の問題点を煮詰める前に、もう少しツールを扱い易くしました。
ツールを扱い易く改善
結果をページ上に表示
ver.0.1 では、DevTools で「キャッシュの消去とハード再読み込み」を実行する事を必須と考えていました。
しかしテストを繰り返すと、「ハード再読み込み」と結果に差が出ないらしいと判って来ました。 このリロード方法の違いは以下が判り易いです。
〔注〕
差が出ないというのは、私が注目しているHomeの特定の要素のロード時間の測定に関してであり、関心対象によっては大いに差があるかも知れません。
実際のHome画面でのテストでは、通常の「Ctrl+R」(または「F5」)とハード再読込み「Ctrl+Shift+R」(または「Shift+F5」)で足りると判断しました。 これは、DevToolsの起動が不要になり、ブラウザの通常の動作環境を再現し易くなります。
実際に、能力の劣る私の旧マシンでは、DevToolsを起動するとリソースが奪われ、本来のブラウザ機能が落ちて、計測の結果が変化する傾向があります。
ただし、コンソールを参照出来なくなるので、「Loading Time」に結果を表示させるコードを追加しました。
下は、結果を表示する関数です。
「Loading Time」 ver. 0.2 66行~
計測の結果はページを開く度に、ブラウザウインドウの左上隅に表示されます。
パラメーターを変更し易く
ツールを複雑にすると、その事で計測が不正確になるかも知れません。 単純で、適確な動作をするコードが望ましいのです。
従って、色々な入力枠等を用意して扱い易いインターフェイスでパラメーターを設定可能にするより、直接にコードを書き変えてテストする方式が最良です。 という事で、コードを書換え易くする事を考えました。
コード中で「計測間隔」「計測の上限」を記入する所を判り易くしました。
「Loading Time」 ver. 0.2 46行~
この「🟦」の目印で、コードの変更場所が直ぐに判ります。
調査方法
調査対象はコード内で「E0」~「E9」のどれかを「🟥」の行で指定します。
「Loading Time」 ver. 0.2 58行~
▪ デフォルトでは「Home」の幾つかの要素を選択できる様になっています。
▪ 他のページで他の要素を特定するクラス名を指定して調べる事が出来ます。
● 対象要素の指定となる様にソースコードを書き換えて、Tampermonkeyの「ファイル」メニューの「保存」を押します。
●「Home」の画面を開くと、コードで指定した要素のロード時間が表示されます。
▪ページを開く度、リロードする度に、ページの左上隅に結果を表示します。
▪リロードする度に、結果は異なる可能性があります。 平均値を調べる意味で、何度かリロードして調査します。
▪通常のリロード「Ctrl+R」、ハード再読込み「Ctrl+Shift+R」の違いを勘案してリロードを実行します。
▪指定した要素が指定した時間を超えてもロードされない場合は、調査が停止した上で、画面の左上隅に表示が出ます。
●「Loading Time」は非常駐型のツールです。 調査の終了後は、Tampermonkeyのダッシュボードで、このツールをOFFにしてください。
適用ページと調査対象 のカスタマイズ
調査する対象ページは、「@match」のパラメータで指定できます。 デフォルトではアメーバブログの主要関連ページのドメインを指定にしていますが、アメーバ以外の任意のドメインでの調査も、もちろん可能です。
デフォルトの「@match」パラメータ 7行~
ロードされるまでの時間を調査する「対象の要素」は、コード上で 変数「E0~E9」としています。 これは「Home」の各種要素を、「Ex」を書き換えるだけで調査出来る様にしたものです。
調査対象の指定「E0~E9」 15行~
最後の「EE」は、セレクタ書換え用の変数として追加したものです。
「Loading Time」を利用するには
このツールは Chrome / Edge / Firefox版の拡張機能「Tampermonkey」上で動作します。 以下に、このツールの導入手順を簡単に説明します。
❶「Tampermonkey」を導入します
◎ 使用しているブラウザに拡張機能「Tampermonkey」を導入する事が必要です。
既に「Tampermonkey」を導入している場合は、この手順 ❶ は不要です。
拡張機能の導入については、以下のページに簡単な説明があるので参照ください。
❷「Tampermonkey」にスクリプトを登録します
◎「Tampermonkey」の「+」マークの「新規スクリプト」タブを開きます。
◎「新規スクリプト」には、最初からテンプレートが記入されています。 これは全て削除して、完全に空白の編集枠に 下のコードをコピー&ペーストします。
〔コピー方法〕 軽量シンプルなツール「PreBox Button 」を使うと
コード枠内を「Ctrl+左Click」➔「Copy code 」を「左Click」
の操作で、掲載コードのコピーが可能になります。
◎ 最後に「ファイル」メニューの「保存」を押すと、ツールが使用可能になります。
〔 Loading Time 〕 ver. 0.2
// ==UserScript== // @name Loading Time // @namespace http://tampermonkey.net/ // @version 0.2 // @description 要素のローディング時間を調査する // @author Ameba blog User // @match https://ameblo.jp/* // @match https://www.ameba.jp/* // @match https://blog.ameba.jp/* // @match https://msg.ameba.jp/* // @noframes // @grant none // ==/UserScript== // お知らせ項目 let E0='.HomeRedNotification_Item_Button'; // コメントした記事 let E1='.HomeBlogComment_Collection a'; // コメントした記事 もっと見る let E2='.HomeBlogComment .Collection_ReadMore_Button'; // スタッフブログ 告知項目 let E3='.PcModuleNotification_Link'; //フォローフィード 新着記事 let E4='.HomeChecklist_Collection_Item'; //フォローフィード もっと見る let E5='.HomeChecklist .Collection_ReadMore_Button'; // 最近見たブログ let E6='.HomeBlogHistory_Article'; // Amebaトピックス 記事 let E7='.HomeMainTopics_Topic'; // 新着トピックス let E8='.HomeBlogFeed_Article_Card'; // 新着トピックス もっと見る let E9='.HomeBlogFeed .Collection_ReadMore_Button'; let EE='.HomeBlogModule_Banner'; let interval_time=100; // 計測間隔 msec 🟦 let max_retry=8; // 計測の上限 sec 🟦 let retry=0; let interval=setInterval(wait_target, interval_time); function wait_target(){ retry++; if(retry*interval_time>max_retry*1000){ // 待機上限 clearInterval(interval); result_disp(retry*interval_time, 1); } let target=document.querySelector(E1); // 調査対象のセレクタを指定 🟥 if(target){ clearInterval(interval); result_disp(retry*interval_time, 0) console.log(retry*interval_time + 'msec'); }} function result_disp(n, limit){ let dis; if(limit==0){ dis='<div id="lt_disp">'+ n +'msec'; } else{ dis='<div id="lt_disp">'+ max_retry +'sec を超えたので計測を中止しました'; } dis+= '<style>'+ '#lt_disp { position: fixed; top: 62px; left: 6px; z-index: 10000; '+ 'font: normal 16px Meiryo; padding: 4px 8px 2px; '+ 'color: #000; background: #fff; border: 1px solid #aaa; }'+ '</style></div>'; document.body.insertAdjacentHTML('beforeend', dis); }
「Loading Time」最新版について
旧いバージョンの JavaScriptツールは、アメーバのページ構成の変更で動作しない場合があり、導入する場合は最新バージョンをお勧めします。
●「Loading Time」の最新バージョンへのリンクは、以下のページのリンクリストから探せます。