优化 post 调用以节省性能

Optimze post call to save performnace

我有 Node 应用程序,它正在从 rest API 请求中获取 zip 文件。我对大小为 2MB 的文件使用以下代码,它需要将近 10 秒,这里有提高性能的方法吗?

文件应该被提取并保存在本地系统中...

这段代码工作正常,除了性能...

`1. if the request should invoked from client and its take to long when I should send the response? if I'll wait until the process finish this can take 10 sec...

2.Should I use promise in this case if yes can you provide example please with the following code(blue bird,q...)

3.there is a way to optimize somehow the performance

 var unzip = require('unzip');
    app.post('/', function(req, res) {
        var ext = unzip.Extract({
            path: 'C://myFolder'
        }).on('close', function() {
            res.sendStatus(200);
        }).on('error', function(err) {
            // res.sendStatus(500);
        });
        req.pipe(ext);
    });

代码不是问题,当我 运行 提取一个 7.5MB 的 ZIP 文件需要 750 毫秒的确切代码时。我用这个来计时:

app.post('/', function(req, res) {
  console.time('unzip');
  var ext = unzip.Extract({ path: ... }).on('close', function() {
    console.timeEnd('unzip');
    res.sendStatus(200);
  }).on('error', function(err) {
    console.timeEnd('unzip');
    res.sendStatus(500);
  });
  req.pipe(ext);
});

正在上传文件:

$ ls -al test.zip
-rw-rw-r-- 1 robert wheel 7553635 Jul 17 09:31 test.zip
$ curl -XPOST localhost:3012 --data-binary @test.zip

这是在 Macbook Pro 上。

你没有说你是如何精确地计时代码的,但我的猜测是,从客户端开始上传到收到响应之间需要 10 秒,这会引入很多额外的变量(速度上传、网络连接、Express 应用中的特定中间件等)。

运行 提取代码与 Express 完全分开,看看这是否真的是瓶颈。这是一个简单的独立脚本来测试:

var fs    = require('fs');
var unzip = require('unzip');

console.time('unzip');
fs.createReadStream('test.zip').pipe(unzip.Extract({ path : ... })).on('close', function() {
  console.timeEnd('unzip');
});

如果一个 2MB 的文件需要 10 秒,我会认为您的硬件性能严重不足,无法通过 Node.js 解决。