Prévia do material em texto
Aplicativos Mobile Multiplataforma Tema 07 – Armazenamento Local Bloco 1 César Torres Fernandes Tecnologias para Aplicações Web Introdução Neste tema, você verá formas de armazenamento de dados que podem ser utilizados em seus projetos. Várias APIs de armazenamento estão disponíveis para aplicações de Cordova. Cada API oferece vantagens e desvantagens, e você deve escolher a que melhor se adapta às suas necessidades ou também pode usar várias abordagens diferentes dentro de uma única aplicação para diferentes fins. Armazenamento local (LocalStorage) O armazenamento local fornece armazenamento simples, um par síncrono chave/valor, e é suportado pelas implementações WebView de todas as plataformas Cordova. O armazenamento local pode ser acessado por meio do window.localStorage. Armazenamento local Vantagens • Suportado por todas as plataformas de Cordova. • Sua API simples e síncrona significa que é fácil de usar. Desvantagens • Só armazena strings, estruturas de dados mais complexas têm que ser serializadas, e apenas os dados que podem ser serializados podem ser armazenados. [...] Armazenamento local • Executa mal com grandes quantidades de dados. Em particular: • A falta de meios indexadores para pesquisas requerem iteração manual de todos os dados. • O armazenamento de itens grandes ou complexos é lenta por causa da necessidade de serializar / de- serialize. • API síncrona significa chamadas que travarão a interface do usuário. • Total de armazenamento limitado (normalmente, em torno de 5 MB). • Dados armazenados em determinados locais podem ser limpos pelo sistema operacional quando o espaço é necessário. WebSQL WebSQL fornece uma API para armazenar dados em um banco de dados estruturado, que pode ser consultado usando uma sintaxe SQL padrão (especificamente, SQLite). Como tal, ele fornece todo o poder (e complexidade) do SQL. É apoiado pelo WebView nas seguintes plataformas Cordova: • Android. • BlackBerry 10. • iOS. WebSQL Para criar ou abrir um banco de dados, utilizamos o método window.openDatabase(): var db = window.openDatabase ( nome, versão, nome_amigável, tamanhoEstimado ); Em que: nome (string). version (string). nome_amigável (string). tamanhoEstimado (número). WebSQL Trabalhando com versões de banco de dados. • Ao abrir um banco de dados existente, se a versão especificada não coincide com a versão do banco de dados, uma exceção será lançada e o banco de dados não será aberto. • No entanto, se você especificar uma cadeia vazia para a versão, o banco de dados será aberto independentemente de sua versão atual (pode consultar a versão atual via db.version). • Cautela - se o banco de dados está sendo criado, ele será desenvolvido com sua versão definida como uma cadeia vazia. WebSQL Vantagens • Bom desempenho - os dados podem ser indexados para fornecer pesquisas rápidas e a API assíncrona significa que não se deve trancar a interface do usuário. • Robustez de usar um modelo de banco de dados transacional. • Suporte para controle de versão. WebSQL Desvantagens • Não é suportado por todas as plataformas de Cordova. • Mais complexo do que trabalhar com LocalStorage ou IndexedDB. • A API está obsoleta. • Impõe uma estrutura rígida que deve ser definida previamente. • Total de armazenamento limitado (normalmente, em torno de 5 MB). Aplicativos Mobile Multiplataforma Tema 07 – Armazenamento Local Bloco 2 César Torres Fernandes Tecnologias para Aplicações Web IndexedDB O objetivo da API IndexedDB é combinar os pontos fortes das APIs LocalStorage e WebSQL, evitando, ao mesmo tempo, seus pontos fracos. IndexedDB permite armazenar objetos arbitrários JavaScript, indexados com uma chave. Ele fornece alguns dos benefícios de tabelas SQL, sem restringir a estrutura ou a necessidade de defini-lo previamente. IndexedDB fornece um modelo de dados simples e fácil de entender, muito parecido com LocalStorage. Mas, ao contrário do LocalStorage, você pode criar vários bancos de dados, com várias tabelas por cada um deste. Quanto à busca indexada e API assíncrona, estas fornecem benefícios de desempenho. IndexedDB IndexedDB é suportado pelo WebView nas seguintes plataformas Cordova: • BlackBerry 10. • Windows (com algumas limitações). • Android (4.4 e superior). IndexedDB Limitações do Windows: • Suporte à plataforma Windows para IndexedDB está incompleta. Por exemplo, ela não tem as seguintes características: • Não é disponível para trabalhadores da web. • Não suporta matriz de caminhos-chave. • Não suporta matriz de chaves. • Não suporta pesquisa de objeto por meio de índice composto. IndexedDB Vantagens • Bom desempenho - API assíncrona não bloqueará a interface do usuário, e a indexação fornece bom desempenho de pesquisa. • Modelo de dados simples e mais fácil de aprender do que SQL. • Estrutura mais flexível do que WebSQL. • Vários bancos de dados e armazenamentos de objetos fornecem mais estrutura do que o LocalStorage. • Robustez ao usar um modelo de banco de dados transacional. • Suporte para controle de versão. IndexedDB Desvantagens • Não suportado no iOS. • API complexa com retornos de chamada aninhadas. • Total de armazenamento limitado (normalmente, em torno de 5 MB). Opções Baseadas em Plug-in FileSystem API A API FileSystem é uma especificação do W3C que foi implementada pelo Chrome, mas não por outros navegadores. Ele fornece APIs para armazenar e recuperar dados no sistema de arquivos local. Embora a API não seja suportada nativamente por qualquer plataforma de Cordova, o plug-in fornece uma implementação extensa que está disponível em todas as plataformas Cordova. Opções Baseadas em Plugin O plug-in SQLite fornece uma API praticamente idêntica ao WebSQL. As principais diferenças são: • Ele está disponível com suporte para a plataforma Windows. • Ele efetivamente não tem limitações de tamanho. Encontra-se disponível nas seguintes variações: • cordova-sqlite-storage - versão do núcleo que inclui sua própria implementação sqlite3. Ele suporta iOS, Android e as plataformas do Windows. • cordova-sqlite-ext - versão estendida com recursos adicionais, incluindo suporte REGEXP no Android e iOS. • cordova-sqlite-evfree - semelhante ao cordova-sqlite- ext, mas com melhor processamento da memória. Disponível sob a GPL v3 ou licença comercial.