2016-02-06 2 views
44

La plupart des navigateurs fournissent à localStorage la limite de stockage de 5 Mo par domaine. Y a-t-il de telles limites/contraintes de mémoire par rapport aux travailleurs du service?Quelle est la limite de stockage pour un technicien de maintenance?

Je sais que les travailleurs Web (sur lesquels les travailleurs de service sont basés) n'ont pas de telles limitations. Mais les Web Workers ne sont pas exactement utilisés pour la mise en cache des assets, mais sont plutôt utilisés pour le traitement (donc le CPU est la principale préoccupation).

Si la taille de la mémoire n'est pas limitée, un site Web mal conçu risque-t-il de bloquer le navigateur?

+0

double possible de [travailleur Web en cours d'exécution maximale html5 en même] (http : //stackoverflow.com/questions/11049797/maximum-running-web-worker-html5-at-the-same) –

+0

Alors, espérons-nous simplement que tous les sites Web qui implémentent des techniciens de maintenance n'utilisent pas trop le cache? Ce problème n'existe pas en ce qui concerne les travailleurs Web car ils ne sont pas destinés à la mise en cache des actifs. – Nachiketha

+1

Je dirais que c'est une limite du bac à sable qui spécifie la quantité de mémoire et de ressources CPU + E/S disponibles pour chaque page à la fois. Et les travailleurs partageraient ces ressources à travers le bac à sable. –

Répondre

52

Mise à jour Jan 15 2018

L'interface StorageManager de l'API de stockage devient un standard pour toutes les requêtes d'api liées au stockage. Comme mentionné par @miguel-lattuada, le estimate API fournirait une estimation de l'espace de stockage utilisé une application Web le stockage disponible. Notez également l'exception QuotaExceededError qui nous aiderait à gérer les scénarios d'erreur.

code par exemple:

if ('storage' in navigator && 'estimate' in navigator.storage) { 
 
    navigator.storage.estimate().then(({usage, quota}) => { 
 
    console.log(`Using ${usage} out of ${quota} bytes.`); 
 
    }); 
 
}

Pour plus d'informations, reportez-vous les 2 grands articles suivants:


16 Mars 2017 (l 'garder juste pour la référence/histoire)

Récemment, je suis tombé sur cet article: offline-cookbook qui se lit comme suit:

Votre origine est donné une certaine quantité de espace libre pour faire ce qu'il veut avec. Cet espace libre est partagé entre tous les systèmes de stockage d'origine: LocalStorage, IndexedDB, Filesystem et, bien sûr, Caches.

Le montant que vous obtenez n'est pas spécifié, il peut varier en fonction des appareils et des conditions de stockage. Vous pouvez savoir combien vous avez via:

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

Le code ci-dessus might not work in all the browsers. (Par exemple: en chrome < 48 on aurait pu chercher webkitPersistentStorage etc)

Autres informations utiles/ressources

  1. Comme par Offline Storage for Progressive Web Apps par Addy Osmani

    En Chrome and Opera: Votre stockage est par origine (plutôt que par API). Les deux mécanismes de stockage stockent les données jusqu'à ce que le quota du navigateur soit atteint. Les applications peuvent vérifier le quota qu'elles utilisent avec l'API Quota Management (comme décrit ci-dessus).

    Firefox pas de limites, mais demandera après les données de 50 Mo stockées

    Mobile Safari 50Mo max

    Desktop Safari illimités (invites après 5MB)

    IE10+ Maxes à 250Mo et invite à 10MB

  2. Un guide plus détaillé sur Working with quota on mobile browsers par Eiji Kitamura.

Pour l'instant, ce sont les articles/solutions les plus pertinents trouvés pour mon problème. Si quelqu'un connaît un meilleur article ou des spécifications s'il vous plaît partager.

+2

Le partage de l'espace de stockage entre les API peut uniquement être vrai dans Chrome et Opera. Consultez la section des questions courantes du poste de Addy Osmani: https://medium.com/dev-channel/offline-storage-for-progressive-web-apps-70d52695513c#.8acehngnq –

+1

@DavidScales merci de souligner. Juste mis à jour la réponse avec des références d'article. – Nachiketha

+1

N.B. [storageQuota] (https://developer.mozilla.org/en-US/docs/Web/API/StorageQuota) est seulement implémenté pour Chrome v55 + et Opera 42+ (qui est fondamentalement de toute façon Chrome) – icc97

1

Je ne suis pas sûr à 100%, mais je pense que vous êtes entièrement limité par ce qui est disponible sur l'ordinateur client. Comme dans, il n'y a pas de limite supérieure

Si quelqu'un courait une bête d'une machine et le navigateur était la seule application active fixe, alors vous avez probablement beaucoup de stockage disponible

Cependant, si elle était une vieille machine limitée qui se traînait à peine; vous auriez très peu

Cela dépend entièrement de ce que vous essayez de faire vraiment. Vous ne devriez vraiment utiliser les techniciens de service pour stocker les éléments essentiels à votre page/application.

9

Il n'y a pas de limite explicite. Tous les navigateurs modernes sont multi-processus ou similaires, donc une page mal conçue (ou SW) ne fera rien de pire que l'accident lui-même. Notez que la spécification SW est très explicite sur le fait que le navigateur puisse tuer et redémarrer le logiciel à tout moment, quelle qu'en soit la raison. (Si DevTools est ouvert sur une page, Chrome tue volontairement SWs pour la page en permanence, pour vous encourager à adopter de bonnes pratiques.)

+8

Je crois @Nachiketha shu parle d'espace de stockage, pas d'utilisation de la mémoire volatile. – Marco

1

Sur le dernier navigateur, vous pouvez utiliser StorageManager qui est une implémentation d'une nouvelle norme pour le stockage du navigateur, jetez un oeil à l'article this mozilla.

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 
 
*/