Я делаю повторные запросы к сайту, используя узел, и пытаюсь отладить возникающую утечку памяти. Используя node --inspect server.js
, я смог догадаться, что это код, вызывающий проблему (это раздел Обещания, отсюда и «resol ()» в конце):
response.on('end', function () {
//store response in variable
bufferData = Buffer.concat(bufferData);
try {
var bufferDataDecoded = thisProtocol.FeedMessage.decode(bufferData).entity;
} catch (e) {
console.log("Protocol Error: "+e);
resolve([0]);
}
var timeNow = new Date();
var bufferDataMapped= bufferDataDecoded
.map(obj=> {
return obj.item_update
.map(itemu=>{
if ((itemu.quantityOld-itemu.quantityNew) > 0 ){
return {
"resultType": bufferType
,"itemID": itemu.itemID
,"quantityOld": itemu.quantityOld
,"quantityDiff": itemu.quantityNew - itemu.quantityOld
};
}
else return false;
})
});
var bufferDataMapped2= [].concat.apply([],bufferDataMapped);
resolve(bufferDataMapped2);
});
От глядя на журнал сравнения, выходящий из --inspect и просматриваемый с помощью Chrome DevTools, выглядит, что node.js сохраняет эти объекты следующим образом:
{
"resultType": bufferType
,"itemID": itemu.itemID
,"quantityOld": itemu.quantityOld
,"quantityDiff": itemu.quantityNew - itemu.quantityNew
};
... каждый раз, когда программа запускается, и не удаляя старые после его запуска, что быстро способствует переполнению памяти. Я создал переменные локально в .map (), чтобы избежать этой проблемы, и не уверен, что делаю неправильно. Есть идеи, почему это будет происходить?