MST

星途 面试题库

面试题:Next.js 未来静态文件处理中的缓存策略设计

随着 Next.js 应用的用户量增长,为了提升静态文件的访问性能,需要设计一套合理的缓存策略。请阐述你会如何结合 Next.js 的特性,设计针对不同类型静态文件(如脚本、样式表、媒体文件)的缓存策略,以确保在未来应用发展中,既能有效利用缓存提升性能,又能灵活应对文件更新等情况。
49.1万 热度难度
前端开发Next.js

知识考点

AI 面试

面试题答案

一键面试

脚本文件

  1. 长期缓存:对于不常变动的第三方脚本(如 React、Next.js 核心库等),利用 next.config.js 中的 assetPrefix 配合 CDN,并设置较长的缓存时间(如一年)。例如:
module.exports = {
  assetPrefix: 'https://your-cdn.com',
}
  1. 版本控制:对于自定义脚本,通过文件名哈希的方式,当文件内容改变时,文件名也会改变,从而突破缓存。Next.js 会自动对构建输出的静态资源文件名添加哈希后缀。例如 main.[hash].js,这样当脚本更新时,浏览器会获取新的文件,旧版本仍可在缓存中服务其他用户。

样式表

  1. 缓存策略:同脚本文件类似,对于全局样式表和第三方样式库,设置较长的缓存时间。例如通过 CDN 部署样式表,并设置缓存过期时间为几个月。
  2. 实时更新:对于局部或动态样式(如 CSS-in-JS 生成的样式),由于其可能随组件状态或用户交互变化,应避免长时间缓存。Next.js 的 CSS-in-JS 方案(如 styled-jsx 或 emotion)会在运行时生成样式,不需要特殊的缓存处理,因为每次组件渲染可能会生成不同的样式。

媒体文件

  1. 长期缓存:对于图片、视频等媒体文件,利用 CDN 进行分发,并设置较长的缓存时间(如半年)。可以在 next.config.js 中配置 images 选项来优化图片处理和 CDN 集成。例如:
module.exports = {
  images: {
    domains: ['your-cdn.com'],
    deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
  },
}
  1. 更新策略:当媒体文件更新时,采用版本号或文件名哈希的方式。如果是手动管理媒体文件,可以在文件名中添加版本号(如 image_v2.jpg)。Next.js 的自动图像优化功能会为图像文件名添加哈希,确保更新时浏览器获取新的文件。同时,在服务端可以设置缓存失效机制,当检测到文件更新时,主动清除 CDN 上的旧缓存。