Как уменьшить объем памяти, используемой JSON.stringify на клиенте? - PullRequest
0 голосов
/ 02 июня 2018

Есть ли способ уменьшить использование памяти на клиенте при преобразовании большого объекта javascript в строку, используя JSON.stringify?

Я ищу что-то, что решает вопрос ниже, но для javascript на клиенте.

Запись JSON в поток без буферизации строки в памяти

Когда я пытаюсь выполнить простой JSON.stringify (big_object), он быстро занимает всю оперативную память и зависаетмой компьютер.

Та же проблема использования памяти возникает, когда я пытаюсь записать большой объект в indexedDB, как подробно описано здесь.

Пример утечки памяти в indexedDB вstore.add (см. пример при редактировании)

Эти два вопроса трехлетней давности, похоже, имеют одну и ту же проблему, но я не могу найти решение, которое когда-либо было найдено.

Как я могу создать действительно длинную строку с помощью IndexedDB без сбоя браузера?

Оптимизация JSON.stringify

Большой вопрос заключается в следующем:яВ автономном веб-приложении, в котором пользователь может накапливать большой объем данных в базе данных indexedDB, процесс его резервного копирования на жесткий диск, по-видимому, заключается в записи данных в объект, преобразовании объекта в строку, строка в большой двоичный объект и загрузите его на диск.А чтобы загрузить файл и записать его обратно в базу данных, выполните обратное.Однако JSON.stringify и JSON.parse на большом объекте захватывают всю память и вызывают сбой браузера или всего компьютера.

Эта ссылка, по-видимому, указывает на то, что проблема с большими двоичными объектами в indexedDB была решена, но этоне кажется, чтобы решить эту проблему, не так ли?Объект не может быть напрямую преобразован в BLOB-объект, не так ли?И, если это так, может ли организованный объект быть восстановлен из большого двоичного объекта?

Неустойчивые операции хранения больших файлов IndexedDB приводят к тому, что IndexedDB потребляет большой объем памяти, который не освобождается.1034 * Помимо того, что пользователь загружает и загружает несколько файлов для резервного копирования и восстановления своей работы, сохраненной в базе данных, есть ли другой способ сделать это, когда все это на клиенте и в автономном режиме?

Спасибо за любое направление, которое вы можете предоставить.

1 Ответ

0 голосов
/ 02 июня 2018

"Та же проблема использования памяти возникает, когда я пытаюсь записать большой объект в indexedDB, как подробно описано здесь."

indexDB имеет ограничение 5 МБ на мобильном устройстве / 50 МБ на рабочем столе, поэтому есливаш объект превышает те ограничения на основе устройства, которые являются вашей проблемой с indexDB

Что касается создания массивного укуса из массивного объекта, вы можете столкнуться с ограничением длины строки V8, которое в настоящее время ограничено 512 МБ.Поэтому вам нужно будет использовать потоковый анализ / сериализацию, например big-json

...