node.js是图像代理和操作任务的理想select吗?

我有一个任务,可以从网上的多个来源检索每个图像。 我使用节点作为代理服务,以便在收到图像请求时,节点内部点击可用于图像的3-4个源,并返回第一个响应的源。

我也想支持像修剪,resize,旋转等image processing任务。为此,我使用imagemagick。 但我明白,image processing是一项繁重的任务将阻止线程。 即使我把CDN放在节点服务器前面,它仍然会在很多负载下崩溃。

这样的任务最好的安排是什么? 在节点中是否有可能的解决方法? 我应该把所有的代码切换到其他技术吗? 还是应该把代理部分放在其他地方的节点和操作部分?

在Node.js中执行请求和响应,同时启动单独的ImageMagick进程以使用subprocess来操作图像。 通过这种方式,在ImageMagick处理图像时Node.js不会被阻塞。

Node.js应该能够处理它。

即使image processing是一个繁重的任务,你不必阻止线程,使其工作。 有一个asynchronous框架将图像传递给imagemagick,让它通过callback通知node.js,然后返回给客户端。

另外,如果您预计会有很多负载,那么可以使用nginx将node.js服务器作为负载平衡器运行在多个节点上。

不要错过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)我希望这将有助于如果你想代理或不。