Dexie.js построена поверх IndexedDB, поэтому её
работоспособность напрямую определяется тем, насколько среда выполнения
реализует этот стандарт. Библиотека не является полифилом IndexedDB, а
выступает надстройкой, упрощающей работу с ним, поэтому наличие
полноценной реализации IndexedDB — обязательное условие.
Ключевой момент: Dexie.js не может функционировать без
IndexedDB или его эмуляции.
Современные браузеры
и нативная поддержка
Основная область применения Dexie.js — браузерная среда, где
IndexedDB давно стал стандартом.
Поддержка в современных движках:
Chromium-браузеры (Google Chrome, Microsoft Edge, Opera,
Brave) Полная и стабильная поддержка IndexedDB без ограничений.
Dexie.js работает в полном объёме, включая транзакции, индексы,
bulk-операции и наблюдатели изменений.
Mozilla Firefox Полная поддержка IndexedDB с
высокой стабильностью. Поведение максимально предсказуемо, включая
сложные транзакции и большие объёмы данных.
Safari (macOS) Поддержка IndexedDB присутствует,
но исторически имеет ряд особенностей:
- возможные ограничения на квоты хранения
- агрессивная очистка данных в некоторых сценариях
- нестабильность при работе в приватном режиме
Safari iOS Один из самых проблемных случаев:
- ограничения на persistent storage
- возможная очистка IndexedDB системой при нехватке памяти
- ограничения при работе в фоне Dexie.js работает, но требует
осторожности при проектировании хранилищ.
Ограничения приватного
режима браузеров
Во многих браузерах режим инкогнито или приватный режим влияет на
IndexedDB:
- Chrome / Edge: IndexedDB работает, но данные удаляются после
закрытия сессии
- Firefox Private Mode: IndexedDB доступен, но изолирован и очищается
автоматически
- Safari Private Browsing: возможны ограничения вплоть до частичной
недоступности IndexedDB
Следствие для Dexie.js: API работает, но долговременное
хранение данных не гарантируется.
Web Workers и Dexie.js
Dexie.js поддерживает использование в Web Workers,
однако с условиями:
- IndexedDB внутри worker доступен в современных браузерах
- Dexie экземпляры могут быть созданы в отдельном потоке
- транзакции работают аналогично main thread
Особенности архитектуры:
- нельзя разделять один экземпляр Dexie между потоками
- требуется отдельная инициализация схемы в каждом worker
Это делает Dexie.js удобной для:
- фоновой синхронизации
- обработки больших наборов данных
- индексации без блокировки UI
Service Workers и
офлайн-сценарии
Dexie.js часто используется в связке с Service Worker для
офлайн-first приложений.
Поддержка:
- IndexedDB внутри Service Worker доступен
- Dexie полностью функционирует
- возможна работа без активного окна приложения
Типовые сценарии:
- кеширование структурированных данных
- офлайн-очереди операций
- синхронизация при восстановлении сети
Важно учитывать:
- ограничение по времени жизни Service Worker
- возможные перезапуски между операциями
- необходимость атомарных транзакций
Electron и десктопные среды
В среде Electron Dexie.js работает стабильно,
поскольку используется Chromium.
Особенности:
- IndexedDB полностью нативный
- нет ограничений мобильных браузеров
- значительно большие квоты хранения
- высокая предсказуемость поведения
Это делает Dexie.js популярным выбором для:
- офлайн-десктопных приложений
- локальных баз данных
- кэширования больших наборов данных
Node.js и серверные
окружения
Node.js не поддерживает IndexedDB нативно, поэтому Dexie.js не может
работать напрямую.
Для совместимости используются эмуляции:
fake-indexeddb
indexeddbshim
dexie + адаптеры хранения
Сценарии применения:
- тестирование логики работы с Dexie
- унификация кода между frontend и backend
- серверные симуляции офлайн-данных
Ограничения:
- производительность ниже браузерной реализации
- отсутствие некоторых браузерных оптимизаций
- возможные расхождения поведения транзакций
React Native и мобильные
приложения
React Native не использует IndexedDB, поэтому Dexie.js напрямую не
работает.
Используются обходные решения:
react-native-indexed-db (через нативные мосты)
expo-sqlite в комбинации с адаптерами
- кастомные реализации через SQLite
Dexie.js может применяться только при наличии слоя, имитирующего
IndexedDB API.
Ограничения хранения и квоты
Во всех браузерах Dexie.js зависит от политики хранения данных:
- quota-based storage (лимиты зависят от устройства)
- возможное автоматическое очищение
- различия между платформами
Факторы влияния:
- объём свободного диска
- режим приватности
- политика браузера
- активность пользователя
Dexie.js не управляет квотами напрямую, но предоставляет API для
оценки доступного пространства через браузерные механизмы.
Persistent Storage API
Современные браузеры предоставляют механизм:
navigator.storage.persist()
navigator.storage.estimate()
Dexie.js может использовать эти возможности косвенно через
приложение.
Эффект:
- снижение вероятности автоматической очистки данных
- повышение стабильности хранения
- более предсказуемое поведение IndexedDB
Особенности
поведения на мобильных устройствах
Мобильные браузеры (особенно iOS Safari) имеют специфические
ограничения:
- агрессивное управление памятью
- выгрузка вкладок из памяти
- очистка IndexedDB при нехватке ресурсов
- нестабильность долгоживущих транзакций
Dexie.js остаётся работоспособной, но требует:
- минимизации объёма транзакций
- регулярного коммита данных
- обработки ошибок
QuotaExceededError
Совместимость версий
Dexie.js
Современные версии Dexie.js ориентированы на:
- ES6+ окружения
- Promise-based API
- поддержку современных IndexedDB возможностей (indexes, compound
keys, hooks)
Старые браузеры:
- Internet Explorer не поддерживается
- старые версии Edge (EdgeHTML) не поддерживаются
- устаревшие Safari версии могут иметь частичную совместимость
Поведение при отсутствии
IndexedDB
Если IndexedDB отсутствует:
- Dexie.js не инициализируется
- выбрасывается ошибка при создании базы
- требуется fallback-слой
Типичные fallback-стратегии:
- localStorage (очень ограниченный вариант)
- memory storage (временное хранение)
- SQL-based storage через сторонние адаптеры
Итоговая модель
совместимости
Поведение Dexie.js можно свести к трём уровням поддержки:
- Полная поддержка: современные Chromium, Firefox, Electron
- Ограниченная поддержка: Safari iOS, приватные режимы
- Отсутствие поддержки: Node.js без эмуляции, старые браузеры
Эта модель делает Dexie.js типичным решением для клиентских
приложений с офлайн-хранением, где ключевым фактором является наличие
стабильного IndexedDB-движка.