Você está em casa à noite e resolve baixar um jogo no seu smartphone. Depois de algumas horas jogando, é hora de ir dormir porque no dia seguinte você tem um voo para pegar. Logo após a decolagem você resolve passar mais uma fase daquele joguinho que instalou. Ao abrir o aplicativo, você se depara com a necessidade de conexão com a internet para jogar (e muitas vezes até para abrir o jogo).
Isso não é “privilégio” apenas de jogos e acontece com frequência porque boa parte das aplicações dependem da conexão à internet para funcionar (mesmo aquelas que foram baixadas previamente). Muitas vezes isso é desnecessário pois a aplicação que envia pequenos pacotes de dados poderia acumular esses pacotes caso estivesse sem uma conexão disponível no momento.
Foi com esse intuito, de promover a criação de aplicações que funcionem também off-line, que estão surgindo iniciativas para auxiliar o desenvolvimento de apps que sobrevivam quando você estiver em um túnel, no avião ou no meio de uma trilha na floresta. Uma delas é a Off-line first, que defende que sua aplicação deve estar pronta para cenários sem acesso a internet. Essas iniciativas fazem uso de recursos e documentação que já estamos acostumados a acompanhar, mas nem sempre com esse viés de garantir o funcionamento sem internet.
Um dos pontos fundamentais para o funcionamento de aplicações Web rodarem off-line é garantir que seja possível acessa-las em cache. Pode parecer desnecessário e redundante falar isso em pleno 2015, mas ainda existem aplicações que não armazenam dados em cache.
Dentro da documentação do HTML5 existe um tópico dedicado exclusivamente para aplicações Web off-line. Para ilustrar essa documentação, o próprio W3C mostra um exemplo simples de uma aplicação de um relógio, e como adicionar o manifest de forma adequada. O exemplo desse relógio está disponível na página do WHATWG.
Além disso, temos em nosso favor a Web Storage API, que nos possibilita armazenar dados da aplicação no client side.
A preocupação em garantir o funcionamento de aplicações off-line não é está apenas dentro das recomendações do W3C. O Google tem uma área interessante sobre a criação de apps off-line first. O documento começa com algumas dicas fundamentais para a criação do aplicativos:
- Os arquivos do aplicativo – JavaScript, CSS e fontes, além de outros recursos necessários (como imagens) já foram baixados.
- Seu aplicativo pode salvar e sincronizar (de forma opcional) pequenas quantidades de dados.
- Seu aplicativo pode detectar mudanças na conectividade.
Mesmo que essas dicas sejam insuficientes, o Google recomenda seguir algumas regras para isso:
- Use dados locais sempre que possível
- Separe UI (User Interface) dos dados da sua aplicação
- Suponha que seu aplicativo pode ser fechado a qualquer momento.
- Teste seu aplicativo cuidadosamente.
A Mozilla também tem documentação muito interessante sobre a construção de aplicações desconectadas da internet. Lá também estão algumas recomendações para o desenvolvimento de uma boa aplicação off-line. Basicamente a documentação recomenda o seguinte:
-
A aplicação deve detectar o estado “off-line”
Já existem APIs que determinam o status de conexão do usuário, sem a necessidade de HTTP request.
-
Armazenamento de “data and assets” off-line
Garanta que o armazenamento de dados possa ser feito no dispositivo do usuário.
-
Salve os status da aplicação periodicamente
Durante o uso da aplicação, considere salvar periodicamente o status no dispositivo do usuário.
-
Sincronize com o servidor
A aplicação deve enviar periodicamente os dados para o servidor. Quando não conseguir, ela pode fazer o armazenamento no dispositivo do usuário e enviar quando possível. Considere construir uma solução para organizar a fila de pacotes quando a conectividade cair.
Mesmo sabendo que a conectividade vem aumentando e melhorando de forma exponencial, vale a pena planejar o uso da sua aplicação em um cenário sem internet. Em um país com proporções continentais como o Brasil e com um percentual de 84% da população com telefone celular (dados do Cetic.br de 2014), é fundamental que a aplicação não se limite apenas a momentos em que o usuário esteja conectado (claro que isso não é possível em todas as aplicações). A Web móvel é uma realidade e a mobilidade nos deixa sujeitos a oscilações de conectividade. E nossas aplicações devem estar prontas para isso.
Boas referências para estudo:
- HTML5 Recommendation – Offline Application – https://www.w3.org/TR/html5/browsers.html#offline
- Web Storage API – https://www.w3.org/TR/webstorage/
- Google Chrome Apps – Offline First – https://developer.chrome.com/apps/offline_apps
- Mozzila App Center – Working Offline – https://developer.mozilla.org/en-US/Apps/Build/Offline
- Designing Offline-First Web Apps – https://alistapart.com/article/offline-first
- Offline First – https://offlinefirst.org/