イントロダクション
Google のブログサービス「Blogger」にて、サムネイル付きの新着情報の一覧を任意の件数表示できる「新着情報ガジェット」を作成していくことにしました。前回:
Blogger:JavaScript:新着情報を表示するガジェットを作成(3)-css用のクラス名を追加
http://upa-pc.blogspot.com/2015/03/blogger-new-post-list-gadget-javascript-3.html
今回は、ブログ読み込み時の負荷を減らすための、遅延実行の仕組みを実装します。
新着情報を表示するガジェットを作成(4)-遅延実行機能を追加
新着情報の一覧は、ブログにとってメインになるコンテンツではないでしょう。
そのため、新着情報一覧がファーストビューに現れるようなブログでない限り、ある程度ページの読み込みから遅延させて、新着情報の一覧を作成した方が、ユーザが快適に操作できるようになります。
そこで、タイマにより任意の時間、処理を遅延させることにします。
遅延実行機能を追加した、記事タイトル(記事へのリンク付き)のみの一覧(css用のクラス名付き)を作成する、新着情報ガジェットの HTML/JavaScript コードは次のようになります。
コード:
<div id="new-post-list-container">
新着読み込み中...
</div>
<script type="text/javascript">
<!--
setTimeout(function () {
// --- Util ---
// JavaScript動的挿入
function addScript(src) {
var script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", src);
header_setChild(script);
}
// <head>取得
function getHeader() {
return document.getElementsByTagName("head")[0];
}
// <head>に子要素を追加
function header_setChild(child) {
var head = getHeader();
head.appendChild(child);
}
// --- Main ---
// *** 設定可能なパラメータ ここから ***
var max_results = 5; // 新着記事を表示する件数
// 上限は 500 件です
// *** 設定可能なパラメータ ここまで ***
// 記事一覧作成のトリガー
loadFeed();
// Feed の読み込み
function loadFeed() {
var blogger_url = location.protocol + "//" + location.host;
addScript(blogger_url +
"/feeds/posts/summary?alt=json-in-script&callback=newpost_loader&max-results=" + max_results +
"&start-index=1&redirect=false");
}
}, 2000); // 遅延実行(ミリ秒)
function newpost_loader(data) {
// エントリーがある場合は、新着記事一覧の生成開始
if (data.feed.entry) {
if (data.feed.entry.length > 0) {
createNewPostsList(data);
}
}
// 新着記事一覧生成
function createNewPostsList(data) {
var obj_newPostList = document.createElement("div");
obj_newPostList.setAttribute("class", "new-post-list-items");
for (var i = 0; i < data.feed.entry.length; i++) {
// リンク先の探索
var href = "javascript:void(0);";
for (var j = 0; j < data.feed.entry[i].link.length; j++) {
if (data.feed.entry[i].link[j].rel == "alternate") {
href = data.feed.entry[i].link[j].href;
}
}
// 全体の要素作成
var obj_item = document.createElement("div");
obj_item.setAttribute("class", "new-post-list-item");
// 全体のリンク要素
var obj_link = document.createElement("a");
obj_link.setAttribute("href", href);
obj_link.setAttribute("class", "new-post-list-item-link");
obj_item.appendChild(obj_link);
// 記事タイトル用要素作成
var obj_title = document.createElement("div");
obj_title.appendChild(document.createTextNode(data.feed.entry[i].title.$t));
obj_title.setAttribute("class", "new-post-list-item-title");
obj_link.appendChild(obj_title);
// 項目を連結
obj_newPostList.appendChild(obj_item);
}
// 画面上へ反映
var obj_output = document.getElementById("new-post-list-container");
obj_output.innerHTML = "";
obj_output.appendChild(obj_newPostList);
}
}
//-->
</script>
実行結果:
解説
処理の開始部分を、setTimeout(function () {
...
}, 2000); // 遅延実行
で囲むことによって、遅延実行を実施しています。
setTimeout 関数は、第1引数の関数を、第2引数の指定時間(ミリ秒)後に実行する関数です。
そのため、デフォルトでは、2秒後に、新着情報の Feed の取得処理が実施され、新着情報一覧が作成されます。
設置方法
(1) Blogger の設定のレイアウトにて、「ガジェットを追加」を行います。(2) 追加するガジェットとして「HTML/JavaScript」ガジェットを選択します。
(3) タイトルに「新着情報」などと入力します。
(4) コンテンツに、上記の HTML/JavaScript コードを張り付けます。
(5) 「保存」をクリックします。
(6) プレビューを行い、期待通りの動作になっているか確認します。
(7) 新着情報ガジェットを配置したい位置へ移動した後、「配置を保存」をクリックします。
オプション設定
表示件数の変更
プログラム中の max_results の値を変更します。例)10 件分の新着情報を表示する場合:
var max_results = 10; // 新着記事を表示する件数
遅延実行時間
先頭の setTimeout 関数にしている、ミリ秒数を変更します。例) 5000ミリ秒(5秒) 後に、処理を開始する場合:
setTimeout(function () {
...
}, 5000); // 遅延実行
まとめ
今回は、前回作成した「記事タイトル(記事へのリンク付き)のみの一覧(css用のクラス名付き)を作成する、新着情報ガジェット」に対して、遅延実行機能を追加しました。次回は、いよいよサムネイル画像を表示できるように、機能の追加を行います。
次回:
Blogger:JavaScript:新着情報を表示するガジェットを作成(5)-サムネイル画像を追加http://upa-pc.blogspot.com/2015/03/blogger-new-post-list-gadget-javascript-5.html
コメントを投稿
コメント投稿機能について