Cómo administrar el almacenamiento sin conexión en HTML5

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

  1. Tipos de almacenamiento
    1. Temporal
    2. persistentes
    3. Ilimitada
    4. Cómo comparar los tipos de almacenamiento
  2. Administra tu cuota
    1. Consulta el uso y la disponibilidad del almacenamiento
    2. Solicitar más almacenamiento
    3. Cómo restablecer la cuota para realizar pruebas
  3. Referencia de la API
    1. Constantes
    2. Descripción general del método
    3. Métodos
  4. Desarrollo futuro

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 temporalAlmacenamiento persistenteAlmacenamiento 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.
PermisoNinguno 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 usoInvisible 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 almacenamientoNo 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 unlimitedStorage de forma explícita en el archivo de manifiesto.

Si no especificas los requisitos de almacenamiento, Chrome asignará almacenamiento a la app desde el grupo compartido de almacenamiento temporal.

Espacio máximo de almacenamientoHasta 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 recomendadoAlmacenamiento en caché.Aplicaciones que funcionan sin conexión o que tienen una gran cantidad de recursosAplicaciones diseñadas para ejecutarse en Google Chrome.
las APIs que pueden usarlo

APIs sin conexión

  • Caché de la app
  • Sistema de archivos
  • IndexedDB
  • WebSQL (obsoleto desde el 18 de noviembre de 2010)

Nota: Las APIs de almacenamiento web, como LocalStorage y SessionStorage, permanecen fijas en 5 MB.

API de File System

APIs sin conexión

  • Caché de la app
  • Sistema de archivos
  • IndexedDB
  • WebSQL (obsoleto)

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:

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:

  1. Ingresa chrome://settings/cookies en el cuadro multifunción (la barra de direcciones).
  2. Busca tu app.
  3. Selecciona tu app.
  4. 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.

ConstanteValorDescripción
TEMPORARY0Almacenamiento temporal.
PERSISTENT1Almacenamiento 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.