From 03b23f6e8c7b79e5d79f039b99813d9b047ff15b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Ali=20=C5=9Eahin?= Date: Mon, 25 Feb 2019 13:41:20 +0200 Subject: [PATCH] Fix #102 Efficient way to use buffer for temporary download data Memory usage is decreased --- controllers/DownloadController.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/controllers/DownloadController.js b/controllers/DownloadController.js index cd395bb..34b25d8 100644 --- a/controllers/DownloadController.js +++ b/controllers/DownloadController.js @@ -51,11 +51,27 @@ class DownloadController { res.header('Expires', '-1'); res.header('Pragma', 'no-cache'); if(!isNaN(parseInt(req.query.bufferSize)) && (parseInt(req.query.bufferSize)<=global.maxDownloadBuffer) &&(parseInt(req.query.bufferSize)>0)){ + let bufferAllocSize = 65536; + let remainingBuffer = req.query.bufferSize; + var bufferStream = new stream.PassThrough(); bufferStream.pipe(res); - var responseBuffer = new Buffer(parseInt(req.query.bufferSize)); + + let responseBuffer = new Buffer(parseInt(bufferAllocSize)); responseBuffer.fill(0x1020304); - bufferStream.write(responseBuffer); + + while (remainingBuffer !== 0) { + if(remainingBuffer <= bufferAllocSize){ + let responseBuffer = new Buffer(parseInt(remainingBuffer)); + responseBuffer.fill(0x1020304); + remainingBuffer = 0; + } else { + remainingBuffer -= bufferAllocSize; + } + + bufferStream.write(responseBuffer); + } + bufferStream.end(); } else{