O que é o IndexedDB?
O IndexedDB é um padrão da Web em evolução para armazenamento de grandes quantidades de dados estruturados no navegador e para pesquisas de alto desempenho nesses dados usando índices. Em outras palavras, o IndexedDB é um repositório de objetos. Não é o mesmo que um banco de dados relacional, que tem tabelas com linhas e colunas de coleções. Essa é uma diferença importante e fundamental que afeta a forma como você projeta e cria seus aplicativos. Saiba mais sobre os conceitos básicos.
O que há de novo?
Mudanças, meus amigos... algumas mudanças vão gerar erros se não forem tratadas com uma mudança simples na sintaxe.
A partir da versão 17, o Chrome vai gerar um erro se uma transação do IndexedDB não estiver vinculada a um repositório de objetos. Como todas as leituras e gravações de dados são feitas em transações, precisamos criar uma transação em um banco de dados, especificar o escopo (por exemplo, quais lojas de objetos você quer acessar) e determinar o tipo de acesso (somente leitura ou gravação).
O que isso significa no código? Em vez de transmitir uma matriz vazia para a database.transaction:
var transaction = db.transaction([], IDBTransaction.READ_ONLY);
Você precisa definir o escopo para um objeto específico ou uma lista de objetos:
// all stores (equivalent to what use to be marked as empty array. )
var transaction = db.transaction(db.objectStoreNames, IDBTransaction.READ_ONLY);
// multiple stores:
var transaction = db.transaction(['ObjectStoreName1', 'ObjectStoreName2'],
IDBTransaction.READ_ONLY);
// single store - these are equivalent
var transaction = db.transaction(['ObjectStoreName'], IDBTransaction.READ_ONLY);
var transaction = db.transaction('ObjectStoreName', IDBTransaction.READ_ONLY);
É possível acelerar o acesso aos dados usando o escopo e o modo corretos na transação. Confira algumas dicas:
Ao definir o escopo, especifique apenas as lojas de objetos necessárias. Dessa forma, é possível executar várias transações com escopos não sobrepostos simultaneamente.
Especifique um modo de transação READ_WRITE
apenas quando necessário. É possível executar várias transações READ_ONLY
com escopos sobrepostos simultaneamente, mas você só pode ter uma transação READ_WRITE
para um repositório de objetos.
Outras fontes:
- A atualização em chromium.org
- Mais detalhes sobre IndexedDB no MDN
- Um exemplo completo sobre como usar a indexedDB em um app da Web de lista de tarefas simples
Até a próxima... continue a expandir a Web para territórios próximos.