私のアプリケーションは、リクエスト数が限られているAPIを使用して、別のサーバーからデータを受信します。データが変更されることはめったにありませんが、ページを更新した後でも必要になる場合があります。
- CookieまたはHTML5WebStorageを使用して、この問題の最善の解決策は何ですか?
- そして、このタスクを解決する他の方法があるかもしれませんか?
私のアプリケーションは、リクエスト数が限られているAPIを使用して、別のサーバーからデータを受信します。データが変更されることはめったにありませんが、ページを更新した後でも必要になる場合があります。
クロスブラウザの互換性が重要でcookie
ある限り、Webストレージではなく唯一の選択肢です。
しかし、質問は実際にキャッシュしているデータの種類によって異なりますか?
あなたが試していることについては、クッキーとウェブストレージはまったく必要ないかもしれません。
むしろ、ページ全体を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
私は同じ問題を解決するためにこの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'})
これは、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];
}
}