IndexedDB
IndexedDB — низкоуровневое API для клиентского хранилища большого объёма структурированных данных, включая файлы/blobs. Эти API используют индексы для обеспечения высоко-производительного поиска данных. ЕслиDOM Storage полезен для хранения небольшого количества данных, он менее выгоден для большого числа структурированных данных. IndexedDB предоставляет решение. Это основная страница на MDN, покрывающая IndexedDB — здесь мы предоставляем ссылки к полному списку API и руководствам по использованию, детали поддержки браузерами и некоторые объяснения ключевых концепций.
Примечание: Эта возможность доступна вWeb Workers.
Примечание:IndexedDB API мощные, но могут казаться слишком сложными для простых задач. Если вы предпочитаете простые API, попробуйте библиотеки, такие какlocalForage,dexie.js иZangoDB, делающие IndexedDB более дружественным.
Ключевые концепции и использование
IndexedDB транзакционная система базы данных, как SQL-основанная RDBMS. Однако, в отличие от RDBMS, которая использует таблицы с фиксированными колонками, IndexedDB — JavaScript-основанная объектно-ориентированная база данных. IndexedDB позволяет сохранять и возвращать объекты, которые были проиндексированы сключом; любой объект, поддерживаемыйструктурированным алгоритмом клонирования может быть сохранён. Необходимо описать схему базы данных, установить соединение с ней и затем получить и обновить данные за несколькотранзакций.
- Читайте больше оКонцепции IndexedDB.
- Изучите асинхронное использование IndexedDB по первоначальным принципам с руководствомUsing IndexedDB.
- Найдите рекомендации по разработке, чтобы заставить ваш сайт работать вне сети, на страницеOffline Apps.
Примечание:Как и большинство решений web-хранения, IndexedDB следует аналогичнойsame-origin policy. Поэтому вы имеете доступ к хранилищу данных в пределах одного домена, но не можете получать их с любого другого.
Синхронность и асинхронность
Выполнение операций использующих IndexedDB происходит асинхронно, т. е. не блокирует приложение. IndexedDB первоначально включал синхронные и асинхронные API. Синхронные API предназначались только для работы сWeb Workers, но были удалены из спецификации, потому что было неясно, нужны ли они. Однако, синхронные API могут быть повторно введены, если появится спрос со стороны веб разработчиков.
Ограничения памяти и критерии освобождения
Существует несколько веб-технологий, которые хранят данные того или иного вида на стороне клиента (т.е. на вашем локальном диске). Под IndexedDB чаще всего подразумевают одно. Процесс, в котором браузер вычисляет сколько места нужно выделить для хранения веб-данных.Ограничение памяти браузера и критерии освобождения пытаются объяснить как это работает, по крайней мере в случае с Firefox.
Интерфейсы
Чтобы получить доступ к базе данных, вызовите методopen()
y атрибутаindexedDB
объектаwindow. Этот метод возвращает объектIDBRequest
; асинхронные операции связываются с вызывающим приложением, вызывая события объектаIDBRequest
.
Подключение к базе данных
IDBEnvironment
Предоставляет доступ к функциям IndexedDB. Реализовано объектами
window
иworker
.IDBFactory
Предоставляет доступ к базе данных. Этот интерфейс представлен глобальным объектом
indexedDB
. Он является точкой входа для API.IDBOpenDBRequest
Представляет запрос на открытие базы данных.
IDBDatabase
Представляет подключение к базе данных. Это единственный способ получить транзакцию в базе данных.
Получение и изменение данных
IDBTransaction
Представляет транзакцию. Вы создаёте транзакцию в базе данных, указываете область действия (например, к каким хранилищам объектов вы хотите получить доступ) и определяете тип доступа (только чтение или чтение/запись), который вам нужен.
IDBRequest
Generic interface that handles database requests and provides access to results.
IDBObjectStore
Универсальный интерфейс, который обрабатывает запросы к базе данных и предоставляет доступ к результатам.
IDBIndex
Позволяет получить доступ к подмножеству данных в IndexedDB, но вместо первичного ключа использует индекс для извлечения записи (записей). Иногда это быстрее, чем использование
IDBObjectStore
.IDBCursor
Итерирует по хранилищам объектов и индексам.
IDBCursorWithValue
Итерирует по хранилищам объектов и индексам и возвращает текущее значение курсора.
IDBKeyRange
Определяет диапазон ключей, который можно использовать для извлечения данных из базы данных в определённом диапазоне.
IDBLocaleAwareKeyRange
Не стандартноОпределяет диапазон ключей, который можно использовать для извлечения данных из базы данных в определённом диапазоне, отсортированных в соответствии с правилами локали, указанной для определённого индекса (см.
createIndex()
's optionalParameters.). Этот интерфейс не входит в спецификацию 2.0.
Пользовательские интерфейсы событий
Эта спецификация запускает события со следующим настраиваемым интерфейсом:
IDBVersionChangeEvent
Интерфейс
IDBVersionChangeEvent
указывает, что версия базы данных изменилась в результате функции обработчика событийIDBOpenDBRequest.onupgradeneeded
.
Устаревшие интерфейсы
Ранняя версия спецификации также определяла эти теперь удалённые интерфейсы. Они все ещё задокументированы на тот случай, если вам понадобится обновить ранее написанный код:
IDBVersionChangeRequest
Представляет запрос на изменение версии базы данных. С тех пор способ изменения версии базы данных изменился (путём вызова
IDBFactory.open
без вызоваIDBDatabase.setVersion
), а интерфейсIDBOpenDBRequest
теперь имеет функциональность удалённогоIDBVersionChangeRequest
.IDBDatabaseException
Представляет исключения, которые могут возникнуть при выполнении операций с базой данных.
IDBTransactionSync
Синхронная версия
IDBTransaction
.IDBObjectStoreSync
Синхронная версия
IDBObjectStore
.IDBIndexSync
Синхронная версия
IDBIndex
.IDBFactorySync
Синхронная версия
IDBFactory
.IDBEnvironmentSync
Синхронная версия
IDBEnvironment
.IDBDatabaseSync
Синхронная версия
IDBDatabase
.IDBCursorSync
Синхронная версия
IDBCursor
.
Примеры
- eLibri: Мощная библиотека и приложение для чтения электронных книг, написанное Марко Кастеллуччо, победителем IndexedDB Mozilla DevDerby.
- To-do Notifications (view example live): Эталонное приложение для примеров в справочной документации.
- Storing images and files in IndexedDB
Спецификации
Specification |
---|
Indexed Database API 3.0 |
Совместимость с браузерами
Смотрите также
- localForage: Polyfill, предоставляющий простое имя: синтаксис значения для клиентского хранилища данных, которое использует IndexedDB в фоновом режиме, но обращается к WebSQL, а затем к localStorage в браузерах, которые не поддерживают IndexedDB.
- Dexie.js: Обёртка для IndexedDB, позволяющая значительно ускорить разработку кода благодаря красивому и простому синтаксису.
- ZangoDB: Интерфейс, подобный MongoDB, для IndexedDB, который поддерживает большинство знакомых функций фильтрации, проекции, сортировки, обновления и агрегирования MongoDB.
- JsStore: Оболочка IndexedDB с синтаксисом, подобным SQL.
- MiniMongo: Клиентский MongoDB, поддерживаемый localStorage, с синхронизацией сервера по http. MiniMongo используется в MeteorJS.
- PouchDB: Клиентская реализация CouchDB в браузере с использованием IndexedDB
- idb: Крошечная (~1,15 КБ) библиотека, которая в основном представляет API IndexedDB, но с небольшими улучшениями, которые имеют большое значение для удобства использования.
- idb-keyval: Суперпростое-маленькое (~600 Б) хранилище ключей на основе Promise, реализованное с помощью IndexedDB
- sifrr-storage: Небольшая (~2 КБ) библиотека на основе Promise для хранения ключей и значений на стороне клиента. Работает с IndexedDB, localStorage, WebSQL, Cookies. Может автоматически использовать поддерживаемое хранилище, доступное в зависимости от приоритета.
- lovefield: Lovefield - это реляционная база данных для веб-приложений. Написана на JavaScript, работает кроссбраузерно. Предоставляет API-интерфейсы, подобные SQL, быстрые, безопасные и простые в использовании.