我构建了一个图像交付应用程序,它可以提供图像并按需调整大小/更改图像扩展名。
我使用 Express 进行路由,使用 Sharp 处理图像。
当请求具有新大小/扩展名的图像时,我想将生成的图像保存在文件系统上,并在下次使用相同参数(某种缓存)请求相同图像时检索保存的图像。
我构建的一切工作正常,但在生产中 CPU 使用率很高。我怀疑这是因为我在将图像res.sendFile()
保存到文件系统后返回了图像。
目前这是我的工作流程:
- 如果图像已使用所需参数(
fs.access()
)保存,我会检查文件系统 - 如果存在,我
res.sendFile
本地图像路径 - 如果它不存在,我使用 Sharp 生成它,我将它保存在文件系统中,然后我
res.sendFile
生成的图像路径
我阅读res.sendFile
不使用系统 sendfile 调用,并且 CPU 很重。
我该如何更换它?
这是我在谷歌搜索时发现的:
- 当我生成新图像时,我可以
res.send()
使用 Sharp 生成的缓冲区而不是res.sendFile
保存的图像 - 当图像已经保存时,也许我应该使用静态快速中间件(http://expressjs.com/en/starter/static-files.html)但我不知道如何动态调用它并告诉它图片路径(基于请求 URL 中提供的参数)。