Next.js 和 imgix 图像优化不知道它的大小

Next.js and imgix image optimisation without knowing its size

我需要在静态构建的 Next.js 网站上渲染图像,我想根据当今的最佳实践来完成。

我看到 Next.js 包括 next/Image,它负责大多数开箱即用的优化。鉴于我不会以多种尺寸保存图像,我正在寻找 imgix 来为我做这件事。

我是如何设想这个设置的,我将所有图像转储到一个 S3 存储桶中(我只知道文件名),imgix 将使用该存储桶。给定文件名和宽度要求,然后我会把它留给 next/Image 通过其 imgix 加载器调整大小和渲染图像。

我感到困惑的地方是,Next.js 文档 mention 宽度和高度都应该事先知道。如果我只向 imgix 提供宽度并让它执行其调整大小魔法,我怎么知道高度?

我确定我在这里遗漏了一些明显的东西,但是非常感谢您的指点。

一点免责声明,我在 imgix 工作。

希望我能通过概述您提到的某些事情的责任来澄清:

  • Next.js 负责 text/html/dom manipulation/more(即在 markup/html/etc 中放置具有适当属性的 img 标签。)

  • imgix 负责所有图像处理(即与您描述的差不多,s3 => request a specific size => done

  • devs/designers负责页面布局(例如css,总体html结构)

Next.js 文档中的 linked section 很好地解释了布局偏移以及如何避免它(这对您来说可能是也可能不是问题)。

图片的高度(和宽度)由页面布局决定。例如,您设计了一个显示统一大小图像的图库(即每个图像上方为行顶部,下方为行底部,left/right 为列)。

How would I know the height if I only provide the width to imgix and let it do its resize magic?

了解图像尺寸 are/should 的一种方法是让设计师告诉您它们应该是什么。我们中的许多人都没有那么幸运,所以如果 你是设计师 ,一旦你对你的布局感到满意,你可以检查渲染图像的 width/height 然后使用它为 Next.js 组件提供 width/height 属性的信息。

他们还指定了第三个选项,其中涉及使用“layout="fill" 使图像扩展以填充其父元素。”如果您选择第三个选项,请记住“使用 layout='fill' 时,父元素必须具有 position: relative”。“=17=”

同样,这都是在避免布局偏移的情况下进行的。如果你指定图像的宽度到 imgix 高度将根据原始图像的纵横比计算。您还可以指定 aspect ratio 以及其他参数以获得所需的效果。

据我在文档 here and know from my projects, Next.js already does this using sharp 内部阅读,因此在使用 next/image 组件时始终为每个设备提供正确大小的图像。无需拥有不同尺寸的图像。

文档中的相关部分

Image 组件内置的一些优化包括:

  1. 改进的性能:始终使用现代图像格式为每个设备提供正确大小的图像。

  2. 视觉稳定性:自动防止累积布局偏移。

  3. 更快的页面加载:图像仅在进入视口时加载,带有可选的 blur-up 占位符

  4. 资产灵活性:On-demand 调整图像大小,即使对于存储在远程服务器上的图像也是如此

我最终在构建时上传到 imgix,这也会 return 我图像的尺寸。根据这些我计算出比率,并根据该比率和所需的宽度,我也可以计算出高度。