Home Articles

如何在客户端上减少JSON.stringify使用的内存量?

Asked
Viewed 368 times
2

使用JSON.stringify将大型javascript对象转换为字符串时,有没有办法减少客户端上的内存使用量?

我正在寻找解决下面问题的东西,但是对于客户端上的javascript .

Writing JSON to a stream without buffering the string in memory

当我尝试一个简单的JSON.stringify(big_object)时,它会迅速占用所有RAM并冻结我的计算机 .

当我尝试将大对象写入indexedDB时会发生相同的内存使用问题,如此处所述 .

Example of memory leak in indexedDB at store.add (see Example at Edit)

三年前的这两个问题似乎有同样的问题,但我找不到找到解决方案 .

How can I make a really long string using IndexedDB without crashing the browser?

JSON.stringify optimization

更大的问题是:在用户可以在indexedDB数据库中累积大量数据的离线Web应用程序中,将该数据备份到硬盘的过程似乎是将数据写入对象,将对象转换为字符串,将字符串转换为blob文本,然后将blob下载到磁盘 . 要上传文件并将其写回数据库,请执行相反的操作 . 但是,大对象上的JSON.stringify和JSON.parse会占用所有内存并导致浏览器或整个计算机崩溃 .

此链接似乎表明indexedDB中的大blob问题已得到解决,但这似乎无法解决此问题,是吗?该对象不能直接转换为blob,可以吗?而且,如果是这样,可以从blob中恢复有组织的对象吗?

不稳定的IndexedDB大文件存储操作导致IndexedDB消耗大量未释放的内存 . https://bugzilla.mozilla.org/show_bug.cgi?id=1223782

除了让用户下载和上传多个文件进行备份并恢复他们保存在数据库中的工作外,还有另一种方法可以在客户端和离线时实现这一点吗?

感谢您提供的任何指示 .

1 Answer

  • 1

    “当我尝试将大型对象写入indexedDB时会发生相同的内存使用问题,详见此处 . ”

    indexDB在桌面上的移动限制为5mb / 50mb,因此如果您的对象超过了与indexDB相关的基于设备的边界

    至于从大型对象创建一个巨大的刺痛,你可能会遇到V8字符串长度限制,目前限制为512MB . 所以你需要使用基于流的解析/序列化,如big-json

Related