Оптимальный способ хранения большого (100 000 строк) JSON файла в клиенте - PullRequest
0 голосов
/ 20 марта 2020

У меня есть SPA, созданный с помощью Next. js, который принимает загрузки больших файлов JSON и сохраняет их в памяти для последующего доступа. Тем не менее, я хотел бы сохранить эти данные на клиенте после их загрузки, чтобы пользователям не приходилось повторно загружать их при каждой загрузке страницы.

До сих пор мои исследования заставили меня поверить IndexedDB является наиболее подходящим инструментом из-за огромного (70+ МБ) размера этих JSON файлов. Тем не менее, я не уверен в лучшем способе перебрать каждый элемент в JSON и сохранить его в БД. Я попытался преобразовать разделенный строкой JSON в массив объектов, для которых я вызываю Array.map, а затем сохранить каждый объект (см. Код ниже), но из-за того, что в нем более 100 тыс. Элементов, это слишком медленно для браузера. Я использую Dex ie для работы с IndexedDB.

мой текущий подход:

import Dexie from 'dexie';

const db = new Dexie('SongDatabase');

// convert the line-delimited JSON to an array of objects
const songs = JSON.parse(`[${uploadedJSON.replace(/\n/g, ',')}]`);

songs.map(song => {
    db.songs.put({ name: song.name, artist: song.artist });
});

JSON с разделителями новой строки, поэтому я посмотрел на потоковую передачу, используя что-то вроде nd json, но это, похоже, предназначено для серверов, а не для браузеров.

Существует ли эффективный способ сделать это полностью в браузере, или я должен рассмотреть потоковую передачу JSON для сервера, чтобы его можно было сохранить в API?

...