- Published on
使用 ISR(增量静态生成)提升页面性能,同时结合缓存优化 API 响应时间
- Authors
- Name
- Shelton Ma
1. ISR 的原理
ISR 是 Next.js 的增量静态生成机制,允许你在构建时生成静态页面,并在后续请求时按需更新.
ISR 核心特点
- 静态性能:首次生成静态页面,性能媲美纯静态站点
- 增量更新:数据更新后可自动触发静态页面重建
- 无需重新部署:数据变更后无需手动触发 CI/CD
ISR示例
// pages/chat-history/[id].tsx
import { GetStaticProps, GetStaticPaths } from 'next';
import { fetchChatHistory } from '@/lib/api';
export async function getStaticProps({ params }: { params: { id: string } }) {
const chatHistory = await fetchChatHistory(params.id);
return {
props: { chatHistory },
revalidate: 60 // 每 60 秒自动重新生成
};
}
export const getStaticPaths: GetStaticPaths = async () => {
const chatIds = await fetchChatIDs(); // 示例:获取所有历史对话ID
return {
paths: chatIds.map((id) => ({ params: { id } })),
fallback: 'blocking' // 未静态化的路径按需生成
};
};
export default function ChatHistoryPage({ chatHistory }: { chatHistory: any }) {
return (
<div>
{chatHistory.map((msg: string, index: number) => (
<p key={index}>{msg}</p>
))}
</div>
);
}
2. 缓存优化 API 响应
由于 ISR 仅适用于页面级渲染,对于 API 请求,推荐引入以下缓存策略:
- Redis → 适用于频繁变动的小型数据 (如 Token 计数、用户状态)
- CDN 缓存 → 适用于全球访问场景,提高静态资源访问速度
- HTTP Cache-Control → 适用于快速实现短期缓存
- Vercel Edge Cache → 结合 ISR 自动缓存,提升动态内容加载速度
3. ISR + 缓存的组合方案 (推荐)
功能/场景 | 推荐方案 | 理由 |
---|---|---|
对话历史(静态数据) | ISR(60秒)+Redis缓存 | 频繁访问但变更不频繁,ISR可增量更新 |
热门推荐内容 | ISR(300秒)+CDN缓存 | 热门推荐内容较稳定,CDN提高访问速度 |
AI生成结果(实时数据) | Redis+HTTP Cache-Control | 数据变更较快,使用缓存提高命中率 |
用户Token/Session | Redis+短期TTL(如5分钟) | 动态数据,确保实时性 |
多语言内容 | ISR(多路径生成)+EdgeCache | 每种语言生成独立静态页,边缘缓存提速 |