J'ai rencontré ce problème aujourd'hui lors d'un test (dépassement du quota de stockage) et j'ai trouvé une solution. IMO, savoir quelle est la limite et où nous nous situons par rapport à elle est beaucoup moins utile que de mettre en œuvre un moyen fonctionnel de continuer à stocker au-delà du quota.
Ainsi, plutôt que d'essayer de faire des comparaisons de taille et des contrôles de capacité, réagissons lorsque nous avons atteint le quota, réduisons notre stockage actuel d'un tiers et reprenons le stockage. Si cette réduction échoue, arrêtons de stocker.
set: function( param, val ) {
try{
localStorage.setItem( param, typeof value == 'object' ? JSON.stringify(value) : value )
localStorage.setItem( 'lastStore', new Date().getTime() )
}
catch(e){
if( e.code === 22 ){
// we've hit our local storage limit! lets remove 1/3rd of the entries (hopefully chronologically)
// and try again... If we fail to remove entries, lets silently give up
console.log('Local storage capacity reached.')
var maxLength = localStorage.length
, reduceBy = ~~(maxLength / 3);
for( var i = 0; i < reduceBy; i++ ){
if( localStorage.key(0) ){
localStorage.removeItem( localStorage.key(0) );
}
else break;
}
if( localStorage.length < maxLength ){
console.log('Cache data reduced to fit new entries. (' + maxLength + ' => ' + localStorage.length + ')');
public.set( param, value );
}
else {
console.log('Could not reduce cache size. Removing session cache setting from this instance.');
public.set = function(){}
}
}
}
}
Cette fonction se trouve dans un objet enveloppant, donc public.set s'appelle simplement lui-même. Maintenant, nous pouvons ajouter du stockage sans nous soucier du quota ou de la proximité de celui-ci. Si un seul magasin dépasse un tiers de la taille du quota, cette fonction arrêtera le tri et le stockage, et à ce stade, vous ne devriez pas mettre en cache de toute façon, n'est-ce pas ?
0 votes
En rapport : Quelle est la taille maximale des valeurs de localStorage ?
0 votes
JavaScript / HTML5 localStorage fonctions utiles : stackoverflow.com/q/34245593/4339170
0 votes
Duplicata possible de Comment trouver la taille du LocalStorage