GraphicsMagick用于Node.js(GM模块)的性能

使用GM npm模块,我发现GraphicsMagick对Node.js的性能令人惊讶。

我有一个简单的16像素X 16像素icon16.png(320字节)。 我简单地把这个PN​​G的缓冲区输出到一个使用GM的新缓冲区(换句话说,我只是调用通用图像而不经过处理就可以find性能问题)。

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。

gm模块调用一个命令行工具。 你可能会看看使用graphicsmagick2,而这是一个实际的绑定到graphicsmagick库。 不幸的是,没有文档,所以你必须阅读它的源代码(这不是太长)。

您可以尝试比较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 == 

在这个例子中,你可以看到,比帆布模块是最好的,关于image processing的速度(作者的本地计算机上每秒〜4 imgages)