【问题标题】:NodeJS JSON Axios Request - Memory EfficiencyNodeJS JSON Axios 请求 - 内存效率
【发布时间】: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


【解决方案1】:

将响应数据写入磁盘而不是将其保存在内存中

const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
const axios = require('axios');
const TMP_DIR = fs.mkdtempSync(__dirname + '/');

const makeRequest = async function(page) {
  const baseUrl = 'http://someurl.example.com/?'
  const resp = await axios.get(baseUrl + page);
  const file = path.join(TMP_DIR, page)

  return promisify(fs.writeFile)(file, resp.data);
}


const main = async function() {
  const pages = ['page1', 'page2', 'page3'];
  for (let i = 0; i < pages.length; i++) {
    await makeRequest(pages[i])
 }
}

main()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2021-05-03
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    相关资源
    最近更新 更多