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