跳到内容

性能

一个测试,用于基准测试该模块相对于替代方案的性能。

启用缓存(默认情况下)并使用 8 核以上的机器,特别是那些具有较大 L1/L2 CPU 缓存的机器,可以期待更高的 libvips 性能。

相关的(解)压缩库的 I/O 限制通常会决定最大吞吐量。

竞争者

  • jimp v1.6.0 - 纯 JavaScript 图像处理。
  • imagemagick v0.1.3 - 仅支持文件系统,并且“已经很长时间没有维护”。
  • gm v1.25.1 - 完整功能的 GraphicsMagick gm 命令行工具的包装器,但“已被停用”。
  • sharp v0.34.0 / libvips v8.16.1 - 在 libvips 中禁用缓存,以确保公正的比较。

环境

AMD64

ARM64

任务:JPEG

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

注意:jimp 不支持 Lanczos 3,因此使用了双三次重采样。

结果:JPEG (AMD64)

模块输入输出ops/秒加速
jimpbufferbuffer2.351.0
imagemagickfilefile10.514.5
gmbufferbuffer11.675.0
gmfilefile11.755.1
sharpstreamstream60.7225.8
sharpfilefile62.3726.5
sharpbufferbuffer65.1527.7

结果:JPEG (ARM64)

模块输入输出ops/秒加速
jimpbufferbuffer2.131.0
imagemagickfilefile12.956.1
gmbufferbuffer13.536.4
gmfilefile13.526.4
sharpstreamstream46.5821.9
sharpfilefile48.4222.7
sharpbufferbuffer50.1623.6

任务:PNG

解压一个 2048x1536 RGBA PNG 图像,对 Alpha 通道进行预乘,使用 Lanczos 3 重采样将其调整为 720x540(如果可用),去预乘后再以 zlib 压缩级别 6 压缩为 PNG 并且不进行自适应过滤。

注意:jimp 不支持预乘/去预乘。

结果:PNG (AMD64)

模块输入输出ops/秒加速
gmfilefile8.661.0
imagemagickfilefile8.791.0
jimpbufferbuffer11.261.3
sharpfilefile27.933.2
sharpbufferbuffer28.693.3

结果:PNG (ARM64)

模块输入输出ops/秒加速
gmfilefile9.651.0
imagemagickfilefile9.721.0
jimpbufferbuffer10.681.1
sharpfilefile23.902.5
sharpbufferbuffer24.482.5

运行基准测试

需要 Docker。

Terminal window
git clone https://github.com/lovell/sharp.git
cd sharp/test/bench
./run-with-docker.sh