Внутренняя логика библиотеки localForage строится вокруг выбора
подходящего драйвера хранения в зависимости от возможностей окружения.
Метод или внутренний механизм _support используется как
часть системы feature detection, определяющей, какие возможности
доступны в текущем браузере и может ли конкретный драйвер быть
использован без ошибок.
Ключевая задача этого слоя — формализация декларации поддержки: каждый драйвер не просто регистрируется, но и сообщает, какие операции он способен выполнять стабильно.
_support в процессе выбора драйвераПри инициализации localForage происходит последовательная проверка
доступных драйверов (IndexedDB, WebSQL, localStorage и других возможных
реализаций). На этом этапе _support участвует в следующем
процессе:
Фактически _support выступает как фильтр
совместимости, встроенный в систему регистрации драйвера.
В контексте localForage поддержка не ограничивается простым значением
true/false. Внутренняя модель может рассматривать поддержку
как набор признаков:
Метод _support может интерпретироваться как декларация,
возвращающая:
В типичной реализации проверка поддержки строится вокруг тестовых операций. Пример абстрактного поведения:
_support: function () {
try {
// проверка доступности API
if (!window.indexedDB) return false;
// попытка открыть тестовую базу
const request = indexedDB.open('_localforage_support_test', 1);
request.oner ror = function () {
return false;
};
request.onsucc ess = function () {
return true;
};
} catch (e) {
return false;
}
}
Хотя конкретная реализация в localForage может отличаться, общая идея
заключается в том, что _support проверяет не
декларацию API, а его фактическую работоспособность.
Каждый драйвер localForage может предоставлять собственную реализацию
_support, если требуется более точная проверка среды.
Например:
window.indexedDB и
возможность создания транзакций;openDatabase;window.localStorage и отсутствие блокировки в приватных
режимах.После вызова _support результат используется системой
регистрации:
false — драйвер исключается из списка
доступных;true — драйвер добавляется в пул кандидатов;Внутри localForage процесс регистрации драйвера включает несколько этапов:
defineDriver.getItem,
setItem, removeItem, clear,
length)._support для оценки среды.Таким образом _support является последним
фильтром перед активацией драйвера.
В зависимости от реализации драйвера, _support может
учитывать следующие аспекты:
1. Синхронность API
2. Ограничения окружения
3. Доступность глобальных объектов
window.indexedDBwindow.localStoragewindow.openDatabase4. Возможность записи
Некоторые окружения предоставляют API, но ограничивают его
функциональность. В таких случаях _support может вернуть
отрицательный результат, даже если объект API существует.
Типичный сценарий:
_support выполняет тестовую операцию;Использование _support напрямую влияет на стабильность
работы localForage в разных браузерах:
После выполнения _support система может переходить к
следующему драйверу в списке приоритетов. Этот механизм
обеспечивает:
В разных версиях localForage подход к _support мог
изменяться:
Эволюция метода направлена на повышение точности определения реальной доступности хранилища, а не только наличия интерфейса.
При реализации _support учитываются типичные
проблемы:
Каждый из этих случаев требует проверки не только структуры API, но и его поведения в runtime.