测试该模块相对于替代模块性能的基准。

竞争者

  • jimp v0.16.0-纯JavaScript中的图像处理。提供三次三次插值。
  • mapnik v4.5.2-虽然主要是地图渲染器,但Mapnik包含位图图像实用程序。
  • imagemagick v0.1.3-仅支持文件系统,并且“长期未维护”。
  • gm v1.23.1-GraphicsMagick的gm命令行实用程序的全功能包装。
  • @squoosh/lib v0.4.0 -传输到WebAssembly的图像库,包括GPLv3代码。
  • @squoosh/cli v0.7.2 -围绕 @squoosh/lib,的命令行包装器,通过生成进程来避免GPLv3。
  • sharp v0.30.0 / libvips v8.12.2 - libvips 中禁用缓存以确保公平比较

任务

解压缩2725x2225 JPEG图像,使用Lanczos 3重采样(如果有)将大小调整为720x588,然后以“质量”设置为80压缩为JPEG。

测试环境

  • AWS EC2 eu-west-1 c5ad.xlarge (4x AMD EPYC 7R32)
  • Ubuntu 21.10 (ami-0258eeb71ddf238b3) Ubuntu 21.10(ami-0258eeb71ddf238b3)
  • Node.js 16.13.2

结果

模组 输入 输出 运算/秒 加速
jimp buffer buffer 0.84 1.0
squoosh-cli file file 1.08 1.3
squoosh-lib buffer buffer 1.85 2.2
mapnik buffer buffer 3.45 4.1
gm buffer buffer 8.60 10.2
gm file file 8.66 10.3
imagemagick file file 8.79 10.5
sharp stream stream 28.90 34.4
sharp file file 30.08 35.8
sharp buffer buffer 30.42 36.2

如果启用了缓存(默认)并使用8 + 个核心机器,特别是那些 L1/L2 CPU 缓存较大的机器,那么 libvips 的性能将会更高。

相关(解)压缩库的 i/o 限制通常将决定最大吞吐量。

运行基准测试

需要 ImageMagick,GraphicsMagick 和 Mapnik:

  1. brew install imagemagick
  2. brew install graphicsmagick
  3. brew install mapnik
  1. sudo apt-get install build-essential imagemagick libmagick++-dev graphicsmagick libmapnik-dev
  1. sudo yum install ImageMagick-devel ImageMagick-c++-devel GraphicsMagick mapnik-devel
  1. git clone https://github.com/lovell/sharp.git
  2. cd sharp
  3. npm install --build-from-source
  4. cd test/bench
  5. npm install
  6. npm test