【问题标题】:Node.js: does JSON.parse block the event loop?Node.js:JSON.parse 会阻止事件循环吗?
【发布时间】:2013-09-21 11:08:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: json node.js


    【解决方案1】:

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

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

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

    【讨论】:

    • 如果有问题(不应该有几百 KB),请检查 writings.nunojob.com/2011/12/…
    • 事件被阻塞时是否可以添加到事件循环中?例如 - 当 JSON.parse 正在运行时,来自 Redis 订阅的回调被添加到循环中或错过了这个事件?
    • @GalBen-Haim 是的!事件被安排,但处理程序必须等待被调用,直到运行循环可用。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-06
      • 2020-08-05
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多