NodeJS JSON.stringify()瓶颈

时间:2014-02-26 16:03:06

标签: javascript json node.js stringify

我的服务返回非常大的JSON对象的响应 - 大约60MB。经过一些分析后,我发现它几乎一直在进行JSON.stringify()调用,用于转换为字符串并将其作为响应发送。我尝试过stringify的自定义实现,它们甚至更慢。

这对我的服务来说是一个瓶颈。我希望能够每秒处理尽可能多的请求 - 目前1个请求需要700毫秒。

我的问题是:
1)我可以优化响应部分的发送吗?有没有比对字符串化对象和发送响应更有效的方法?

2)使用异步模块并在单独的线程中执行JSON.stringify()会改善整体请求数/秒(假设在该呼叫上花费了90%以上的时间)?

2 个答案:

答案 0 :(得分:10)

你有两个选择:

1)找到一个JSON模块,它允许您流式传输stringify操作,并以块的形式处理它。我不知道这样的模块是否在那里,如果它不是你必须建立它。 编辑:感谢Reinard Mavronicolas在评论中指出JSONStream。对于不同的用例,我实际上已经把它放在我的后面,寻找类似的东西。

2)async不使用线程。您需要使用cluster或其他一些实际的线程模块将处理放入单独的线程中。需要注意的是,您仍在处理大量数据,使用线程获取带宽,但根据您的流量,您仍可能达到限制。

答案 1 :(得分:6)

一年后,这个问题为第一个问题提供了新的答案:yieldable-json lib。 如this talk by Gireesh Punathil (IBM India)中所述,此库可以评估60MB的JSON,而不会阻塞node.js的事件循环,让您接受新请求以提高吞吐量。

对于第二个,使用node.js 11 in the experimental phase,您可以使用辅助线程来提高Web服务器的吞吐量。