ページのローディング時の観察
ブラウザがひとつのページを表示する最初は、各種パーツを読込み表示し、ページ上で動作するスクリプトを読込んで動作を開始するなど、大変に忙しく舞台設定が行われます。 ウェブページの表示内容が複雑に高度化した現在、重いページを素早く表示させる事は、ページを作る側には重要課題です。
そんなページで動作するユーザースクリプト(JavaScriptツール)を制作する際は、各種の要素がページに読み込まれる(Loading)タイミングを知る必要があります。 ページの構成開始とほぼ同時にスクリプトも動作を始めるので、未だ読み込まれていない要素に働きかける様なスクリプトは、エラーになってしまうからです。
スクリプトの制作でこの問題は時々起こるので、特定の要素がどの様なタイミングでページに読み込まれるのかを調査するツールがあれば、役にたつと考えました。
DevToolsを使えば、ローディング時の状況をmsec単位で解析できますが、時間を要して大変です。 調べる要素が決まっている場合に、その読込みまでの時間を調べるこのツールは、スクリプト制作時には便利なはずです。
「Loading Time」
この調査ツールの名は「Loading Time」としました。 基礎になっているのは、これまでに各所で使って来た、要素がロードされしだい取得するというコードです。
調査方法
「Loading Time」のコードは、「Home」に表示される各種のリンクのリストを調査対象としています。 (調査対象のカスタマイズを参照ください)
1回の起動で1個の要素しか調査できないので、「ソースコード 52行目」の「E4」を、「E0」~「E9」に、調査ごとに書換えて調べます。
(初期値「E4」はフォローフィードの新着記事です)
「Home」の他の要素や、「Home」以外のページの特定の要素を調べる場合は、27行目の「' '」の中を、目的要素のセレクタに書き換えれば可能です。
● 対象要素の指定となる様にソースコードを書き換えて、Tampermonkeyの「ファイル」メニューの「保存」を押します。
次に「Home」の画面を開きます。 計測値はコンソールに表示されるので、DevTools
を開く必要があります。
●「Home」のページを開き「F12」を押します。
●「DevTools」が表示されたら最上段の「コンソール」を選択し、左列の項目中から「ユーザーメッセージ」を選択します。
右側の枠にメッセージの内容が表示されますが、背景色の無いシンプルな表示が、このツールの出力です。 上図では「300msec」となっています。
▪指定した要素が 8sec以上経ってもロードされない場合は、コンソールには何も表示されませんが、「Home」の画面にアラート表示が出ます。
▪「Home」をリロードする度に、結果は異なる可能性があります。 平均値を調べる意味で、何度かリロードして調査します。
次に、キャッシュを削除してロードタイミングを調べます。 以下の調査の結果は、久しぶりに「Home」を開いた時の状態に近い結果になります。
●「Home」のページのリロードボタン「 」を「右Click」すると、下のメニューが表示されます。
「キャッシュの消去とハード再読み込み」を押して、コンソールを確認します。
▪ 平均値を調べる意味で、何度かこの操作をして調査します。
▪ 一般に、キャッシュを消去するとロードタイミングは遅くなります。
●「Loading Time」は非常駐型のツールです。 調査の終了後は、Tampermonkeyのダッシュボードで、このツールをOFFにしてください。
調査精度とタイミング上限のカスタマイズ
コード上はいくらでも精密な計測コードが書けますが、JavaScriptの実際の動作には限界がある様です。 現在のツールの目的から、計測のタイミングは 100msecごとにしていますが、10msec程度までは精度を上げられると思います。
下は、このツールの中心部です。
「Loading Time」 ver.0.1 44行~
▪「100」は、計測の間隔(インターバル)で「100msec」を指定しています。
この値を「10」にすれば「10msec」ごとに精密な計測ができます。 ただし、むやみに上げるとブラウザのリソースを食い、ブラウザの動作が不安定になるはずです。
また、インターバルを小さくする場合は、retylの上限回数を増やす必要があります。
▪「retry>80」になっても目的の要素がロードされない場合に、8secで調査を切り上げる様にしています。
▪「E4」は、調査対象の要素のセレクタを指定する変数です。
これらの値を変更して、必要な調査に適した動作をさせる事ができます。
適用ページと調査対象 のカスタマイズ
調査する対象ページは、「@match」のパラメータで指定できます。 デフォルトではアメーバブログの主要関連ページのドメインを指定にしていますが、アメーバ以外の任意のドメインでの調査も、もちろん可能です。
デフォルトの「@match」パラメータ 7行~
ロードされるまでの時間を調査する「対象の要素」は、コード上で 変数「E0~E9」としています。 これは「Home」の各種要素を、「Ex」を書き換えるだけで調査出来る様にしたものです。
調査対象の指定「E0~E9」 15行~
「Loading Time」を利用するには
このツールは Chrome / Edge / Firefox版の拡張機能「Tampermonkey」上で動作します。 以下に、このツールの導入手順を簡単に説明します。
❶「Tampermonkey」を導入します
◎ 使用しているブラウザに拡張機能「Tampermonkey」を導入する事が必要です。
既に「Tampermonkey」を導入している場合は、この手順 ❶ は不要です。
拡張機能の導入については、以下のページに簡単な説明があるので参照ください。
❷「Tampermonkey」にスクリプトを登録します
◎「Tampermonkey」の「+」マークの「新規スクリプト」タブを開きます。
◎「新規スクリプト」には、最初からテンプレートが記入されています。 これは全て削除して、完全に空白の編集枠に 下のコードをコピー&ペーストします。
〔コピー方法〕 軽量シンプルなツール「PreBox Button 」を使うと
コード枠内を「Ctrl+左Click」➔「Copy code 」を「左Click」
の操作で、掲載コードのコピーが可能になります。
◎ 最後に「ファイル」メニューの「保存」を押すと、ツールが使用可能になります。
〔 Loading Time 〕 ver. 0.1
// ==UserScript== // @name Loading Time // @namespace http://tampermonkey.net/ // @version 0.1 // @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'; // コメントした記事 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 retry=0; let interval=setInterval(wait_target, 100); function wait_target(){ retry++; if(retry>80){ // 8sec まで観測 clearInterval(interval); alert('8secを超えたので計測を中止しました'); } let target=document.querySelector(E4); // 調査対象のセレクタを指定 if(target){ clearInterval(interval); console.log(retry*100 + 'msec'); }}
「Loading Time」最新版について
旧いバージョンの JavaScriptツールは、アメーバのページ構成の変更で動作しない場合があり、導入する場合は最新バージョンをお勧めします。
●「Loading Time」の最新バージョンへのリンクは、以下のページのリンクリストから探せます。