Как я могу хранить большой (2 МБ) набор данных в постоянном локальном хранилище?

Я извлекаю большой список участников мероприятия из базы данных Firebase - около 4000 участников. Каждый представлен в виде объекта JSON размером примерно 500 байтов.

После получения набора данных я пытаюсь сохранить его в постоянном локальном хранилище. Сначала я пытался использовать Lawnchair.js, используя стандартное хранилище DOM (localStorage).

Что я заметил, так это то, что при вставке набора данных с помощью этого метода использование памяти Chrome увеличивается примерно до 2 ГБ. Кроме того, поскольку синхронное сохранение в localStorage блокирует DOM, приложение перестает отвечать на запросы в течение 30 секунд.

Я подумал, что это может быть проблема с Lawnchair, поэтому я попытался перейти на localForage, используя IndexedDB. Это было 2 большие улучшения:

  1. localForage является асинхронным, поэтому приложение остается отзывчивым
  2. Использование памяти не поднимается вообще

Однако для записи данных в индексированную базу данных требуется около 10 минут. Первые 5 минут процессор занимает около 30% и ничего не записывается в индексированные БД. Последние 5 минут процессор выключается и запись начинается медленно (возможно, 10 записей в секунду).

Мой вопрос таков: нормальное ли это поведение, и если да, то как я могу хранить эти данные (примерно 2 МБ) в постоянном локальном хранилище, не требуя времени или огромного объема памяти?

1 ответ

В случае, если кому-то это интересно, я сузил проблему до того факта, что с помощью localforage я пытался вставить тысячи пар ключ-значение, причем значение являлось объектом JSON. Это занимает очень много времени. Сначала вызовите JSON.stringify(obj) и вставьте строку в качестве значения - более чем в 100 раз быстрее.

введите описание изображения здесь

Другие вопросы по тегам