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?
javascript
service-worker
progressive-web-apps
Nachiketha
quelle
quelle
Antworten:
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
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 angezeigtMobile Safari
50 MB maxDesktop Safari
unbegrenzt (Eingabeaufforderungen nach 5 MB)IE10+
Maximalwerte bei 250 MB und Eingabeaufforderungen bei 10 MBEine 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.
quelle
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.)
quelle
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 */
quelle
Weitere Informationen zu
navigator.storage.estimate()
und finden Sienavigator.webkitTemporaryStorage.queryUsageAndQuota()
hier https://developers.google.com/web/updates/2017/08/estimating-available-storage-spaceDie Testseite finden Sie hier https://thimbleprojects.org/startpolymer/361372/
quelle
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
quelle