【发布时间】:2017-10-27 01:44:06
【问题描述】:
我正在尝试找到一种内存效率更高的方法来在 nodejs 中发出多个 JSON 请求。我的应用程序进行了大约 500-1000 次调用,每次调用返回大约 1mb 的 JSON 数据。
目前我正在使用 Axios 发出请求,并且我正在将大约 1000 个请求推送到一个数组中以传递给 Axios。
例如。
let axiosPromises = [];
let baseURL = "http://someurl.example.com/?";
let requests = ['page1', 'page2', 'page3', ... 'page1000'];
for (let j = 0; j < requests.length; j++) {
let axiosPromise = axios.get(baseURL + requests[j], {
timeout: 300000
});
axiosPromises.push(axiosPromise);
}
axios.all(axiosPromises).then((response) => {
// Code to place JSON responses into an array of objects
}
由于所有这些请求加起来返回大约 900mb 的 JSON 数据,我看到节点的内存爆破到 ~900mb。我想知道如何以更具可扩展性/内存效率更高的方式来处理它。
在 node.js 中读取/写入大文件等时,我已经阅读了有关使用流来提高内存效率的信息。我想知道在这种情况下推荐的方法是什么,在这种情况下发出了数千个 Web 请求,并且响应存储在一个对象数组中。
非常感谢您的帮助!
【问题讨论】:
-
队列是你的朋友。
-
@RobertMoskal 感谢您的回复。你以前用过这种方法吗?我想知道您是否有我可以调查的代码示例或推荐的排队模块。再次感谢
-
感谢@RobertMoskal - 我已经对队列进行了一些测试,并确定这无助于减少内存占用。无论我运行 1 个并发请求还是 100 个并发请求,都使用相同数量的内存(当我限制并发时,它需要更长的时间来累积)。我一直在想,原因可能是 JSON 响应的大小,并且这些响应存储在内存中?当然必须有更好的方法来处理这个我没有考虑过的,我对 nodejs 比较陌生。
-
您会在回复回复后分享您对回复的处理方式吗?如果您正在累积所有响应,那么无论有没有队列,内存都是一样的
标签: node.js performance memory axios