LoginSignup
23
25

More than 5 years have passed since last update.

ブラウザのストレージを使ってみる

Last updated at Posted at 2014-08-10

HTML5 WebStorageを使うと、Key-Valueペアで、ブラウザ(ローカル環境)にデータが保存できる。

Cookie vs WebStorage

WebStorageは、sessionStorage・localStorageの2種類ある。

別ウィンドウでのデータ共有 データの有効期限
クッキー 指定期限まで有効
sessionStorage × ウィンドウやタブを閉じるまで有効
localStorage 永続的に有効

各ストレージのデータ量上限は、ブラウザによって異なる。
下記に詳しく解説されている。

実装

localStorageを用いて実装してみた。
cacheHandler.jsでキャッシュを扱う処理を用意。
main.jsで、キャッシュにデータがなければ、取得し、キャッシュに保存する。

cacheHandler.js
/**
 * コンストラクタです。
 * @constructor
 */
function CacheHandler() {
}

/**
 * HTML5 localStorage からキーに対応するデータを取得します。
 * @param storageKey キー
 * @returns {*} JSON
 */
CacheHandler.prototype.getCache = function (storageKey) {
    return angular.fromJson(sessionStorage.getItem(storageKey));
};

/**
 * HTML5 localStorage にデータを格納します。
 * @param storageKey キー
 * @param data JSON
 */
CacheHandler.prototype.setCache = function (storageKey, data) {
    sessionStorage.setItem(storageKey, angular.toJson(data));
};

/**
 * HTML5 localStorage のデータを削除します。
 * @param storageKey キー
 */
CacheHandler.prototype.removeCache = function (storageKey) {
    sessionStorage.removeItem(storageKey);
};
main.js
// ページ読み込み時に実行したい処理
$().ready(function () {
    var key = "dataKey";
    var cacheHandler = new CacheHandler();

    // キャッシュからデータを取得する
    var data = cacheHandler.getCache(key);

    // キャッシュがあればそれを返す
    if (!data) {
        // データを取得する処理
        data = <どこかから取得したデータ>;
        // キャッシュに格納する
        cacheHandler.setCache(key, data);
    }

    return data;
});

これだけの実装だとキャッシュが最新状態かどうか判断できないので、
キャッシュ元データが最新版か確認し、そうでなければ再び取得などの処理が必要。
また、キャッシュの削除処理もどこかに組み込みたい。

23
25
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
25