IndexedDB

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая Gromolyak (обсуждение | вклад) в 03:18, 27 декабря 2021 (top). Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску

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

Ссылки