我目前正在使用Next.js和用于图像呈现的Next/Image组件.我一直在使用它来优化应用程序中的图像加载,但我对它在幕后如何工作的技术细节很感兴趣.具体地说,我想知道它在优化过程中是否进行了任何API调用.

到目前为止,我的理解是:

  • Next/Image提供延迟加载、响应图像和格式 Select 等功能,以优化图像加载.
  • 它在构建过程中生成不同大小和格式的多个版本的图像.
  • 它根据浏览器支持 Select 最合适的图像格式.
  • 默认支持延迟加载,您可以指定响应图像的尺寸.

然而,我找不到关于Next/Image在这个优化过程中是否进行任何API调用的信息.我的目标是更深入地了解它的内部工作原理.任何关于这一主题的见解或资源都将不胜感激.

推荐答案

当您有如下代码时:

<Image width={180} height={37} src="/test.jpg" />

呈现组件时,默认加载器会将src url更改为/_next/image?url=/test.jpg&w=384&q=75,进而包含优化所需的所有参数,如质量和宽度.在服务器端,NextJS将使用sharp对图像进行优化和裁剪/调整大小.然后缓存这些优化的映像,以便对同一映像的后续请求不需要再次优化它.如果你在Vercel上托管,它将使用Vercel自己的图像优化服务.

请注意,也可以将图像优化设置为custom loader.这将允许您使用任何您想要的图像优化服务.定制加载器的实现只需给图像组件一个函数,该函数获取src、宽度、质量并返回加载优化图像的url.通常,您将质量和宽度作为url参数,就像默认加载程序所做的那样.

const imageLoader = ({ src, width, quality }) => {
  return `https://example.com/${src}?w=${width}&q=${quality || 75}`
}

Javascript相关问答推荐

创建1:1比例元素,以另一个元素为中心

仅在React和JS中生成深色

仅圆角的甜甜圈图表

通过在页面上滚动来移动滚动条

在React中获取数据后,如何避免不必要的组件闪现1秒?

Google Apps脚本中的discord邀请API响应的日期解析问题

拖放仅通过 Select 上传

如何从Intl.DateTimeFormat中仅获取时区名称?

如何在coCos2d-x中更正此错误

确保函数签名中的类型安全:匹配值

如何使用JS创建一个明暗功能按钮?

使用NextJS+MongoDB+Prisma ORM获取无效请求正文,无法发布错误

TinyMCE 6导致Data:Image对象通过提供的脚本过度上载

如何防止ionic 输入中的特殊字符.?

传递方法VS泛型对象VS事件特定对象

Phaser3 preFX addGlow不支持zoom

如何使用Cypress在IFRAME中打字

Django模板中未加载JavaScript函数

如何在Reaction中设置缺省值, Select 下拉列表,动态追加剩余值?

react :图表负片区域不同 colored颜色