Next.js 图片怎么这么贵?!——Cloudflare 原生 Image Resizing 避坑与最佳实践

Next.js 图片怎么这么贵?!——Cloudflare 原生 Image Resizing 避坑与最佳实践

💡 原文中文,约5600字,阅读约需14分钟。
📝

内容提要

本文探讨了在使用 Next.js 和 Cloudflare 时,图片优化导致的高额费用问题。通过分析 HTTP Header,发现默认配置缺乏缓存控制,导致每次请求都需重新处理图片。作者建议使用自定义加载器和 Cloudflare 的原生图片调整服务,以提高缓存效率并降低成本。最终,通过优化配置,成功提升了图片请求的缓存命中率,显著减少了计算费用。

🎯

关键要点

  • Next.js 的 <Image> 组件在 Cloudflare 上的默认配置导致高额费用,缺乏缓存控制。

  • HTTP Header 分析显示,默认图片优化没有 Cache-Control,导致每次请求都需重新处理图片。

  • 尝试在项目中添加缓存头无效,Next.js 默认的图片处理端点无法被有效拦截和缓存。

  • 建议使用自定义加载器和 Cloudflare 的原生图片调整服务,以提高缓存效率。

  • 通过优化配置,成功提升了图片请求的缓存命中率,显著减少了计算费用。

  • 开启 Cache Reserve 功能可以避免缓存被淘汰,从而减少不必要的重算。

  • 最终优化后,图片请求的 Header 显示缓存命中,计算资源消耗降至最低。

延伸问答

为什么使用 Next.js 的 <Image> 组件在 Cloudflare 上会导致高额费用?

因为默认配置缺乏缓存控制,导致每次请求都需重新处理图片,从而增加了计算费用。

如何优化 Next.js 图片请求以降低 Cloudflare 的费用?

建议使用自定义加载器和 Cloudflare 的原生图片调整服务,以提高缓存效率。

HTTP Header 中缺少 Cache-Control 会有什么影响?

缺少 Cache-Control 会导致浏览器每次请求都重新加载图片,无法利用缓存。

如何实现 Cloudflare 的 Cache Reserve 功能?

开启 Cache Reserve 功能可以避免缓存被淘汰,从而减少不必要的重算。

使用自定义加载器的步骤是什么?

在项目中创建 image-loader.ts 文件,定义加载器逻辑,并在 next.config.ts 中配置使用自定义加载器。

优化后,如何判断图片请求的缓存效果?

可以通过查看 HTTP Header 中的 Cache-Control 和 cf-cache-status 来判断缓存命中情况。

➡️

继续阅读