APIから取得したデータを表示するウェブページにおいて、ページの読み込みを早くするためのJavaScriptプログラムの組み方を紹介します。
スポンサーリンク
遅いプログラム(Before)
遅いプログラムを三段階に分けてみます。
APIで読み込んだデータを変数に入れる
document.create
で要素を生成する生成した要素にDOMを追加する
これを表示するデータの数だけループ処理で表示していました。
プログラムは、以下のようになります。
for (i = 1; i < 151; i++) {
// データを変数に入れる
let pokeName = data['name']
// HTMLを生成する
let div = document.createElement('div');
let p = document.createElement('p');
p.innerHTML = pokeName;
div.appendChild(p);
// 生成した要素を、#wrapperに追加する
document.getElementById('wrapper').appendChild(div);
}
DOM操作の回数を減らす
このプログラムのボトルネックは「DOM操作の回数が多いこと」です。
appendChild()
メソッドが実行されると、描画のための計算が自動的に行われます。
ループ回数が増えるほど計算量も増えます。
これがボトルネックです。
次に、改良したプログラムをご紹介します。
改良したプログラム(After)
DOM操作の回数を減らすことが、読み込み速度の向上につながるので、HTMLを文字列として変数に保存し、最後に一度だけDOM操作を行うように変更しました。
改良したプログラムは大きく3つに分けました。
データの作成
HTMLの作成
表示
以下はサンプルコードです。
// 変数を定義
let pokemonArray = [];
let pokemon = {
id: "",
name: "",
};
// データの作成
for (let i = 0; i < 151; i++) {
// データをオブジェクトに追加
pokemon.id = data['id'];
pokemon.name = data['name'];
// 1モンスター毎に配列に追加
pokemonArray[i] = pokemon;
// オブジェクトを初期化
pokemon = {};
}
// HTMLタグの作成
let html = "";
for (let i = 0; i < pokemonArray.length; i++) {
html +=
"<div>" +
"<span>" + pokemonArray[i].id + "</span>" +
"<span>" + pokemonArray[i].name + "</span>" +
"</div>"
;
}
// 表示
const div = document.querySelector('#app');
div.innerHTML = html;
まとめ
JavaScriptを使ったwebページの読み込み速度を向上させるには、DOM操作の回数を減らすことが重要です。
文字列としてHTMLを作り、最後に一度だけDOM操作を行うことで早く表示できます。
スポンサーリンク