Node.js应用程序性能

问题描述:

我目前有一个坐在Azure上的node.js脚本,它通过下载URL链接获取文件并通过base64对其进行编码,然后将此base64编码文件发送回请求源。我遇到的问题是基于性能的。下面的脚本在某些情况下通过运行时间超过30秒来超时一个单独的应用程序。其中一个超时问题的文件大小小于MB。有任何想法吗?Node.js应用程序性能

脚本:

const express = require('express'); 
const bodyParser = require('body-parser'); 


const https = require('https'); 
const fs  = require('fs'); 
const request = require('request'); 
const util = require('util'); 
const port = process.env.PORT || 3000; 

var app  = express(); 


app.use(bodyParser.json()); 



app.post('/base64file', (req, res) => { 


    var fileURL = req.body.fileURL; 
    var listenerToken = req.body.listenerToken; 

    var testingData = { 
     fileURL: fileURL, 
     listenerToken: listenerToken 
    }; 



    /* 
     Make sure correct token is used to access endpoint.. 
    */ 
    if(listenerToken !== <removedforprivacy>) { 
     res.status(401); 
     res.setHeader('Content-Type', 'application/json'); 
     res.send(JSON.stringify({ error: 'You are not authorized'})); 
    } else if (!fileURL){ 
     res.status(400); 
     res.setHeader('Content-Type', 'application/json'); 
     res.send(JSON.stringify({ error: 'The request could not be understood by the server due to malformed syntax.'})); 
    } else { 

     https.get(fileURL, function(response) { 
      var data = []; 


      response.on('data', function(chunk) { 
       data.push(chunk); 
      }).on('end', function() { 
       //build the base64 endoded file 
       var buffer = Buffer.concat(data).toString('base64'); 
       //data to return 
       var returnData = { 
        base64File: buffer 
       }; 

       if(buffer.length > 0) { 
        res.setHeader('Content-Type', 'application/json'); 
        res.status(200); 
        res.send(JSON.stringify(returnData)); 
       } else { 
        res.setHeader('Content-Type', 'application/json'); 
        res.status(404); 
        res.send(JSON.stringify({ error: 'File URL not found.'})); 
       } 
      }); 
     }); 

    } 
}); 


app.listen(port, () => { 
    console.log('Server is up and running ' + port); 
}); 
+0

一个想法:你错过了错误处理。如果你在'https.get()'上得到一个错误,你将永远不会发送一个响应,并且原始请求会超时。 – jfriend00

+0

@ jfriend00我会检查你的建议作为解决方案 - 这就是它。随意张贴下面,我会添加它作为答案 – RH8765

一个想法:你缺少的错误处理。

如果您在https.get()上遇到错误,您将永远不会发送回复,并且原始请求会超时。