4

Современные браузеры имеют локальное хранилище, которое хранится в webappstore.sqlite (для firefox) и localstorage.sqlite (для chrome).

Существует сторонний скрипт (онлайн-мессенджер), который использует локальное хранилище и меняет некоторое значение каждую секунду (chrome) или даже чаще (firefox, 2-3 раза в секунду).

Ключ локального хранилища, который меняется так часто:

_STRG_fm_current

скрипт webagent-04052011092843.js

Я думаю, что движок sqlite в broswer выполняет fsync каждый раз (или каждую секунду) при изменении значений в локальном хранилище. Используя Filemon, я также обнаружил работу с файлами .sqlite-journal, но они удаляются, когда я пытаюсь найти их в папке с localalstorage.

Можно ли ограничить частоту, с которой sqlite будет выполнять fsyncs для локальных хранилищ в Firefox и Chrome?

1 ответ1

2

Если у вас есть веб-приложение, которое использует локальное хранилище настолько сильно, что оно вызывает проблемы с производительностью, я бы связался с автором веб-приложения и уведомил их, чтобы, возможно, они могли это исправить.

Тем не менее, SQLite имеет режим, начиная с версии 3.7.0, называемый журналом записи с опережением, который использует меньше операций fsync. Поскольку более новые версии Chrome и Firefox используют как минимум версию 3.7.0 SQLite, вы можете установить режим WAL в своей локальной базе данных хранения, и он должен сохраняться, когда Chrome и Firefox начнут его использовать.

Вам понадобится исполняемый файл sqlite3. Сначала закройте Chrome, затем выполните следующие команды:

sqlite3 path/to/localstorage.sqlite

sqlite> PRAGMA journal_mode=WAL;
sqlite> .quit

(Когда вы запускаете команду PRAGMA , вы должны получить результат " wal ".)

Эти же команды будут использоваться для установки режима WAL для базы данных Firefox, заменив webappstore.sqlite на localstorage.sqlite .

Чтобы отменить этот параметр, запустите те же команды, за исключением использования PRAGMA journal_mode=DELETE; ,

Обратите внимание, что я не пробовал это сам; Я думаю, что это будет работать нормально, но я призываю вас сделать резервную копию файла базы данных, прежде чем пытаться это сделать.


Кроме того, файлы *.sqlite-journal которые вы видите в Filemon, являются частью того, как SQLite выполняет атомарный коммит. По умолчанию файл журнала существует только в течение очень короткого времени. При внесении изменений в базу данных SQLite выполняются следующие действия:

  1. Текущие данные записываются в файл журнала.
  2. Новые данные записываются в файл базы данных.
  3. Файл журнала удален.

Если во время записи файла базы данных происходит сбой компьютера, файл журнала используется для восстановления базы данных до того, как изменения начались.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .