把 SSR 交给 Cloudflare:Landing 从 Next.js 迁到 React Router 的两日

💡 原文中文,约5100字,阅读约需13分钟。
📝

内容提要

LobeHub的Landing站点从Next.js迁移到React Router,以降低算力成本。通过将SSR交给Cloudflare缓存,确保响应仅随URL变化,从而提高缓存效率。迁移过程中优化了数据请求、缓存策略和主题处理,最终实现了更高的性能和更低的成本,整个过程在两天内完成。

🎯

关键要点

  • LobeHub的Landing站点从Next.js迁移到React Router,主要是为了降低算力成本。

  • 迁移过程中将SSR交给Cloudflare缓存,确保响应仅随URL变化,从而提高缓存效率。

  • 优化了数据请求、缓存策略和主题处理,以实现更高的性能和更低的成本。

  • 整个迁移过程在两天内完成,主要由Claude Code和Codex两只agent分头进行。

  • 迁移的核心原则是SSR响应必须只随URL变化,任何cookie或用户代理的变化都会导致缓存失效。

🔎

延伸解读

迁移的动机与挑战

LobeHub的Landing站点迁移的主要动机是降低算力成本。原有的Next.js架构在处理动态内容时,导致每次请求都需回源计算,增加了运营成本。迁移到React Router后,通过将SSR交给Cloudflare缓存,确保响应仅随URL变化,从而提高了缓存效率,降低了成本。

缓存策略的重要性

在迁移过程中,LobeHub特别强调了缓存策略的设计。通过明确设置Cache-Control头,确保Cloudflare能够独占缓存权,避免了与Vercel CDN的冲突。这种策略不仅提高了缓存命中率,还有效降低了源站的压力,提升了整体性能。

SSR与Prerender的区别

文章中提到SSR和Prerender的不同,SSR响应可以缓存,但仍需回源,而Prerender则是直接生成静态HTML,首次访问即为缓存命中。通过对特定路径进行Prerender,LobeHub能够将首次请求的MISS转变为永久的HIT,从而进一步优化性能。

延伸问答

为什么LobeHub的Landing站点要从Next.js迁移到React Router?

主要是为了降低算力成本,避免高额的回源计算费用。

迁移过程中如何确保SSR响应可以被Cloudflare缓存?

通过确保SSR响应仅随URL变化,避免cookie或用户代理的变化导致缓存失效。

迁移到React Router后,如何优化数据请求和缓存策略?

将数据请求分流,使用Cache-Control头部明确缓存策略,以提高缓存命中率。

整个迁移过程花费了多长时间?

整个迁移过程在两天内完成。

在迁移中,如何处理主题相关的CSS?

通过将主题相关的CSS编译为静态文件,避免在SSR中读取cookie,从而提高缓存效率。

迁移过程中使用了哪些技术或工具?

主要使用了Cloudflare、React Router和Vercel Function等技术。

🏷️

标签

➡️

继续阅读