我发现使用GM npm模块的GraphicsMagick对Node.js的性能出乎意料地缓慢。
我有一个简单的16px X 16px图标,名为icon16.png(320字节)。我只是使用这个PNG的缓冲区并使用GM将其输出到新的缓冲区(换句话说,我只是调用GM并传递图像而不进行操作以找到性能问题)。
var timeStart = parseInt(Date.now());
var newBuffer = gm(icon16buffer, 'icon16.png')
//.resize(8, 8)
.toBuffer(function (err, buffer) {
if (err) {
next();
}
else {
console.log(parseInt(Date.now()) - timeStart);
send(200, buffer);
}
});
};
这需要175毫秒(即console.log输出为175)。为什么这么久?每次都必须从磁盘加载C ++ GraphicsMagick库吗?注意:我在Joyent上使用SmartOS。
答案 0 :(得分:2)
gm
模块调用命令行工具。您可能会使用graphicsmagick2来代替,这是对graphicsmagick库的实际绑定。不幸的是没有文档,所以你必须阅读它的来源(这不会太长)。
答案 1 :(得分:1)
您可以尝试比较Node.js模块以进行图像处理 - https://github.com/ivanoff/images-manipulation-performance
比较示例:
Found images:
4198671-green-sea-view.jpg
Beautiful-Sea-Pier-In-Chile-Hdr-Wide-Desktop-Background-Wallpapers-Beautiful-Sea-Wallpaper-.jpg
Bluestone-valley-view_-_Virginia_-_ForestWander.jpg
Found modules: canvas.js, gm-imagemagic.js, gm.js, lwip.js
== START ==
canvas.js : 4.001 img/sec; done in 7.498536 sec; minCPUidle: 96%; minFreeMem: 283Mb; MaxLoadAvg: 1.48
gm-imagemagic.js : 1.206 img/sec; done in 24.88003 sec; minCPUidle: 96%; minFreeMem: 456Mb; MaxLoadAvg: 1.59
gm.js : 1.536 img/sec; done in 19.528429 sec; minCPUidle: 96%; minFreeMem: 490Mb; MaxLoadAvg: 1.84
lwip.js : 0.406 img/sec; done in 73.891623 sec; minCPUidle: 96%; minFreeMem: 157Mb; MaxLoadAvg: 1.56
== DONE ==
在这个例子中,您可以看到, canvas 模块是最好的,关于图像处理的速度(在作者的本地计算机上每秒约4个imgages)