less

きづかないくらいイージーなクオリティー

Archive

8月
26th
permalink

処理した結果をプールするライブラリ「pool.js」を作りました

JSを書いている時によくあるキャッシュ処理を楽にします。

  • 一度目の結果をキャッシュして二度目以降はその値を返す

    sync = function() {
        var md5 = Pool('md5', function() {
            return MD5('一度だけ実行');
        });
        alert(md5);
    };
    sync();
    sync(); // キャッシュした値が返る
    
  • Ajaxの結果をキャッシュして二度目からはリクエストしない

    async = function() {
        Pool('req',
            function(f) { $.get('./', f); },
            function(data) {
                $('body').append(data);
            }
        );
    };
    async();
    // リクエスト後...
    async(); // キャッシュした値が返る(この時は非同期ではなくなる)
    
  • クッキー、sessionStorage、localStorageにキャッシュ内容を保存してリロード後もキャッシュを継続(sessionStorage、localStorageは対応ブラウザのみ。ストレージは使わずPool関数の挙動をする)

    storage = function() {
        var date = Pool.sessionStorage('storage', function() {
            return new Date().toUTCString();
        });
        console.log(date);
    };
    storage();
    // リロード...
    storage(); // キャッシュした値が返る
    

また、初回時にしか処理しない内容をフラグを立てずに書くことも出来ます。クロージャにしたかったりまとめて書きたい時に使えるかも。

foo = function() {
    Pool('init', function() {
        $('#foo').click(function() {
            console.log('click');
        });
    });
    // ...
};

ドキュメントがまだないのですが、テストは書いたので参考になると思います:) テストはひとまず

  • Safari 4
  • Firefox 3.5
  • Chrome 2
  • Opera 10 Beta 3
  • IE 6〜8

で通ってますがまだほとんど使ってないので安定してないかも。これから実際に使ってテストを充実させたいと思います。

ライブラリ作るとすごく勉強になって楽しい。参考にさせてもらったJSDeferredとid:cho45も改めてすごいなぁ。