A importância do off-line first

Vamos imaginar um cenário em que você baixou algum aplicativo ou jogo mobile enquanto estava utilizando sua Internet ultra-rápida, tudo funciona perfeitamente. No dia seguinte você se encontra em um túnel ou em uma viagem longa de avião e então tenta acessar o jogo para passar o tempo ou consultar um dado que já havia sido consultado antes no aplicativo e para sua decepção o jogo nem consegue realizar o login offline, e o aplicativo fica "preso" em uma tela branca por algum tempo antes de aparecer uma mensagem de erro. Isso acontece porque boa parte das aplicações dependem de conexão à internet para funcionar.
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.
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 nos tempos atuais, mas ainda existem aplicações que não armazenam absolutamente nenhum dado em cache.
Em sua apresentação no Breaking Development, em Nashville (EUA), John Allsopp falou sobre o conceito de Offline First: usar tecnologias offline para melhorar a forma como experienciamos produtos web.
Segundo Allsopp, chegou a hora de pararmos de desenhar sites com aquela visão de “desktop” na cabeça — onde o usuário tem sempre boa e constante conexão disponível para navegar. Quando utilizadas corretamente, as tecnologias “offline” aumentam a performance do site, minimiza a necessidade de cookies, requisições http e uploads de arquivos.
Alguns conceitos relacionados ao Off-line First:
Web Storage: formas mais sofisticadas de manter informações no navegador, que ficam disponíveis durante aquela única sessão. Ao invés de ter que buscar a informação no banco de dados (percorrendo todo o caminho entre servidores), a informação é requisitada para o próprio browser.
App Cache: armazenar arquivos HTML, CSS, JS e imagens para fazer sites e aplicativos funcionarem offline. A ideia é controlar mais de perto o comportamento do Cache para decidir quais arquivos devem ser armazenados e quando.
Abaixo você pode acompanhar uma palestra de 2012 sobre esse conceito:
Dentro da documentação do HTML 5 existe um tópico dedicado exclusivamente para aplicações Web off-line.
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.
E não é somente o Google que está tentando resolver este problema, 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.
Desta forma chegamos a um roteiro para desenvolver o Offline First:
Salvar os dados sempre localmente
Enviar os dados caso esteja ONLINE
Gerar um OpLog caso esteja OFFLINE
Escutar os eventos offline e online para gerenciar a sincronização
Enviar o OpLog para a API
Executar o processo de autenticação do token
Executar o processo de sincronização com o banco
Acho que com isso já da para ter uma noção de como implemenar, certo?
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.



Comentários