A fundação Mozilla lançou o localForage, uma nova biblioteca JavaScript que promete simplificar o processo de armazenamento de dados offline em aplicações web.
Embora não seja uma tecnologia recente nos navegadores, o suporte offline sempre foi muito fragmentado devido à várias opções disponíveis. O que torna esta biblioteca única é o fato que ela tenta combinar o melhor dos mundos: as funcionalidades de algumas das mais recentes tecnologias (assincronismo e suporte ao blob) com uma simples API. Isto oferece uma poderosa capacidade para aplicações web offline, tornando-os mais próximo de seus colegas móveis nativos e mais intuitivos para os desenvolvedores trabalharem.
Uma das primeiras alternativas disponíveis foi olocalStorage que provê acesso simples a dados para armazenamento offline. Entretanto testes de benchmark mostraram que ele é lento, síncrono e não pode manipular blobs binários (por exemplo, cachê de arquivos mp3 não é possível). Desde então, duas outras opções populares surgiram - IndexedDB e Web SQL - que são assíncronos, velozes e suportam grandes conjuntos de dados. A desvantagem destas duas tecnologias é o fato de suas APIs não serem muito simples de usar e também não serem suportados pela maioria dos navegadores.
O recente lançamento do localForage tenta resolver esses problemas unificando tecnologias - assincronismo e suporte a blob a partir do IndexedDB e Web SQL com a sintaxe simples do localStorage:
var settings = {color: 'black', font: 'Helvetica'}; localForage.setItem('settings', settings, function(result) { console.log(result); });
A inclusão do suporte ao IndexedDB e Web SQL permite armazenar mais dados para aplicações web que o localStorage sozinho poderia armazenar. A natureza sem bloqueios da API torna as aplicações web mais rápidas pelo fato de não ter que manipular a thread principal e suas chamadas get/set. Adicionalmente, o localForage suporta callbacks e ES6 Promises deixando a escolha da melhor implementação para o desenvolvedor.
A biblioteca carrega e gerencia automaticamente os drivers para o IndexedDB, Web SQL e localStorage, assim não é necessário gerenciar isto manualmente (o melhor driver é escolhido independente do navegador em que a aplicação está sendo executada). Quando nem o IndexedDB nem o Web SQL estão disponíveis, localForage volta para o localStorage, assim pelo menos os dados básicos podem ser armazenados offline (embora sem suporte a blob e muito mais lento).
Todos navegadores modernos são suportados pelo localForage. O armazenamento assíncrono está disponível em todos navegadores, com a versão que suporta o localStorage em parenteses:
- Navegador Android 2.1
- BlackBerry 7
- Chrome 23 (Chrome 4.0 com localStorage)
- Chrome para o Android 32
- Firefox 10 (Firefox 3.5 com localStorage)
- Firefox para Android 25
- IE 10 (IE 8 com localStorage)
- IE Mobile 10
- Opera 15 (Opera 10.5 com localStorage)
- Opera Mobile 11
- PhoneGap/Apache Cordova 1.2.0
- Safari 3.1