gpt4 book ai didi

node.js - Node.js/Express 中的流式传输/管道 JSON.stringify 输出

转载 作者:IT老高 更新时间:2023-10-28 23:15:57 25 4
gpt4 key购买 nike

我有一个场景,我需要从我的 Node.js/Express RESTful API 返回一个非常大的对象,并转换为 JSON 字符串。

res.end(JSON.stringify(obj));

但是,这似乎不能很好地扩展。具体来说,它在我的测试机器上运行良好,有 1-2 个客户端连接,但我怀疑当许多客户端同时请求大型 JSON 对象时,此操作可能会占用 CPU 和内存。

我四处寻找异步 JSON 库,但 the only one I found似乎有问题(具体来说,我得到一个 [RangeError])。不仅如此,它还以一大块的形式返回字符串(例如,整个字符串调用一次回调,这意味着内存占用不会减少)。

我真正想要的是 JSON.stringify 函数的完全异步管道/流式传输版本,这样它可以在将数据直接打包到流中时写入数据......从而节省了我的内存占用和消耗CPU 以同步方式。

最佳答案

理想情况下,您应该按自己的方式流式传输数据,而不是将所有内容都缓冲到一个大对象中。如果无法更改,则需要将 stringify 分解为更小的单元,并允许主事件循环使用 setImmediate 处理其他事件.示例代码(我假设主对象有很多顶级属性并使用它们来拆分工作):

function sendObject(obj, stream) {
var keys = Object.keys(obj);
function sendSubObj() {
setImmediate(function(){
var key = keys.shift();
stream.write('"' + key + '":' + JSON.stringify(obj[key]));
if (keys.length > 0) {
stream.write(',');
sendSubObj();
} else {
stream.write('}');
}
});
})
stream.write('{');
sendSubObj();
}

关于node.js - Node.js/Express 中的流式传输/管道 JSON.stringify 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13503844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com