HTML5: Dilemas de armazenamento

HTML5: Dilemas de armazenamento

Durante os últimos dias me deparei com alguns dilemas interessantes relacionado a novas tecnologias e disponibilidade de dados.

Inicialmente me vi de frente a velha questão nativo x web app, analisando recursos disponíveis e meu projeto, optei pelo web app levando em consideração que usaria conhecimentos que já possuo.

Depois de decidir pelo web aap percebi que não iria ter acesso a tecnologias de armazenamento de backend, então como armazenaria meus dados? Atualmente existem várias formas de se armazenar dados offline, mas quais suas vantagens desvantagens e limitações?

Após algumas pesquisas pela web percebi que não era o primeiro e nem o único a passar por estas situações, pelo contrário percebi que essa era uma situação um pouco que comum atualmente.

Encontrei alguns artigos e páginas que me ajudaram muito (deixarei os links no final do post). Cheguei a quatro tecnologias: filesystem, Web Storage, IndexedDB e Web SQL. Procurei conhecer, testar as tecnologias e verificar o suporte dos principais browsers a cada uma:

  • Web Storage (LocalStorage e sessionStorage): Amplamente difundida entre browsers mobiles e desktop browsers e muito fácil de se usar uma vez que só usa o conceito chave/valor. Como desvantagem possui armazenamento limitado a 5 MB (recomendado pela especificação da W3C) e só armazenar dado na forma de chave/valor. Porém tem a vantagem de não ser necessário a autorização do usuário para o armazenamento.
  • Web SQL: usa linguagem SQL, uso muito simples uma vez que você já possua conhecimento prévio de SQL, capacidade de armazenamento de dados é limitada em 5 MB por padrão, mas nada impede que você faça uso de um tamanho maior desde que o usuário aprove previamente. Uma parte chata é que esta tecnologia foi descontinuada pela W3C e não é suportada nem pelo Firefox nem pelo Internet Explorer.
  • IndexedDB: Por ser uma especificação recente da W3C ainda não é suportada por todos os browsers. Usa conceitos do NoSQL. Quanto ao armazenamento, o Firefox permite até 50 MB, o Chrome permite 5 MB, porém  ambos podem ser estendidos de acordo com a necessidade e previa autorização do usuário.
  • FileSystem: Ótima para se trabalhar com dados binários e grandes dados (armazenamento ilimitado) e armazena dados no cliente de forma semelhante a de se trabalhar com linguagens backend. O acesso a escrita é supervisionada pela sandbox do navegador. Faz parte da API mais recente do javascript, logo não está disponível em muitos browsers (quase nenhum, ainda).

Curiosidade: Como todos os browsers atualmente usam o SQLite para implementar o Web SQL, a W3C fez acabou descontinuando o projeto e incentivando o IndexedDB. Espero que alguém proponha outra forma de se implementar o Web SQL e está tecnologia não morra.

Conhecendo e analisando minhas opções e minhas especificações para o projeto estou em dpúvida entre usar o Web SQL, o IndexedDB, ou o Web SQL com fallback no IndexedDB para suportar mais browsers.

Espero que tenham gostado do artigo. Abaixo seguem alguns links a respeito das tecnologias e alguns artigos que encontrei.

Voltar