javascript - validacion - ¿Cuál es el límite de almacenamiento para un trabajador de servicio?
validar formulario javascript html5 (5)
En el navegador más reciente, puede usar StorageManager que es una implementación de un nuevo estándar para el almacenamiento del navegador, eche un vistazo a este artículo de 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
*/
La mayoría de los navegadores proporcionan almacenamiento local con un límite de almacenamiento de 5 MB por dominio. ¿Existen tales límites / limitaciones de memoria con respecto a los trabajadores del servicio?
Sé que los trabajadores web (en los que se basan los trabajadores de servicios) no tienen tales limitaciones. Pero los Web Workers no se usan exactamente para el almacenamiento en caché de activos, sino que se usan más para el procesamiento (por lo que la CPU es la principal preocupación allí).
Si no hay límite en el tamaño de la memoria, ¿podría un sitio web mal diseñado bloquear el navegador?
Más información sobre
navigator.storage.estimate()
y
navigator.webkitTemporaryStorage.queryUsageAndQuota()
está aquí
https://developers.google.com/web/updates/2017/08/estimating-available-storage-space
La página de prueba está aquí https://thimbleprojects.org/startpolymer/361372/
No estoy 100% seguro, pero creo que está completamente limitado por lo que está disponible en la máquina del cliente. Como en, no hay un límite superior fijo
Si alguien ejecutaba una bestia de una máquina y el navegador era la única aplicación activa, lo más probable es que tenga mucho espacio de almacenamiento disponible
Sin embargo, si se tratara de una vieja máquina limitada que apenas funciona; tendrías muy poco
Depende completamente de lo que intentes hacer realmente. Realmente solo deberías usar trabajadores de servicio para almacenar cosas vitales para que tu página / aplicación funcione
No hay límite explícito. Todos los navegadores modernos son multiproceso o similares, por lo que una página (o SW) mal diseñada no hará nada peor que bloquearse.
Tenga en cuenta que la especificación de SW es muy explícita acerca de que el navegador puede matar y reiniciar el SW en cualquier momento, por cualquier motivo. (Si DevTools está abierto en una página, Chrome deliberadamente mata los SW de la página constantemente, para alentarlo a adoptar buenas prácticas).
Actualización 15 de enero de 2018
La interfaz StorageManager de Storage API se está convirtiendo en un estándar para todas las consultas de API relacionadas con el almacenamiento. Como mencionó @miguel-lattuada , la API de estimación proporcionaría una estimación del almacenamiento utilizado en una aplicación web y el almacenamiento disponible. Además, tenga en cuenta la excepción QuotaExceededError que nos ayudaría a manejar escenarios de error.
por ejemplo, código:
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.'');
}
Para obtener más información, consulte los siguientes 2 excelentes artículos:
- Documentos web de MDN: API de almacenamiento
- Desarrolladores de Google: estimación del espacio de almacenamiento disponible
16 de marzo de 2017 (manteniéndolo solo como referencia / historial)
Recientemente me encontré con este artículo: offline-cookbook que dice lo siguiente:
Su origen tiene una cierta cantidad de espacio libre para hacer lo que quiera. Ese espacio libre se comparte entre todo el almacenamiento de origen : LocalStorage, IndexedDB, Filesystem y, por supuesto, Caches.
La cantidad que obtiene no está especificada , diferirá según el dispositivo y las condiciones de almacenamiento. Puede averiguar cuánto tiene a través de:
navigator.storageQuota.queryInfo("temporary").then(function(info) {
console.log(info.quota);
// Result: <quota in bytes>
console.log(info.usage);
// Result: <used data in bytes>
});
El código anterior podría no funcionar en todos los navegadores . (por ejemplo: en Chrome <48 uno podría tener que buscar webkitPersistentStorage, etc.)
Otra información útil / recursos
-
Según Almacenamiento fuera de línea para aplicaciones web progresivas por Addy Osmani
En
Chrome and Opera
: su almacenamiento es por origen (en lugar de por API). Ambos mecanismos de almacenamiento almacenarán datos hasta que se alcance la cuota del navegador. Las aplicaciones pueden verificar cuánta cuota están usando con la API de administración de cuotas (como se describe anteriormente).Firefox
no tiene límites, pero aparecerá después de 50 MB de datos almacenadosMobile Safari
50 MB máximoDesktop Safari
ilimitado (avisos después de 5MB)IE10+
maxes a 250MB y avisos a 10MB -
Una guía más detallada sobre Trabajar con cuota en navegadores móviles por Eiji Kitamura.
Por ahora, estos son los artículos / soluciones más relevantes encontrados para mi problema. Si alguien conoce algún artículo o especificaciones mejores, por favor comparta.