13

使用 JSON.parse 是将 JSON 字符串解析为 JavaScript 对象的最常用方法。

它是一个同步代码,但它实际上是否阻塞了事件循环(因为它比用户的代码低得多)?

有没有一种简单的方法来异步解析 JSON?对于几 KB - 几百 KB 的 JSON 数据,这是否重要?

4

2 回答 2

13

在返回值之前不接受回调或返回 Promise 的函数会阻塞。

所以是的,它会JSON.parse阻塞。解析 JSON 是一项 CPU 密集型任务,而 JS 是单线程的。所以解析必须在某个时候阻塞主线程。异步仅在等待另一个进程或系统时才有意义(这就是为什么磁盘 I/O 和网络具有良好的异步意义,因为它们比原始 CPU 处理具有更多的延迟)。

在您开始优化它的解析之前,我首先要证明解析 JSON 实际上是您的应用程序的瓶颈。我怀疑不是。

于 2013-09-17T06:28:49.400 回答
3

如果您认为您可能需要执行大量繁重的 JSON 解码,请考虑将其移至另一个进程。我知道这似乎很明显,但成功使用 node.js 的关键在于名称。

要设置另一个“节点”来处理 CPU 繁重的任务,请使用 IPC。简单的套接字就可以了,但是ØMQ 增加了一点放射性魔法,因为它支持各种传输。

可能是连接套接字和发送 JSON 的开销总体上更加密集,但它肯定会停止阻塞。

于 2013-10-08T09:01:52.177 回答