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

时间:2015-06-18 03:05:03

标签: javascript node.js image-processing proxy

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

我还想支持图像处理任务,例如裁剪,调整大小,旋转等。为此,我使用了imagemagick。但我明白图像处理是一项繁重的任务会阻塞线程。即使我将CDN放在节点服务器前面,它仍然会在很多负载下崩溃。

这项任务的最佳安排是什么?节点中是否有可能的解决方法?我应该将所有代码切换到其他技术吗?或者我应该将代理部分保留在其他地方的节点和操作部分中吗?

3 个答案:

答案 0 :(得分:1)

在启动单独的ImageMagick进程以使用https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx操作图像时,在Node.js中执行请求和响应。通过这种方式,当ImageMagick操纵图像时,Node.js不会阻塞。

答案 1 :(得分:0)

Node.js应该能够处理它。

即使图像处理是一项繁重的任务,您也不必阻止该线程使其正常工作。有一个异步框架将图像传递给imagemagick,让它通过回调通知node.js然后再回到客户端。

此外,如果您需要大量负载,可以让node.js服务器在多个节点上运行,并将nginx作为负载均衡器。

答案 2 :(得分:0)

不要错过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) 如果你想要代理,我希望它有用。