Новая оптимизация в Chrome улучшает способ хранения данных IndexedDB на диске. Это улучшение фокусируется на том, как большие значения управляются в системе хранения Chrome, в частности, путем введения сжатия в определенные файлы, хранящиеся на диске. В статье суммируются основные моменты этого обновления.
Механизм хранения Chrome до версии 129
Chrome использует LevelDB для хранения данных IndexedDB на диске. LevelDB — это быстрая библиотека хранения ключей и значений, но она испытывает трудности, когда отдельные значения превышают размер страницы базы данных. Чтобы решить эту проблему, с 2017 года Chrome хранит значения размером больше одной страницы в виде простых файлов на диске вместе с файлом базы данных.
Хранилище с версии 129
Сжатие больших значений
В отличие от содержимого, хранящегося непосредственно в базе данных LevelDB, которое сжимается перед записью на диск и распаковывается после чтения, большие файлы, хранящиеся как простые файлы, не сжимаются. С новым обновлением Chrome теперь будет сжимать эти большие файлы с помощью библиотеки сжатия в реальном времени Snappy , что приводит к значительной экономии места. Это особенно эффективно для структурированных данных, таких как большие массивы значений JavaScript, XML или JSON. Это неэффективно для медиафайлов, которые имеют большой размер, но уже сжаты, или, что встречается реже, если сайт уже сам выполняет сжатие и распаковку.
Влияние на эффективность хранения
Если сжатие уменьшает размер файла до размера ниже страницы LevelDB, данные перемещаются обратно в LevelDB. Это изменение не только экономит место, но и сокращает операции ввода-вывода на диске, повышая общую производительность.
Быстрый алгоритм сжатия
Команда Chrome выбрала Snappy для сжатия, потому что он оптимизирует скорость, а не максимальное сжатие. Он достаточно быстр, чтобы не вносить измеримых потерь производительности во время сжатия или распаковки.
Улучшения производительности
Сжатие и распаковка обрабатываются в процессе рендеринга, который является частью многопроцессорной архитектуры Chrome. Это уменьшает размер сообщений, отправляемых в процесс браузера, что приводит к дальнейшему повышению производительности. Синтетические тесты показали, что это обновление может сделать некоторые операции в два-три раза быстрее, чем раньше, из-за сокращения IPC (межпроцессного взаимодействия) и дискового ввода-вывода. На практике, по измерениям команды Chrome, структурированные полезные данные объемом 1 МБ доставляются с диска на страницу примерно за четверть времени (с высокой изменчивостью в зависимости от аппаратного обеспечения устройства и активности системы).
Влияние на разработчиков и пользователей
Эти изменения полностью прозрачны как для разработчиков, так и для пользователей. Однако пользователи могут заметить улучшение производительности и сокращение использования хранилища.
- Экономия места: сжатие применяется только к новым данным, сохраненным после этого обновления. Экономию места можно косвенно наблюдать с помощью веб-API, таких как
navigator.storage.estimate()или в разделе Storage в Chrome DevTools под панелью Application . - Тестирование функции: Разработчики могут протестировать это поведение в предварительных версиях Chrome (до 129), включив функцию с помощью флага:
--enable-features="IndexedDBCompressValuesWithSnappy".
Это обновление повышает эффективность Chrome в управлении большими значениями IndexedDB, предлагая экономию пространства и времени без ущерба для производительности, что является существенным улучшением в том, как данные хранятся и доступны в браузере. Понимая эти изменения, разработчики могут извлечь выгоду из текущих усилий по оптимизации производительности и механизмов хранения Chrome, обеспечивая более плавный и эффективный пользовательский опыт.
Благодарности
Этот документ был проверен Эваном Стэйдом и Рейчел Эндрю .