Режим устойчивости по умолчанию в IndexedDB меняется со strict
на relaxed
с Chrome 121. Эта корректировка направлена на повышение производительности и согласование с другими основными браузерами, такими как Firefox и Safari. В сообщении в блоге объясняются подробности этого изменения и его значение для веб-разработчиков.
Режимы долговечности IndexedDB
IndexedDB , мощный веб -API для хранения больших объемов структурированных данных, предлагает два режима долговечности для транзакций readwrite
:
-
strict
: этот режим явно инструктирует ОС промыть изменения на диск перед тем, как выпуститьcomplete
событие. -
relaxed
этот режим полагается на поведение ОС по умолчанию и выпускаетcomplete
событие после того, как изменения попадают в буфер ОС, который обычно промывается каждые пару секунд.
Важно отметить, что strict
не гарантирует, что изменения будут немедленно записаны на диск. После того, как сайт вызовет put()
, все еще есть некоторое конечное количество времени, в течение которого сбой питания может привести к тому, что изменение не попадет на диск и, следовательно, будет отсутствовать при следующем запуске приложения.
Когда речь идет о гарантиях со strict
долговечностью, событие complete
транзакции IndexedDB не срабатывает до тех пор, пока данные фактически не будут записаны, тогда как при relaxed
долговечности данные все еще находятся в процессе записи, когда срабатывает событие complete
. (Более подробную информацию о полном процессе см. в этом объяснении ).
На самом деле настолько strict
, что вам абсолютно необходимо знать, что это было написано, прежде чем вы сделаете следующее. Миграция данных является примером, когда требуется strict
долговечность. Переходя от одного магазина подкладки в другой, вы не хотите удалять старый формат, пока новый не будет написан. Таким образом, strict
долговечность облегчает процедуру миграции, которая может оправиться от неудачи на полпути.
Изменение режима долговечности по умолчанию
Важнейшим аспектом этого изменения является режим долговечности по умолчанию для транзакций readwrite
в Chrome. До сих пор значение по умолчанию было strict
, что обеспечивало немедленную запись на диск для изменений данных. Однако из соображений производительности и для соответствия другим основным браузерам, которые все используют relaxed
, Chrome также планирует изменить значение по умолчанию на relaxed
.
Это изменение призвано обеспечить лучший баланс между производительностью и долговечностью данных. В то время как strict
обеспечивает максимальную долговечность данных, relaxed
часто бывает достаточным для многих веб-приложений и может значительно улучшить производительность следующими способами
- Скорость-в реальных примерах команда Chrome увидела улучшение скорости между 3 и 30.
- Прочность диска, особенно для устройств с твердотельным диском (SSD).
- Увеличенный срок службы батареи.
- Улучшение скорости чтения. Из -за архитектуры IndexedDB, где транзакции чтения часто блокируются за транзакциями записи, скорость чтения улучшается в качестве вторичного эффекта.
- Все устройство положительно влияет, потому что дисковые операции являются общим системным ресурсом.
Взаимодействие и совместимость
Одним из важных аспектов этого изменения является его влияние на взаимодействие и совместимость. Соответствуя поведению других основных поставщиков браузеров, Chromium улучшает взаимодействие. Сам стандарт допускает различные реализации, и это изменение направлено на гармонизацию этих реализаций. Вы можете найти более исторический контекст этого изменения в этом выпуске GitHub Issue .
Что это значит для веб-разработчиков?
Это изменение не вводит новую поверхность API. Существующий API IndexedDB остается прежним, и это изменение в первую очередь влияет на поведение по умолчанию транзакций readwrite
. Вы можете указать предпочитаемый режим долговечности при создании транзакций, что дает вам контроль над долговечностью и производительностью данных. Следующий пример кода показывает, как вернуть старое поведение, установив durability
на strict
в необязательном массиве параметров.
let db;
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
DBOpenRequest.onsuccess = (event) => {
db = DBOpenRequest.result;
};
const transaction = db.transaction(
['toDoList'],
'readwrite',
{ durability: 'strict' });
Локальное тестирование изменения перед его отправкой
Изменение вступит в силу в Chrome 121. Если вы хотите проверить новое поведение локально раньше, переключите флаг #indexed-db-default-durability-relaxed
в chrome://flags
.
Узнать больше
Для получения дополнительных технических данных и обновлений об этом изменении, проверьте ошибку отслеживания и запись состояния платформы Chrome .
Подводя итог, можно сказать, что изменение Chrome режима устойчивости по умолчанию в IndexedDB направлено на повышение производительности при сохранении совместимости с другими основными браузерами. В большинстве случаев мы рекомендуем ничего не делать, поскольку новый режим по умолчанию обеспечит повышение производительности. При необходимости вы можете продолжать указывать предпочитаемый вами режим устойчивости, взяв под контроль устойчивость данных и производительность в ваших веб-приложениях.
Благодарности
Эта статья была рассмотрена Эваном Стейдом и Рэйчел Эндрю .