2

Je suis en train d'ajouter le support sqlite à une extension Google Chrome pour stocker des données historiques.Détermination de l'utilisation de la mémoire de base de données HTML5

Lors de la création de la base de données, il est nécessaire de définir la taille maximale (je 5MB, comme l'a suggéré dans de nombreux exemples)

Je voudrais savoir combien de mémoire je suis vraiment à l'aide (par exemple après ajouter 1000 enregistrements), pour avoir une idée de quand la limite de 5 Mo sera atteinte, et agir en conséquence.

La console Chrome ne révèle pas ces chiffres. Merci.

Répondre

2

Vous pouvez calculer ces chiffres si vous voulez. Fondamentalement, la limite par défaut pour localStorage et webStorage est de 5 Mo où le nom et les valeurs sont enregistrés comme UTF16 donc c'est vraiment la moitié de ce qui est de 2,5 Mo en termes de caractères stockés. Dans webStorage, vous pouvez augmenter cela en ajoutant "unlimited_storage" dans le manifeste.

Même chose s'applique dans WebStorage, mais vous devez parcourir toutes les tables et déterminer le nombre de caractères par ligne.

En localStorage Vous pouvez tester que en faisant un script de la population:

var row = 0; 
localStorage.clear(); 
var populator = function() { 
    localStorage[row] = ''; 
    var x = ''; 
    for (var i = 0; i < (1024 * 100); i++) { 
    x += 'A'; 
    } 
    localStorage[row] = x; 
    row++; 
    console.log('Populating row: ' + row); 
    populator(); 
} 
populator(); 

ci-dessus doivent tomber en panne dans la ligne 25 pour ne pas assez d'espace autour de ce qui en fait 2.5MB. Vous pouvez faire l'inverse et compter combien de caractères par rangée et cela détermine combien d'espace vous avez.

Une autre façon de faire ceci est toujours d'ajouter une "charge utile" et de vérifier l'exception si elle existe, si c'est le cas, alors vous connaissez votre manque de place.

try { 
    localStorage['foo'] = 'SOME_DATA'; 
} catch (e) { 
    console.log('LIMIT REACHED! Do something else'); 
} 

Internet Explorer a fait quelque chose appelé "remainingSpace", mais cela ne fonctionne pas dans Chrome/Safari: http://msdn.microsoft.com/en-us/library/cc197016(v=VS.85).aspx

+0

@nice réponse. Merci pour le partage. – Dave

0

Je voudrais ajouter une suggestion.

S'il s'agit d'une extension Chrome, pourquoi ne pas utiliser le stockage Web SQL ou la base de données indexée?

http://html5doctor.com/introducing-web-sql-databases/

http://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/

Source: http://caniuse.com/

+0

Oui, j'utilise SQL Web (je l'ai écrit "sqlite", je pensais que ce était le même) Je pense que Mohamed a écrit principalement sur le stockage local car ils ont les mêmes limites et il était plus facile de faire l'exemple. – Omiod

+0

Oui, il était plus facile de faire l'exemple :) Chrome utilise SQLite comme stockage de base de données pour WebStorage et LocalStorage. Mais ils s'appliquent tous les deux ont les mêmes implications. –

+0

@UVL. Web SQL est différent de SQLite. Un navigateur spécifique ou peut utiliser SQLite comme WebSQL, localStorage et IndexedDB. Mais c'est une question de mise en œuvre, et les deux sont des choses différentes. C'est pourquoi je vous ai suggéré d'utiliser la version de l'API (comme je pensais que vous utilisiez une implémentation autonome). – Dave

Questions connexes