2012-06-11 4 views

Antwort

7

Chrome hat eine 5-MB-Grenze, bevor es auf QUOTA_ERR trifft. Here's a MDN reference zu dieser Tatsache.

Die spec erwähnt eine QuotaExceededError aber scheint nicht zu sagen, wann es geworfen werden sollte.

QuotaExceededError Der Vorgang ist fehlgeschlagen, da nicht genügend verbleibenden Speicherplatz war, oder das Speicherkontingent erreicht wurde und der Benutzer sank mehr Platz in der Datenbank zu geben.

Ich habe nicht von einer harten Grenze gehört und nicht eine in meiner eigenen Entwicklung erreicht. Die Performance sollte ziemlich weit nach Süden gehen, bevor Sie es erreichen.

+4

Diese Informationen sind sehr veraltet. Es gibt keine 5-MB-Grenze für IndexedDB in Chrome. – dgrogan

+0

Das stimmt teilweise. Für die meisten Chrome-Browser gibt es eine Begrenzung von 50 MB, für mobile Chrome-Versionen eine Beschränkung von 5 MB. – buley

+7

Was hältst du davon? Soweit ich weiß, ist keines dieser Dinge wahr. (Ich habe den Chrome IndexedDB Kontingent-Erzwingungscode geschrieben.) Ich habe gerade mit http://demo.agektmr.com/storage/ auf meinem Handy herumgespielt, um sicherzustellen, dass es immer noch funktioniert und ich keine 5mb-Grenze sehen konnte. – dgrogan

30

Die Faustregel ist 6% (edit 2015-Jul: war 10%) des verfügbaren Speicherplatzes auf der Festplatte des Benutzers, weniger wenn Ihr Ursprung websql, appcache oder das Dateisystem api verwendet. Das MDN-Dokument mit der Erwähnung von 5 MB war veraltet und wurde aktualisiert. Die blutigen Details über die aktuelle Politik sind hier: https://developer.chrome.com/apps/offline_storage

Hinweis einige lästige Feinheiten:

  1. Es gibt keine persistenten Speicher für IndexedDB, nur das Material in den oberen Link über TEMPORARY gilt.
  2. Sobald Ihre Herkunft seinen Anteil des Pools erschöpft, indexeddb Transaktionen werden nicht hilfreich abbrechen mit keinen wirklichen Hinweis warum. Bis jetzt ist der einzige Weg, um zu bestimmen, dass das Fehlen der Quote die Ursache ist, queryUsageAndQuota zu verwenden, um zu überprüfen, wie viel Platz noch übrig ist. Hoffentlich füllt eine zukünftige Version von Chrome in diesen Fällen bald IDBTransaction.error korrekt aus. Edit: chrome 26 füllt IDBTransaction.error jetzt korrekt mit QuotaExceededError aus.
  3. Es gibt derzeit keine API, um mehr Speicherplatz für indexeddb anzufordern.
+1

Sorry, ich bin ein wenig verwirrt. Wenn Sie eine 3-TB-Festplatte haben, können Sie mit 10% der Festplatte des Benutzers eine IndexedDB mit 300 GB erstellen? Und danach würde es einen Fehler werfen? – benshope

+0

Das stimmt. Ehrliche Frage: Was ist die andere Interpretation, die Sie in Betracht gezogen haben? – dgrogan

+1

Keine andere Theorie, die mir einfach wie viel Platz für einen Browser erschien. Danke: D – benshope

0

Die minimale oder weiche Grenze ist 5MB- der Browser um Erlaubnis bitten, die Daten zu speichern. Der maximale Speicherplatz ist die Grenze Ihrer Festplatte, da alle Daten lokal auf Ihrer Festplatte gespeichert sind. Wenn Sie über 20 GB freien Speicherplatz verfügen, können Sie den gesamten Speicher für IndexedDB verwenden.

+1

die Nachricht beantwortet die Frage und ihr Recht. Recherchiere zuerst und nachdem du meine Nachricht als unbrauchbar stellen kannst. – stefan

+0

Überprüfen Sie den Beitrag https://developer.mozilla.org/en-US/docs/IndexedDB – stefan

+5

Die Frage ist über Chrom. Ihre Antwort ist über Firefox. – dgrogan

12

prüfen Quote mit folgenden Code in Chrom> dev Tools (F12)> console

// Request storage usage and capacity left 
window.webkitStorageInfo.queryUsageAndQuota(webkitStorageInfo.TEMPORARY, 
//the type can be either TEMPORARY or PERSISTENT 
function(used, remaining) { 
    console.log("Used quota: " + used + ", remaining quota: " + remaining); 
}, function(e) { 
    console.log('Error', e); 
}); 
+2

* Warnung: 'window.webkitStorageInfo' ist veraltet. Bitte verwenden Sie stattdessen 'navigator.webkitTemporaryStorage' oder' navigator.webkitPersistentStorage'. * – cregox

+1

Siehe http://stackoverflow.com/a/29662958/2441511 für den aktuellen Standard, Stand April 2015 – user2441511

4

IndexedDB wird Speicher aus dem Abschnitt "Vorübergehende Lagerung in Google Chrome gegeben. Der temporäre Speicher in Chrome verfügt standardmäßig über ein Kontingent von 50% des verfügbaren Speicherplatzes, von denen 20% für Ihre Offline-App verfügbar sind. Wenn Sie mehr Kontingente für den temporären Speicher anfordern, wird nichts unternommen.

Basierend auf der oben, Antworten auf Ihre Fragen wären:

  1. IndexedDB (auf Chrome-Browser) Speicher verwenden kann, ohne sie zu beantragen.(Wissen, dass es aus dem temporären Speicher zugewiesen wird)
  2. Wenn mehr als das TEMPORARY-Speicherlimit (20% von 50% verfügbar, wie oben beschrieben) angefordert wird, wird nichts zugewiesen.

könnten Sie verwenden das Browser Storage Abuser Werkzeug (zitiert in this HTML5Rocks Artikeln, die Ergebnisse für verschiedenen Browser dokumentiert) verfügbar temporäre Speicher auf dem Chrome zu bestimmen, die ausgeführt werden.

Ich habe nicht genug SO-Reputation, um mehr Links zu posten, aber der obige HTML5Rocks-Artikel zu Quotenforschung hat genug Details, um Ihnen zu helfen, den passenden Speichertyp (TEMPORARY oder PERSISTENT) und den geeigneten Speichermechanismus zu identifizieren notwendigerweise auf IndexedDB), wie es für Ihre Anwendung geeignet ist.