javascript - 使用 web worker 进行字符串化
问题描述
所以我有一个应用程序需要将JSON.stringify
其数据放入 localStorage,但随着数据变大,此操作变得异常昂贵。
因此,我尝试将其移至 webWorker 上,使其脱离主线程,但我现在正在学习将对象发布到 webWorker 甚至比将其字符串化更昂贵。
所以我想我在问,有什么办法可以JSON.stringify
摆脱主线程,或者至少让它更便宜?
我很熟悉fast-json-stringify
,但我认为我每次都无法提供完整的架构......
解决方案
您已经正确地观察到将对象传递给 Web Worker 的成本与序列化它的成本一样高。这是因为 web worker 也需要接收序列化的数据,而不是原生的 JS 对象,因为实例对象绑定到创建它们的 JS 线程。
通用解决方案适用于许多编程问题:在处理大型数据集时选择正确的数据结构。当数据变大时,最好牺牲访问的简单性来换取性能。因此,请执行以下任何操作:
将数据存储在 indexedDB 中
如果您的大对象包含相同类型的条目列表,则使用索引数据库进行读取和写入,您根本不需要担心序列化。这将需要重构您的代码,但这是大型数据集的正确解决方案。
将数据存储在 ArrayBuffer 中
如果您的数据大多是固定大小的值,请使用 ArrayBuffer。ArrayBuffer 可以立即复制或移动到 web worker,如果您的条目大小相同,则可以并行完成序列化。对于访问,您可以编写简单的包装类,将您的二进制数据转换成更易读的东西。
推荐阅读
- javascript - 如何正确模拟节点模块以进行笑话单元测试
- amazon-web-services - 通过 cpu 利用率自动扩展 t3 实例?
- ruby - 在 Chef 中访问模板属性
- excel - 如何使用 excel 中的数据标准化多个代理之间的销售分配百分比?
- graphviz - 点中的工具提示(graphviz)
- ubuntu - 请问如何在 ubuntu18.04 中通过 xfconf-query 制作桌面颜色?
- python - 当 Celery 检索结果时,Python 迅速泄漏内存
- javascript - Javascript功能范围,如何绕过它?
- json - 访问 dart 中的 json 元素
- visual-studio - 我正在使用 VS 社区版 macOS 和 GitHub 网页。那么我该如何执行 Git 命令呢?