使用 web worker 进行字符串化

Use web worker to stringify

所以我有一个应用需要 JSON.stringify 将其数据放入 localStorage,但是随着数据变大,此操作变得非常昂贵。

所以,我尝试将它移到 webWorker 上,这样它就脱离了主线程,但我现在了解到将对象发布到 webWorker 比将其字符串化更昂贵。

所以我想我想问的是,有什么方法可以让 JSON.stringify 脱离主线程,或者至少降低它的成本?

我熟悉fast-json-stringify,但我认为我每次都无法提供完整的架构...

您已经正确地观察到将对象传递给 Web Worker 的成本与序列化对象的成本一样高。这是因为 web worker 还需要接收序列化数据,而不是原生 JS 对象,因为实例对象绑定到创建它们的 JS 线程。

通用解决方案适用于许多编程问题:在处理大型数据集时选择正确的数据结构。当数据变大时,最好牺牲访问的简单性来提高性能。因此执行以下任一操作:

将数据存储在 indexedDB 中

如果你的大对象包含同类条目的列表,使用索引数据库进行读写,你根本不需要担心序列化。这将需要重构您的代码,但这是大型数据集的正确解决方案。

在ArrayBuffer中存储数据

如果您的数据主要是固定大小的值,请使用 ArrayBuffer。 ArrayBuffer 可以立即复制或移动到 web worker,如果你的条目都是相同的大小,序列化可以并行完成。对于访问,您可以编写简单的包装器 类 将您的二进制数据转换为更易读的内容。