我如何让 Sharp 提速 950 倍(以及在 Bun 加入 Anthropic 后为何重要)
发布: (2025年12月14日 GMT+8 18:27)
3 min read
原文: Dev.to
Source: Dev.to
Sharp 的问题
Sharp 是一个经过实战检验的图像库,被成千上万的生产环境应用使用,但它在现代无服务器和高并发环境中存在多项限制,使用起来非常痛苦:
- 开箱即用不支持原生 HEIC
- 需要从源码构建 libvips
- AWS Lambda 需要自定义 Docker 层
- CI/CD 流程复杂
- 元数据提取慢(需要解码整张图片)
- 在并发负载下表现沉重,未针对无服务器进行优化
这些问题导致图像密集型应用处理速度慢、服务器成本高、用户体验差。
介绍 bun-image-turbo
一个基于 Rust 的图像处理库,从第一天起就为 Bun 和 Node.js 而生。
- 100 % 开源,MIT 许可证,永久免费
- 一条命令即可安装:
npm install bun-image-turbo
- 无需自定义构建或编译
- 包含原生 HEIC 支持
基准测试
| 操作 | Sharp | bun-image-turbo | 提升 |
|---|---|---|---|
| WebP 元数据 | 3.4 ms | 0.004 ms | 950× 更快 |
| JPEG 元数据 | 0.1 ms | 0.003 ms | 38× 更快 |
| PNG 元数据 | 0.08 ms | 0.002 ms | 40× 更快 |
| 50 并发操作 | 160 ms | 62 ms | 2.6× 更快 |
| 转换流水线 | 19.1 ms | 12.2 ms | 1.6× 更快 |
| HEIC 支持 | ❌ (自定义构建) | ✅ 原生 | — |
元数据提取
Sharp 为读取尺寸会解码整张图片:
10 MB image → decode 10 MB → extract width/height → done (3.4 ms)
bun-image-turbo 只读取头部字节:
10 MB image → read ~100 bytes header → extract width/height → done (0.004 ms)
缩小策略
对于大幅度缩小,bun-image-turbo 使用逐步减半并在每一步采用最佳滤镜:
| 缩放因子 | 算法 |
|---|---|
| > 4× 缩小 | Box(快速,平均效果好) |
| 2–4× 缩小 | Bilinear(快速,质量可接受) |
- GitHub:
- npm:
你将获得的内容
| 功能 | 好处 |
|---|---|
| 元数据提取 | 950× 更快 |
| 并发操作 | 2.6× 更快 |
| 转换流水线 | 1.6× 更快 |
| HEIC 支持 | 原生,无需自定义构建 |
| Blurhash | 内置 |
| 价格 | 永久免费 |
入门指南
npm install bun-image-turbo
如有疑问,请在仓库的 issue 中留言。如果觉得有帮助,请考虑给仓库加星 ⭐。