cache-js。 キャッシング機能

少し前に、クライアントでサーバーの応答をキャッシュする必要がありました。 ブラウザのキャッシュについて知っている予約をすぐに行いますが、これは私の場合ではありませんでした。 ためらうことなく、データをダウンロードするためのコードを補足し始めたので、サーバーにリクエストを送信する前に、そのようなリクエストで結果がすでにあるかどうかをチェックしました。

わかりやすくするために、例を示します。
function loadData(url, fn) { ajax.get(url, function (err, result) { //      var data = '...'; fn(null, data); }); } 

および後:
 var cache = {}; function loadCacheData(url, fn) { var cacheData = cache[url]; //  if (cacheData) { fn(null, cacheData); } else { ajax.get(url, function (err, result) { //      var data = '...'; //   cache[url] = data; fn(null, data); }); } 


このスタイルでさらにいくつかの関数を書き換えると、私は退屈しました。このメソッドの機能はあまりありません。たとえば、キャッシュをリセットすることはできません。 ちょっとした「グーグル」(おそらくグーグルは悪かった)ですが、簡単な手の動きでキャッシュを既存のコードにねじ込むことができるライブラリは見つかりませんでした。

これにより、loadDataをloadCacheDataに変換する単純なラッパー関数の記述が始まりました。
次のようになります。
 function loadData(url, fn) { ajax.get(url, function (err, result) { //      var data = '...'; fn(null, data); }); } var loadCacheData = cache(loadData); 

この方法で取得した「loadCacheData」関数は、それ自体で結果をキャッシュし、キャッシュを管理する機能を提供する必要があります。

しばらくして、多かれ少なかれ動作するバージョンのキャッシュ機能を実装することが可能になりました。 すべてのソースはgithubで入手できます。

この関数でできること:

1.キャッシュをフラッシュします。
 var loadCacheData = cache(loadData); loadCacheData.clearCache(); 


2.キャッシュの有効期間を設定します。 デフォルトは1年で​​す。
 var loadCacheData = cache({ expire: 10 * 1000 }, loadData); 


3.最大キャッシュサイズ(キャッシュに保存する応答の数)を設定します。 デフォルトは10です。
 var loadCacheData = cache({ max: 10 }, loadData); 


4.キャッシュ保存方法の選択。 デフォルトは「app」です。
app-キャッシュをメモリに保存します。
local-キャッシュをlocalStorageに保存し、サイトのすべてのページ間でアクセスできます。
 var loadCacheData = cache({ storage: 'local' }, loadData); 

「ローカル」をインストールするとき、オプションで「cacheKey」をインストールできます。これは、キャッシュが保存されるlocalStorageのキーの名前です。

5.独自のキャッシュストレージをインストールします。
 var loadCacheData = cache({ storage: new MyCacheStorage() }, loadData); 

この場合、MyCacheStorage()は3つのメソッドを実装する必要があります。
「Get(key、fn);」-メソッドはキーからキャッシュから結果を選択します。
「Set(key、val、fn);」-メソッドは値をキャッシュに設定します。
「Clear(fn);」-メソッドはキャッシュをフラッシュします。
「Fn」は、関数の最初の引数「error」と2番目の「result」(ある場合)を取るコールバック関数です。

「cache-js」を使用すると、1つの制限が課せられます。結果を「キャッシュする」必要がある関数は、「最後のパラメーターはコールバック関数でなければなりません」というルールに従う必要があります。

TODO:


使用例はリポジトリで入手できます。

Source: https://habr.com/ru/post/J140338/


All Articles