This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

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.