第 5 章:静态资源与图片优化

第 5 章:静态资源与图片优化

在 Web 开发中,图片加载优化 是影响性能和体验的关键因素。Next.js 提供了多个工具用于处理静态资源与图片,极大提升了开发效率和页面性能。


5.1 使用 public/ 文件夹

Next.js 项目根目录下的 public/ 文件夹可用于存放静态资源,如图片、字体、文档等。

📁 结构示例:

bash 复制代码
public/
├── logo.png
├── images/
│   └── banner.jpg
└── docs/
    └── resume.pdf

✅ 使用方式:

  • 访问地址:/logo.pnghttp://localhost:3000/logo.png
  • 引用图片(传统方式):
ini 复制代码
jsx
复制编辑
<img src="/images/banner.jpg" alt="横幅" />

⚠️ 注意:路径不需要加 public/ 前缀,直接从根路径 / 开始写。


5.2 使用 next/image 优化图片

Next.js 内置了 Image 组件,它能自动处理图片:

  • 懒加载(Lazy Loading)
  • 响应式尺寸
  • 自动格式转换(如 WebP)
  • CDN 支持
  • 提升 LCP 性能指标(对 SEO 有益)

✅ 安装依赖(如使用远程图片):

bash 复制代码
npm install sharp

本地开发可选;Vercel 部署自动支持。


5.3 示例:使用 Image 组件

jsx 复制代码
import Image from 'next/image';
import banner from '@/public/images/banner.jpg';

export default function Home() {
  return (
    <div>
      <h1>欢迎来到我的博客</h1>
      <Image
        src={banner}
        alt="博客横幅"
        width={800}
        height={400}
        priority={true}
      />
    </div>
  );
}

参数说明:

属性 说明
src 本地图片路径或远程图片 URL
alt 图片描述,推荐写,有助于 SEO
width / height 固定尺寸(必填或使用 fill
priority 提前加载图片,提升首屏性能
placeholder="blur" 模糊加载效果(仅支持本地图片)

5.4 响应式图片尺寸

可以使用 layout="responsive"fill + 父容器定位,自动适应不同屏幕:

jsx 复制代码
<Image
  src="/images/hero.jpg"
  alt="Hero 图"
  width={1200}
  height={600}
  layout="responsive"
/>

或使用 fill

jsx 复制代码
<div style={{ position: 'relative', width: '100%', height: '400px' }}>
  <Image src="/images/bg.jpg" alt="背景图" fill style={{ objectFit: 'cover' }} />
</div>

5.5 使用远程图片(如 CDN)

使用远程图片时,需要在 next.config.js 中配置允许的域名:

js 复制代码
// next.config.js
module.exports = {
  images: {
    domains: ['images.unsplash.com', 'cdn.example.com'],
  },
};
jsx 复制代码
<Image
  src="https://images.unsplash.com/photo-123"
  width={600}
  height={400}
  alt="远程图片"
/>

5.6 和传统 <img> 的区别

特性 <img> next/image
懒加载 ❌ 手动实现 ✅ 默认启用
响应式 ❌ 需 CSS 控制 ✅ 自适应布局
图片格式转换 ❌ 无 ✅ 支持自动转 WebP
CDN 优化 ✅ 支持
性能表现 普通 极优(提升 LCP)

🚀 建议:除了图标类小图,其他都使用 Image 替代 <img>


5.7 其他静态资源使用(字体、PDF、音频)

  • 字体文件(.woff/.ttf)放入 public/fonts/
  • PDF 文件:<a href="/docs/resume.pdf" download>下载简历</a>
  • 音频 / 视频资源也可放入 public/media/

✅ 小结

内容 方法 / 技巧
静态图片引用 放入 public/,通过 /xxx.jpg 访问
图片优化 使用 next/image,支持懒加载、自适应、WebP
远程图片 配置 next.config.js 中的 images.domains
响应式图片 使用 layout="responsive"fill 模式
传统 <img> 替代 尽量使用 Image 组件以提升性能
相关推荐
小雨下雨的雨2 分钟前
鸿蒙PC用Electron框架——Canvas蜡笔抖动效果实现技术深度解析
前端·javascript·华为·electron·鸿蒙系统
ZC跨境爬虫3 分钟前
跟着 MDN 学CSS day_49:定位实例练习从入门到精通
前端·css·学习
前端小万3 分钟前
用AI两小时开发上架的小程序,单日新增用户173
前端·微信小程序
道友可好7 分钟前
Spec Kit:GitHub 官方出品,规范即代码
前端·人工智能·后端
木斯佳11 分钟前
前端八股文面经大全:磐松私募-27届前端实习一面(2026-05-27)·面经深度解析
前端
薛先生_09915 分钟前
声明式导航(route-link)(跳转传参)
前端
郑州光合科技余经理20 分钟前
海外版外卖系统:如何快速搭建国际化外卖平台
java·开发语言·前端·人工智能·小程序·系统架构·php
小雨下雨的雨27 分钟前
蜡笔小画家鸿蒙PC用Electron框架 - 儿童学画蜡笔画技术实现详解
前端·javascript·华为·electron·前端框架·交互·鸿蒙系统
天蓝色的鱼鱼27 分钟前
别只拿 Playwright 写测试,这三个野路子用法才是真香
前端
SoaringHeart30 分钟前
Flutter进阶|源码修改:DecorationImage 添加网络图片占位图
前端·flutter