我正在使用 imagemin-mozjpeg,它使用 mozjpeg 二进制文件来压缩图像。
问题是我在 nodejs 网络服务器中使用它。
这就是它现在的工作方式:
我正在使用“请求”模块(fs.createReadStream)上传 JPEG 图像。
Multer 处理流并将其保存在缓冲区(内存存储)中。
然后将缓冲区传递给 imagemin 进行压缩。
然后将压缩缓冲区写入文件。(示例.jpg)
一切正常。
这里的问题是,对于每个请求,都会产生一个新的 mozjpeg 二进制子进程 cjpeg。
1 个子进程消耗 12.5 MB 内存(对于 .5 MB 文件)。
如果我同时有 50 个请求,则大约为 700 MB,因为对于 50 个图像,有 50 个子进程。
有没有办法可以限制子进程的数量?(该库正在使用“execa”模块)或仅生成 4-5 个子进程,它们对所有请求进行压缩。
谢谢
if (req.files.myimage[0].buffer) {
let fileNumber = filesUploaded++;
imagemin.buffer(req.files.myimage[0].buffer, {
plugins: [
imageminMozjpeg({ quality: 60, progressive: true })
]
})
.then(file => {
fs.writeFile(__dirname + '/uploads/' + uuidv4() + '.jpg', file, 'hex' , function () {
res.end("SUCCESS" + fileNumber.toString());
});
})
.catch(err => {
console.log(err);
res.end("FAILED");
});
}