AwsLinker/PERFORMANCE_OPTIMIZATION.md
2025-09-16 17:19:58 +08:00

6.0 KiB
Raw Permalink Blame History

网站性能优化指南

🚀 优化成果

经过全面的性能优化,网站首次访问速度得到显著改善:

优化前的问题

  • 新闻详情页首次访问卡顿 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秒的加载时间页面响应更加流畅。