脚本文件
- 长期缓存:对于不常变动的第三方脚本(如 React、Next.js 核心库等),利用
next.config.js
中的 assetPrefix
配合 CDN,并设置较长的缓存时间(如一年)。例如:
module.exports = {
assetPrefix: 'https://your-cdn.com',
}
- 版本控制:对于自定义脚本,通过文件名哈希的方式,当文件内容改变时,文件名也会改变,从而突破缓存。Next.js 会自动对构建输出的静态资源文件名添加哈希后缀。例如
main.[hash].js
,这样当脚本更新时,浏览器会获取新的文件,旧版本仍可在缓存中服务其他用户。
样式表
- 缓存策略:同脚本文件类似,对于全局样式表和第三方样式库,设置较长的缓存时间。例如通过 CDN 部署样式表,并设置缓存过期时间为几个月。
- 实时更新:对于局部或动态样式(如 CSS-in-JS 生成的样式),由于其可能随组件状态或用户交互变化,应避免长时间缓存。Next.js 的 CSS-in-JS 方案(如 styled-jsx 或 emotion)会在运行时生成样式,不需要特殊的缓存处理,因为每次组件渲染可能会生成不同的样式。
媒体文件
- 长期缓存:对于图片、视频等媒体文件,利用 CDN 进行分发,并设置较长的缓存时间(如半年)。可以在
next.config.js
中配置 images
选项来优化图片处理和 CDN 集成。例如:
module.exports = {
images: {
domains: ['your-cdn.com'],
deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
},
}
- 更新策略:当媒体文件更新时,采用版本号或文件名哈希的方式。如果是手动管理媒体文件,可以在文件名中添加版本号(如
image_v2.jpg
)。Next.js 的自动图像优化功能会为图像文件名添加哈希,确保更新时浏览器获取新的文件。同时,在服务端可以设置缓存失效机制,当检测到文件更新时,主动清除 CDN 上的旧缓存。