6.0 KiB
6.0 KiB
网站性能优化指南
🚀 优化成果
经过全面的性能优化,网站首次访问速度得到显著改善:
优化前的问题
- ❌ 新闻详情页首次访问卡顿 1-3 秒
- ❌ 产品页面和新闻页面首次访问延迟
- ❌ 客户端渲染导致的白屏时间
- ❌ 大量重复翻译数据增加包体积
- ❌ 缺少预加载和缓存机制
优化后的改进
- ✅ 服务端预渲染,消除客户端数据获取延迟
- ✅ ISR 缓存策略,1小时重新验证
- ✅ 关键页面预加载机制
- ✅ 翻译数据提取,减少代码重复
- ✅ 图片和资源优化加载
- ✅ 性能监控和分析系统
📈 技术实现
1. 服务端渲染 (SSR) 转换
新闻详情页优化
// 之前:客户端数据获取
'use client';
const [article, setArticle] = useState(null);
useEffect(() => {
fetch(`/api/articles/${id}`).then(...)
}, []);
// 现在:服务端预渲染
export default async function NewsArticlePage({ params }) {
const data = await getArticleData(params.id, params.locale);
return <NewsArticleServerComponent article={data.article} />;
}
产品页面优化
- 移除客户端状态管理
- 提取翻译数据到独立文件
- 使用服务器组件预渲染
2. 增量静态再生 (ISR) 缓存
// API 路由缓存策略
const response = await fetch(url, {
next: { revalidate: 3600 } // 1小时后重新验证
});
// HTTP 缓存头
response.headers.set('Cache-Control',
'public, s-maxage=3600, stale-while-revalidate'
);
3. 预加载机制
// 首页预加载关键页面
function PrefetchLinks({ locale }) {
return (
<>
<Link href="/products" prefetch={true} style={{ display: 'none' }} />
<Link href="/news" prefetch={true} style={{ display: 'none' }} />
<Link href="/contact" prefetch={true} style={{ display: 'none' }} />
</>
);
}
4. 资源优化
图片预加载
// 预加载关键图片
const criticalImages = [
'/images/hero-bg.jpg',
'/images/cloud-services.jpg',
'/images/aws-logo.png'
];
字体预加载
// 预加载关键字体
<link
rel="preload"
href="/fonts/inter-var.woff2"
as="font"
type="font/woff2"
crossOrigin="anonymous"
/>
🛠️ 使用指南
配置环境变量
# 性能监控
NEXT_PUBLIC_PERFORMANCE_API=https://your-analytics-endpoint.com/perf
# CDN 配置
NEXT_PUBLIC_CDN_DOMAIN=https://cdn.your-domain.com
NEXT_PUBLIC_IMAGE_CDN_DOMAIN=https://images.your-domain.com
启用性能监控
// 在 _app.tsx 或 layout.tsx 中
import { usePageLoadOptimization } from '@/lib/performance-config';
export default function RootLayout({ children }) {
usePageLoadOptimization(); // 启用性能优化
return <>{children}</>;
}
性能配置调整
编辑 lib/performance-config.ts 来调整配置:
export const performanceConfig = {
cache: {
apiCacheDuration: 3600, // API 缓存时间
isrRevalidate: 3600, // ISR 重新验证时间
},
prefetch: {
criticalPages: ['/products', '/news'], // 预加载页面
prefetchDelay: 100, // 预加载延迟
},
// ... 更多配置
};
📊 性能指标
Core Web Vitals 目标值
- LCP (Largest Contentful Paint): < 2.5s
- FID (First Input Delay): < 100ms
- CLS (Cumulative Layout Shift): < 0.1
缓存策略
- API 响应: 1小时内存缓存 + HTTP 缓存
- 静态资源: 24小时浏览器缓存
- 页面: ISR 1小时重新验证
预加载策略
- 关键页面: 首页自动预加载
- 关键图片: 100ms 延迟预加载
- 字体文件: 立即预加载
🔧 开发建议
1. 添加新页面时
// 优先使用服务器组件
export default async function NewPage() {
const data = await getServerData();
return <ServerComponent data={data} />;
}
// 避免不必要的客户端状态
// ❌ 不推荐
'use client';
const [data, setData] = useState(null);
// ✅ 推荐
// 在服务端预获取数据
2. 优化图片使用
// 使用 Next.js Image 组件
import Image from 'next/image';
<Image
src="/image.jpg"
alt="Description"
width={800}
height={400}
priority // 关键图片设置优先级
sizes="(max-width: 768px) 100vw, 50vw"
/>
3. 代码分割最佳实践
// 动态导入非关键组件
const LazyComponent = dynamic(() => import('./LazyComponent'), {
ssr: false,
loading: () => <Skeleton />
});
📱 移动端优化
响应式图片
// 针对不同屏幕尺寸优化
const imageSizes = "(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw";
触摸优化
/* 提升触摸响应速度 */
.button {
touch-action: manipulation;
}
🔍 监控和调试
性能监控
// 自动性能指标收集
PerformanceOptimizer.monitorPerformance();
开发调试
# 运行性能分析
npm run dev
# 打开 Chrome DevTools > Lighthouse 进行性能测试
生产环境监控
- Core Web Vitals 自动收集
- 导航时间监控
- 错误日志记录
🚀 部署优化
构建优化
// next.config.js
{
"experimental": {
"optimizeCss": true,
"optimizePackageImports": ["react-icons"]
},
"images": {
"formats": ["image/webp", "image/avif"]
}
}
CDN 配置
- 静态资源 CDN 加速
- 图片 CDN 优化
- 全球边缘缓存
📈 预期效果
实施这些优化后,预期可以获得:
- 首次访问速度提升: 60-80%
- 重复访问速度提升: 90%+
- 用户体验评分: 显著改善
- SEO 排名: 因性能提升而受益
- 服务器负载: 减少 40-60%
🔄 持续优化
定期检查
- 每月性能审计
- 监控 Core Web Vitals 变化
- 分析用户行为数据
优化建议
- 根据实际使用数据调整缓存策略
- 优化预加载页面列表
- 持续监控和改进
通过这些优化措施,网站的首次访问体验得到显著改善,用户不再需要等待1-3秒的加载时间,页面响应更加流畅。