14

私のアプリケーションは、リクエスト数が限られているAPIを使用して、別のサーバーからデータを受信します。データが変更されることはめったにありませんが、ページを更新した後でも必要になる場合があります。

  1. CookieまたはHTML5WebStorageを使用して、この問題の最善の解決策は何ですか?
  2. そして、このタスクを解決する他の方法があるかもしれませんか?
4

3 に答える 3

11

クロスブラウザの互換性が重要でcookieある限り、Webストレージではなく唯一の選択肢です。

しかし、質問は実際にキャッシュしているデータの種類によって異なりますか?

あなたが試していることについては、クッキーとウェブストレージはまったく必要ないかもしれません。

  • Cookieは、実際のデータ自体ではなく、構成関連の情報を保存するために使用されます。
  • Webストレージは、Cookieと同様に永続的なデータストレージをサポートしますが、容量が大幅に拡張され、HTTPリクエストヘッダーに情報が保存されません。[1]

むしろ、ページ全体をCookieまたはWebストレージの両方としてキャッシュするのはばかげていると思います。これらの目的には、サーバー側のキャッシュオプションがより良い方法かもしれません。

アップデート:

引用:

一部のソーシャルネットワーク(fb、vk、google +)でのユーザーアクティビティに関するデータ

mordernizrなどのライブラリを使用してWebストレージ機能を検出し、存在しない場合はcookieメソッドにフォールバックします。簡単な例

if (Modernizr.localstorage) {
    // browser supports local storage
    // Use this method
} else {
    // browser doesn't support local storage
    // Use Cookie Method
}

[1]: http: //en.wikipedia.org/wiki/Web_storage

于 2012-10-07T15:43:02.030 に答える
5

私は同じ問題を解決するためにこのlibを書きました:

cacheJSを使用してJavascriptでデータをキャッシュします

ここにいくつかの基本的な使用法があります

// just add new cache using array as key
cacheJS.set({blogId:1,type:'view'},'<h1>Blog 1</h1>');
cacheJS.set({blogId:1,type:'json'}, jsonData);

// remove cache using key
cacheJS.removeByKey({blogId:1,type:'json'});


// add cache with ttl and contextual key
cacheJS.set({blogId:2,type:'view'},'<h1>Blog 2</h1>', 3600, {author:'hoangnd'});

cacheJS.set({blogId:3,type:'view'},'<h1>Blog 3</h1>', 3600, {author:'hoangnd'});


// remove cache with con textual key
// cache for blog 2 and 3 will be removed
cacheJS.removeByContext({author:'hoangnd'})

于 2015-01-15T07:51:00.567 に答える
-1

これは、JQueryAJAXからのデータのキャッシュの例です。したがって、データがまだないときにのみ電話をかけたい場合は、非常に簡単です。これを行うだけです(例)。ここでは、最初にロード情報(行、場所、出荷日が入力されている)があるかどうかを確認し、ない場合にのみ、AJAX呼び出しを行って、そのデータをキャッシュに入れます。

var dict = [];

function checkCachedLoadLine(line, location, shipDate, callback) {
    var ret = 0;
    if(!((line+location+shipDate) in dict)) {
        productionLineService.getProductionLoadLine(line, location, shipDate, callback);
    }
    return dict[line+location+shipDate];
}

...次に、コールバックで値をキャッシュに書き込みます

function callback(data) {
    if (!data) {
        document.getElementById('htmlid').innerHTML = 'N/A';
    } else {
        document.getElementById('htmlid').innerHTML = data[0];
        dict[data[2]+data[3]+data[4]] = data[0];
    }
}
于 2020-05-16T16:49:29.480 に答える