イントロダクション
前回、ページタイトルと(正規化された)URLのペアを生成する JavaScript コードへ、自動選択機能追加を追加してみました。JavaScript:ページタイトルとURLを一か所に表示する(2) - 自動選択機能追加 - URLはcanonicalから取得します
http://upa-pc.blogspot.com/2015/03/javascript-page-title-and-canonical-url-2.html
今回は、そのコードに対して、以下の改良を行いました。
今回の改良点
ページタイトルと(正規化された)URLのペアの生成処理の実行を遅延
前回までのコードは、ページの読み込み時にページタイトルと(正規化された)URLのペアの生成処理を実施します。それほど重い処理ではないと思いますが、ページ読み込み時の処理負荷軽減と、処理負荷の分散のために、生成処理の遅延実行処理を実装しました。
任意のミリ秒数遅延して、生成を実行します。
出力先の div 要素が存在しない場合には、処理を実行せずに終了する
前回までのコードは、ページタイトルと(正規化された)URLのペアの生成結果の出力先が無い場合には、エラー終了するコードになっていました。通常、出力先の div 要素と、生成処理コードはペアで使用するため問題は無いとは思いますが、任意のページでのみ出力先の div 要素を用意し、コードを共通的に読み込むケースでは都合が悪いため、そのようなケースにも対応できるようにしました。
ページタイトルとURLを一か所に表示する:自動選択機能追加
前提
遅延実行
遅延実行のため、処理全体を setTimeout を使用して、指定したミリ秒後実行するようにしています。setTimeout の第2引数に、どのくらい遅延させるのかミリ秒で指定します。
デフォルトは、5 * 1000 ミリ秒(5秒)としました。
なお、遅延実行されるまでは、「ページとURLのペアを生成中...」という文字が、ページタイトルと(正規化された)URLのペアの代わりに表示されています。
エラー処理
出力先の div 要素が存在しない場合には、可能な限り何の処理も実行したくないため、コードの先頭付近にて、出力先の div 要素が存在チェックを実施しています。ソースコード
<div id="page_title_url_pair_box"> ページとURLのペアを生成中... </div> <script type="text/javascript"> <!-- setTimeout(function () { /* link タグの ref = canonical に指定された、href を取得します 戻り値: link タグの ref = canonical に指定された、href 見つからなかった場合、null */ function getCanonicalUrl() { var links = document.getElementsByTagName("link"); for (var i = 0; i < links.length; i++) { if (links[i].rel) { if (links[i].rel.toLowerCase() == "canonical") { return links[i].href; } } } return null; } var box = document.getElementById("page_title_url_pair_box"); if (box) { // 元データ取得 var page_title = document.title; var canonical_url = getCanonicalUrl(); // 出力データ作成 var output_data = document.createElement("textarea"); output_data.setAttribute("rows", "2"); output_data.setAttribute("style", "width:100%;"); if (canonical_url) { output_data.appendChild(document.createTextNode(page_title + "\r\n" + canonical_url)); // この領域がクリックされたら、全選択状態にする output_data.onclick = function () { output_data.select(); } } else { output_data.appendChild(document.createTextNode("error : 正規化されたURLが見つかりませんでした。" + "\r\n" + "ページタイトルとURLのペアの生成は行えませんでした。")); } // 画面へ出力 box.innerHTML = ""; box.appendChild(output_data); } }, 5 * 1000); //--> </script>
実行結果
ページとURLのペアを生成中...
まとめ
このように、ページタイトルと(正規化された)URLのペアを生成処理を、遅延して実行することで負荷を分散できるようになりました。また、エラー時の処理を追加したことで、出力先の div 要素と、スクリプトコードを分離することが出来るようになりました。
このスクリプトを、Webサイトやブログへ設置することで、閲覧者の利便性を向上することが出来るはずです。
コメントを投稿
コメント投稿機能について