首页 > 解决方案 > 使用 web worker 进行字符串化

问题描述

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

因此,我尝试将其移至 webWorker 上,使其脱离主线程,但我现在正在学习将对象发布到 webWorker 甚至比将其字符串化更昂贵。

所以我想我在问,有什么办法可以JSON.stringify摆脱主线程,或者至少让它更便宜?

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

标签: javascriptjsonreactjsweb-worker

解决方案


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

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

将数据存储在 indexedDB 中

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

将数据存储在 ArrayBuffer 中

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


推荐阅读