自动图片优化
未优化的图片
使用常规 HTML 时,我们这样添加 Hero 图片:
但这意味着我们需要手动优化以下方面:
- 确保图片在不同屏幕尺寸上具有响应式表现
- 使用第三方工具或库优化图片
- 实现图片进入视口时的懒加载
Image 组件
Next.js 提供了 Image 组件,可以开箱即用地处理这些优化。
next/image
是 HTML img
元素的扩展,专为现代网页演进而生。
这意味着通过 next/image
可以自动实现:
- 尺寸调整
- 图片优化
- 支持现代格式(如浏览器支持的 WebP)
该组件能避免向小视口设备传输大尺寸图片,并允许 Next.js 适配未来的图片格式,为支持的浏览器提供相应服务。
自动图片优化适用于任何图片来源。即使图片托管在外部数据源(如 CMS),仍可进行优化。
自动图片优化如何工作?
按需优化
Next.js 不在构建时优化图片,而是在用户请求时按需优化。与静态站点生成器和纯静态方案不同,无论处理十张还是千万张图片,构建时间都不会增加。
懒加载图片
图片默认采用懒加载。视口外的图片不会影响页面速度,只有当图片进入视口时才会加载。
避免布局偏移
图片渲染始终遵循避免累积布局偏移 (CLS) 的原则。
使用 Image 组件
让我们使用 next/image
更新应用来展示 Hero 图片。height 和 width 属性应设置为期望渲染尺寸,并保持与源图片相同的宽高比。
打开 pages/index.js
文件,在文件开头添加从 next/image
导入 Image 的语句:
然后将 Hero 图片的 img
标签替换为 Image
组件:
页脚还有一个图片,同样进行替换:
最后,在 Chrome DevTools 中再次运行 Lighthouse 报告并对比结果。
延伸阅读
- Next.js: 自动图片优化文档
- Next.js:
next/image
API 参考