IndexedDB

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

IndexedDBJavaScript-интерфейс прикладного программирования (API) клиентского хранилища большого объема структурированных данных, в том числе файлы/blobs. Другими словами, это NoSQL-хранилище данных в формате JSON внутри браузера. Стандарт разработан W3C и внедрен в браузерах с 2011 года.[1]

Поддержка IndexedDB была добавлена в Firefox версии 4,[2] Google Chrome версии 11,[3] и Internet Explorer версии 10.[4] Safari в конечном счете добавил поддержку в версии 8.[5]

База данных Web SQL была предшествующим API, разработанным Apple.[6] Но Mozilla выступила против его стандартизации, потому что не было предложено альтернатив движку SQLite.[7][8] Таким образом, он был объявлен устаревшим в пользу IndexedDB.

Основные принципы

[править | править код]

В базе данных сайты IndexedDB могут постоянно хранить и читать данные клиентского хранилища. Каждый домен имеет свою собственную область хранения, доступ к данным, хранящимся в другом домене, не предоставляется в соответствии с принципом одинакового источника (англ. Same Origin Policy). Размер доступной памяти зависит от браузера, обычно существует фиксированный предел, который не может быть превышен, и мягкий предел, из которого пользователь должен сначала согласиться на хранение.[9] В принципе, хранилище является постоянным, но браузеры предлагают своим пользователям возможность удаления сохраненных данных.[10]

База данных является объектной базой данных, обычно хранятся объекты JavaScript, с одной из записей в качестве ключа, с помощью которого можно получить данные. Индексы также могут быть созданы для других записей хранимых объектов, чтобы обеспечить эффективный поиск.

Доступ к базе данных асинхронный: клиент делает запрос и регистрирует функции обратного вызова. Как только станет известен результат запроса, он будет проинформирован об этом и, в случае успеха будут предоставлены запрошенные данные, в случае ошибки - причина. При доступе транзакции используются для обеспечения согласованности данных, даже если, например, две одновременно открытые вкладки имеют независимый доступ к базе данных.

Реализации

[править | править код]

Точная реализация базы данных не фиксирована, однако она представляет собой B-дерево. Все современные браузеры поддерживают стандарт, так как он постоянно развивается, не всегда в текущей версии. В браузерах Microsoft интерфейс реализован лишь частично.[10] В старых версиях браузеров API все еще частично снабжен префиксом разработчика.[11]

Альтернативы

[править | править код]

Web Storage — гораздо более простая альтернатива хранения данных, но с меньшим числом возможностей, предназначенная для небольшого объема данных.

Альтернативным стандартом, представляющим собой базу данных, к которой можно обращаться посредством SQL-запросов, был Web SQL. Однако этот стандарт был реализован только в нескольких браузерах, поэтому его разработка была прекращена в пользу IndexedDB.[12]

В старых браузерах IndexedDB можно моделировать с помощью полифилов (англ. Polyfill).[13]

Примечания

[править | править код]
  1. IndexedDB API. W3.org. Архивировано 2 февраля 2011 года.
  2. IndexedDB - MDC Doc Center (англ.). Developer.mozilla.org. Архивировано из оригинала 26 мая 2012 года.
  3. Web Platform Status (англ.). Проект Chromium (21 мая 2012). Архивировано 4 марта 2017 года.
  4. IndexedDB (англ.), MSDN, 2012-03-14, Архивировано 26 марта 2015 Источник. Дата обращения: 8 февраля 2019. Архивировано 26 марта 2015 года.
  5. What's New in macOS (англ.). Apple. Архивировано 12 декабря 2017 года.
  6. Shankland, Stephen Consensus emerges for key Web app standard | Deep Tech - CNET News (англ.). News.cnet.com (12 марта 2010). Архивировано 8 апреля 2013 года.
  7. Well, I'm Back: Not Implementing Features Is Hard (англ.). Weblogs.mozillazine.org. Архивировано 6 августа 2011 года.
  8. Beyond HTML5: Database APIs and the Road to IndexedDB. Дата обращения: 8 февраля 2019. Архивировано 14 февраля 2021 года.
  9. Raymond Camden. IndexedDB and Limits (англ.) (17 апреля 2015). Архивировано 9 февраля 2019 года.
  10. 1 2 Gefährdeter Datenschutz: Firefox löscht lokale Datenbanken nicht (нем.) (19 сентября 2017). — Обзор поддержки браузерами. Архивировано 9 февраля 2019 года.
  11. Can I use: IndexedDB (англ.). Архивировано 8 апреля 2017 года.
  12. Ian Hickson. Web SQL Database (англ.). Архивировано 3 февраля 2019 года.
  13. Parashuram Narasimhan. Using IndexedDB API today – the IndexedDB polyfills (англ.). Mozilla Hacks (31 июля 2012). Архивировано 9 февраля 2019 года.