Was ist das Speicherlimit für einen Servicemitarbeiter?

76

Die meisten Browser bieten localStorage mit einem Speicherlimit von 5 MB pro Domain. Gibt es solche Speicherbeschränkungen / -beschränkungen in Bezug auf Servicemitarbeiter?

Ich weiß, dass Web-Worker (auf denen Service-Worker basieren) keine solchen Einschränkungen haben. Web Worker werden jedoch nicht genau für das Zwischenspeichern von Assets verwendet, sondern eher für die Verarbeitung (daher ist die CPU dort das Hauptanliegen).

Wenn die Speichergröße unbegrenzt ist, kann eine schlecht gestaltete Website den Browser zum Absturz bringen?

Nachiketha
quelle
Mögliches Duplikat von Maximum Running Web Worker HTML5 gleichzeitig
www.eugenehp.tk
Hoffen wir also nur, dass alle Websites, die Servicemitarbeiter implementieren, den Cache nicht überbeanspruchen? Dieses Problem tritt bei Web-Workern nicht auf, da sie nicht für das Zwischenspeichern von Assets vorgesehen sind.
Nachiketha
1
Ich würde sagen, es ist eine Begrenzung der Sandbox, die die Menge an Speicher und CPU + IO-Ressourcen angibt, die für jede Seite zu der Zeit verfügbar sind. Und die Arbeiter würden diese Ressourcen im gesamten Sandkasten teilen.
www.eugenehp.tk
1
Der Speicherplatz ist für verschiedene Browser unterschiedlich, folgt jedoch höchstwahrscheinlich einigen allgemeinen Regeln wie hier: developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/…
magiccrafter
1
Ich habe vor ein paar Wochen einen Blog-Beitrag darüber geschrieben. Diese Frage wird mir die ganze Zeit FWIW gestellt. love2dev.com/blog/… Die Antwort ist, dass es unterschiedlich ist, aber mehr oder weniger davon abhängt, wie viel freier Speicherplatz das Gerät hat. Die Cache-API-Spezifikation enthält nichts, um das Kontingent zu steuern. Und jetzt weisen die meisten Browser alle Speicher-APIs pro Ursprung zu.
Chris Love

Antworten:

77

Update 15. Januar 2018

Die StorageManager- Schnittstelle der Speicher-API wird zum Standard für alle speicherbezogenen API-Abfragen. Wie von @ miguel-lattuada erwähnt , würde die Schätz- API eine Schätzung des in einer Web-App verwendeten Speichers des verfügbaren Speichers liefern. Beachten Sie auch die QuotaExceededError- Ausnahme, die uns bei der Behandlung von Fehlerszenarien helfen würde.

zB Code:

if ('storage' in navigator && 'estimate' in navigator.storage) {
  navigator.storage.estimate().then(({usage, quota}) => {
    console.log(`Using ${usage} out of ${quota} bytes.`);
  }).catch(error => {
    console.error('Loading storage estimate failed:');
    console.log(error.stack);
  });
} else {
  console.error('navigator.storage.estimate API unavailable.');
}

Weitere Informationen finden Sie in den folgenden 2 großartigen Artikeln:


16. März 2017 (nur als Referenz / Geschichte aufbewahren)

Kürzlich bin ich auf diesen Artikel gestoßen : Offline-Kochbuch, das wie folgt lautet:

Ihre Herkunft hat eine gewisse Menge an freiem Speicherplatz , um das zu tun, was sie will. Dieser freie Speicherplatz wird von allen Ursprungsspeichern gemeinsam genutzt : LocalStorage, IndexedDB, Filesystem und natürlich Caches.

Die Menge, die Sie erhalten, ist nicht spezifiziert , sie hängt von den Geräte- und Speicherbedingungen ab. Sie können herausfinden, wie viel Sie haben über:

navigator.storageQuota.queryInfo("temporary").then(function(info) {
   console.log(info.quota);
   // Result: <quota in bytes>
   console.log(info.usage);
   // Result: <used data in bytes>
});

Der obige Code funktioniert möglicherweise nicht in allen Browsern . (Zum Beispiel: In Chrome <48 muss möglicherweise nach webkitPersistentStorage usw. gesucht werden.)

Andere nützliche Informationen / Ressourcen

  1. Wie pro Offline - Speicher für Progressive Web Apps von Addy Osmani

    In Chrome and Opera: Ihr Speicher ist pro Ursprung (und nicht pro API). Beide Speichermechanismen speichern Daten, bis das Browser-Kontingent erreicht ist. Apps können mit der Kontingentverwaltungs-API (wie oben beschrieben) überprüfen, wie viel Kontingent sie verwenden.

    Firefox Keine Einschränkungen, wird aber nach 50 MB gespeicherten Daten angezeigt

    Mobile Safari 50 MB max

    Desktop Safari unbegrenzt (Eingabeaufforderungen nach 5 MB)

    IE10+ Maximalwerte bei 250 MB und Eingabeaufforderungen bei 10 MB

  2. Eine ausführlichere Anleitung zum Arbeiten mit Kontingenten in mobilen Browsern von Eiji Kitamura.

Im Moment sind dies die relevantesten Artikel / Lösungen für mein Problem. Wenn jemand einen besseren Artikel oder eine bessere Spezifikation kennt, teilen Sie diese bitte mit.

Nachiketha
quelle
2
Die gemeinsame Nutzung von Speicherplatz zwischen APIs ist möglicherweise nur in Chrome und Opera möglich. Schauen Sie sich den Abschnitt mit den allgemeinen Fragen in Addy Osmanis
David Scales
1
@ DavidScales danke für den Hinweis. Ich habe gerade die Antwort mit Artikelreferenzen aktualisiert.
Nachiketha
1
NB storageQuota ist nur für Chrome v55 + und Opera 42+ implementiert (was im Grunde genommen sowieso Chrome ist)
icc97
@ icc97 Richtig. Die Kontingentverwaltungs-API befindet sich noch im Entwurfsstatus. Mit Link aktualisiert. Danke
Nachiketha
8

Es gibt keine explizite Grenze. Alle modernen Browser sind Multiprozess- oder ähnliche Browser, sodass eine schlecht gestaltete Seite (oder SW) nichts Schlimmeres bewirkt als den Absturz selbst.

Beachten Sie, dass in der SW-Spezifikation sehr explizit angegeben ist, dass der Browser die SW jederzeit und aus jedem Grund beenden und neu starten kann. (Wenn DevTools auf einer Seite geöffnet ist, beendet Chrome absichtlich ständig SWs für die Seite, um Sie zu ermutigen, bewährte Methoden anzuwenden.)

Xanthir
quelle
9
Ich glaube, @Nachiketha shu spricht von Speicherplatz, nicht von flüchtiger Speichernutzung.
Marco Castelluccio
1

Im neuesten Browser können Sie StorageManager verwenden , eine Implementierung eines neuen Standards für die Browserspeicherung. Schauen Sie sich diesen Mozilla-Artikel an.

let _storageStats = await navigator.storage.estimate();
console.log(_storageStats);
/*
  Will prompt something like this
  {quota: 15946471833, usage: 682}
  Which is a representation of quota/usage in bytes
  As you can see I get an insane quota of almost 16 GB
*/

Miguel Lattuada
quelle
0

Ich bin nicht 100% sicher, aber ich denke, Sie sind vollständig durch die Verfügbarkeit auf dem Client-Computer eingeschränkt. Wie in gibt es keine feste Obergrenze

Wenn jemand eine Bestie eines Computers ausführt und der Browser die einzige aktive Anwendung ist, steht Ihnen höchstwahrscheinlich ausreichend Speicherplatz zur Verfügung

Wenn es sich jedoch um eine alte, limitierte Maschine handelt, die kaum tuckert; du hättest sehr wenig

Es hängt ganz davon ab, was Sie wirklich versuchen. Sie sollten eigentlich nur Servicemitarbeiter verwenden, um Dinge zu speichern, die für die Arbeit Ihrer Seite / Anwendung wichtig sind

Ryuu
quelle