Изменение режима устойчивости по умолчанию в IndexedDB.

Режим устойчивости по умолчанию в 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 .

Что это значит для веб-разработчиков?

Это изменение не вводит никакой новой поверхности 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 направлен на повышение производительности при сохранении совместимости с другими основными браузерами. В большинстве случаев мы рекомендуем ничего не делать, поскольку новое значение по умолчанию обеспечит повышение производительности. При необходимости вы можете продолжать указывать предпочтительный режим устойчивости, взяв на себя контроль над надежностью данных и производительностью в ваших веб-приложениях.

Благодарности

Эту статью рецензировали Эван Стэйд и Рэйчел Эндрю .