HTML5 introdujo muchas APIs de almacenamiento que te permiten almacenar una gran cantidad de datos localmente en la memoria navegadores. Pero la cantidad de espacio asignada a cada aplicación se limita, de forma predeterminada, a unos pocos megabytes. Google Chrome te permite solicitar una cuota de almacenamiento mayor, que supera el límite anterior de solo 5 MB.
En este documento, se presentan los conceptos básicos sobre los tipos de almacenamiento que se usan en Chrome y se describe la API experimental de Quota Management, que permite administrar la cuota de almacenamiento. El en este documento, se supone que ya conoces los conceptos generales del almacenamiento cómo usar APIs sin conexión.
Contenido
Tipos de almacenamiento
En Google Chrome, puedes solicitar tres tipos de almacenamiento:
Estos tipos de almacenamiento se describen con más detalle en las siguientes secciones y se comparan con cada otros en la tabla que aparece a continuación.
Almacenamiento temporal
El almacenamiento temporal es un almacenamiento transitorio que está disponible para cualquier app web. Chrome te ofrece automáticamente el almacenamiento temporal de tu app, por lo que no necesitas solicitar asignación.
Comparte el grupo
El almacenamiento temporal se comparte entre todas las aplicaciones web que se ejecutan en el navegador.
El grupo compartido puede ser hasta 1/3 del espacio disponible en el disco. El almacenamiento que ya usan las aplicaciones es
se incluye en el cálculo del grupo compartido es decir, el cálculo se basa en
(available storage space + storage being used by apps) * .333
Cada app puede tener hasta el 20% del grupo compartido. Por ejemplo, si el espacio total disponible en el disco es 60 GB, el grupo compartido es de 20 GB y la app puede tener hasta 4 GB. Esto se calcula desde un 20% (hasta un 4 GB) de 1/3 (hasta 20 GB) del espacio disponible en el disco (60 GB).
Solicitar más espacio
Si bien puedes consultar la cantidad de espacio de almacenamiento disponible para tu app de datos ya almacenados para tu aplicación, no puedes solicitar más espacio de almacenamiento temporal. Si se muestra una app supera la cuota asignada, se genera un error.
Quedarse sin espacio de almacenamiento
Cuando se supera la cuota de almacenamiento para todo el grupo, se almacenan por lo menos se borra el host utilizado recientemente. Sin embargo, el navegador no eliminará definitivamente los datos de LocalStorage ni SessionStorage. En el caso de los datos almacenados en otras APIs sin conexión, el navegador borra los datos completos y no en parte para que los datos de las apps no se dañen de forma inesperada.
Como cada app tiene un límite máximo del 20% del almacenamiento, es probable que la eliminación solo ocurra si el usuario está ejecutando activamente más de cinco aplicaciones sin conexión que están utilizando el almacenamiento máximo.
Sin embargo, el espacio de almacenamiento disponible puede reducirse a medida que los usuarios agregan más archivos a sus discos duros. Cuando espacio en el disco disponible se queda sin espacio (recuerda que el grupo compartido solo obtiene la mitad del espacio actual disponible espacio en el disco), el navegador borra todos los datos almacenados del host menos utilizado.
Almacenamiento persistente
El almacenamiento persistente es aquel que permanece en el navegador, a menos que el usuario lo elimine definitivamente. Está disponible solo para apps que usen la API de File System, pero que con el tiempo estarán disponibles para otras API sin conexión como IndexedDB y Application Cache.
Una aplicación puede tener una cuota mayor de almacenamiento persistente que de almacenamiento temporal, pero debes solicitar almacenamiento con la API de Quota Management, y el usuario debe otorgarte permiso para usar más espacio. Chrome presenta una barra de información que le solicita al usuario que le otorgue más espacio de almacenamiento local a la app.
Almacenamiento ilimitado
El almacenamiento ilimitado es similar al almacenamiento persistente, pero solo está disponible para las apps de Chrome y
extensiones (archivos .crx). El tamaño del almacenamiento ilimitado está limitado solo por la disponibilidad de espacio.
en el disco duro del usuario. Puedes solicitar el permiso unlimitedStorage
en el archivo de manifiesto para
una aplicación o una extensión Durante la instalación, se informa al usuario de los permisos requeridos por
la aplicación o extensión. Si continúas con la instalación, el usuario otorga implícitamente permiso para
Todas las páginas cuyas URL se indican en el archivo manifest.json
Para obtener más información, consulta las guías para desarrolladores correspondientes a las aplicaciones y las extensiones.
Comparación de tipos de almacenamiento
En la siguiente tabla, se describen las diferencias entre los tres tipos de almacenamiento.
Almacenamiento temporal | Almacenamiento persistente | Almacenamiento ilimitado | |
---|---|---|---|
Descripción básica | Almacenamiento transitorio que está disponible para cualquier app web. Es automática y no es necesario solicitarla. | Almacenamiento permanente que se debe solicitar a través de la API de Quota Management y que los usuarios deben otorgar. | Almacenamiento permanente para extensiones y apps de Chrome Se establece en el archivo de manifiesto y los usuarios deben otorgarlo. |
Disponibilidad | Todas las apps web. | Todas las apps web. | Son exclusivas de las extensiones de Chrome y de las aplicaciones web alojadas e instaladas. |
Permiso | Ninguno Puedes usarlo sin solicitarlo de forma explícita. | Debes solicitar más almacenamiento con la API de Quota Management. | Puedes solicitar el permiso unlimitedStorage en el archivo de manifiesto de la app o la extensión. |
Experiencia del usuario en el primer uso | Invisible para el usuario La app simplemente se ejecuta. | Chrome muestra una barra de información que le indica al usuario que acepte o rechace la solicitud de almacenamiento. Sin embargo, si la cantidad de cuota que solicitas es en realidad menor que la asignación actual de la app, no se muestra ningún mensaje. Se conserva la cuota mayor. | Durante la instalación, se informa al usuario sobre los permisos que requiere la app o extensión. Si continúas con la instalación, el usuario otorgará permiso de forma implícita para todas las páginas cuyas URLs se encuentren en el archivo manifest.json para app o extension. |
Experiencia del usuario en solicitudes posteriores de aumento de almacenamiento | No aplicable. No puedes solicitar más almacenamiento temporal. | Chrome vuelve a preguntar al usuario.
| Chrome no le pide al usuario que realice la instalación, independientemente de si la app o extensión solicita un aumento de cuota. |
Persistencia de datos | Transitorio. El navegador puede borrar los datos. | Permanente. El navegador no borra los datos, a menos que el usuario lo indique. Los datos están disponibles en accesos posteriores. No des por sentado que los datos son permanentes, ya que el usuario puede borrarlos. | Igual que el almacenamiento persistente.
|
Espacio de almacenamiento predeterminado | Hasta el 20% del grupo compartido. | 0 MB. Debes solicitar explícitamente un espacio de almacenamiento específico. | 0 MB. Debes solicitar Si no especificas los requisitos de almacenamiento, Chrome asignará almacenamiento a la app desde el grupo compartido de almacenamiento temporal. |
Espacio máximo de almacenamiento | Hasta el 20% del grupo compartido. | Tan grande como el espacio disponible en el disco duro. No tiene un grupo fijo de almacenamiento. | Tan grande como el espacio disponible en el disco duro. |
Caso práctico recomendado | Almacenamiento en caché. | Aplicaciones que funcionan sin conexión o que tienen una gran cantidad de recursos | Aplicaciones diseñadas para ejecutarse en Google Chrome. |
las APIs que pueden usarlo | APIs sin conexión
Nota: Las APIs de almacenamiento web, como LocalStorage y SessionStorage, permanecen fijas en 5 MB. | API de File System | APIs sin conexión
Nota: Las APIs de almacenamiento web, como LocalStorage y SessionStorage, permanecen fijas en 5 MB. |
Administra tu cuota
Con la API de Quota Management, que se introdujo en Chrome 13, puedes hacer lo siguiente:
- Consulta el uso y la disponibilidad del almacenamiento
- Solicitar más almacenamiento
- Cómo restablecer la cuota para realizar pruebas
La API se implementa con el objeto global window.webkitStorageInfo
.
Para obtener la documentación de referencia, consulta la siguiente sección.
Consulta sobre el uso y la disponibilidad del almacenamiento
Para consultar el tamaño de almacenamiento en uso y el espacio disponible para el host, llama a
queryUsageAndQuota()
por lo siguiente:
- Tipo de almacenamiento que quieres comprobar
- Devolución de llamada exitosa
Es posible que el uso informado por la API no coincida con el tamaño real de los datos del usuario, ya que cada almacenamiento puede necesitar bytes adicionales para almacenar los metadatos. Además, las actualizaciones de estado pueden retrasarse, lo que genera La API no refleja el estado de almacenamiento más reciente.
En el siguiente fragmento de código, se muestra cómo puedes preguntar sobre el espacio de almacenamiento:
// Request storage usage and capacity left
// Choose either Temporary or Persistent
navigator.webkitTemporaryStorage.queryUsageAndQuota (
function(usedBytes, grantedBytes) {
console.log('we are using ', usedBytes, ' of ', grantedBytes, 'bytes');
},
function(e) { console.log('Error', e); }
);
Si quieres solicitar el estado del almacenamiento persistente, simplemente reemplaza
webkitStorageInfo.TEMPORARY
con webkitStorageInfo.PERSISTENT
. La enum también está
window
(espacio de nombres global), por lo que también puedes usar window.PERSISTENT
y
window.TEMPORARY
Solicitando más almacenamiento
No necesitas solicitar más almacenamiento temporal, ya que la asignación es automática superar el límite máximo (como se describe en la tabla).
En el caso del almacenamiento continuo para la API de File System, la cuota predeterminada es 0, por lo que debes
solicitar almacenamiento para tu aplicación. Llama a requestQuota()
con lo siguiente:
- Tipo de almacenamiento
- Tamaño
- Devolución de llamada exitosa
Según lo que solicites, ocurrirá lo siguiente:
- Si solicitas una cuota mayor, el navegador mostrará una barra de información al usuario y le solicitará que lo haga. otorgar o rechazar el permiso para aumentar la cuota. En algunos casos, es posible que la solicitud se realice se rechaza y se devuelve la cuota actual o la menor.
- Si la cantidad de cuota que solicitas es menor que la asignación actual de la app, no se muestra ningún mensaje.
- Si solicitas más almacenamiento del que se permite, recibirás un mensaje de error (
QUOTA_EXCEEDED_ERR
). - Si vuelves a llamar a
requestQuota()
después de que el usuario ya haya otorgado el permiso, no sucederá nada. Así que no te molestes en volver a llamar al método.
A continuación, se muestra cómo solicitar más espacio de almacenamiento:
// Request Quota (only for File System API)
var requestedBytes = 1024*1024*10; // 10MB
navigator.webkitPersistentStorage.requestQuota (
requestedBytes, function(grantedBytes) {
window.requestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler);
}, function(e) { console.log('Error', e); }
);
});
Cómo restablecer la cuota para realizar pruebas
Cuando pruebes el almacenamiento de tu app, te recomendamos borrar los datos almacenados probar la administración de la cuota de nuevo en tu app. Para ello, sigue estos pasos:
- Ingresa
chrome://settings/cookies
en el cuadro multifunción (la barra de direcciones). - Busca tu app.
- Selecciona tu app.
- Haz clic en la X del lado derecho de la selección destacada.
Referencia de la API
En esta sección, se documentan los métodos de la API de Quota Management.
Constantes
Las siguientes son constantes webkitStorageInfo
, que indican el tipo de almacenamiento.
Constante | Valor | Descripción |
---|---|---|
TEMPORARY | 0 | Almacenamiento temporal. |
PERSISTENT | 1 | Almacenamiento persistente |
Descripción general del método
queryUsageAndQuota |
requestQuota |
Métodos
queryUsageAndQuota
Comprueba el tamaño de almacenamiento en uso y el espacio disponible para el host.
// you could also use it from webkitPersistentStorage
navigator.webkitTemporaryStorage.queryUsageAndQuota(
successCallback,
errorCallback);
successCallback
: Es la devolución de llamada opcional con dos parámetros:- La cantidad actual de bytes que usa la app.
- La cantidad de bytes que quedan en la cuota.
errorCallback
: Es la devolución de llamada de error opcional.
requestQuota
Solicita más almacenamiento. El navegador presenta una barra de información para solicitar al usuario que otorgue o rechace a la aplicación el permiso para tener más almacenamiento.
// you could also use it from webkitTemporaryStorage
navigator.webkitPersistentStorage.requestQuota (
newQuotaInBytes,
quotaCallback,
errorCallback);
Parámetros
newQuotaInBytes
: Es la cantidad de bytes que deseas incluir en tu cuota de almacenamiento.successCallback
: Es la devolución de llamada opcional que pasa la cantidad de bytes otorgados.errorCallback
: Es la devolución de llamada de error opcional.
Desarrollo futuro
El plan es colocar todas las API de almacenamiento sin conexión HTML5, incluidas IndexedDB, Application Cache, File y otras APIs que se puedan especificar, en la columna Quota API de Cloud Management. Con él, podrás administrar toda la asignación de almacenamiento.