去掉 Next.js 让我的博客在每一项 Lighthouse 分类都达到了 100

把一个简单博客从 Next.js 中剥离出来,转而使用静态 HTML,引发了关于何时值得使用重型 JavaScript 框架的更广泛讨论。许多参与者认为,像 Hugo、Zola、Astro 这样的现代静态站点生成器,甚至在 AI 辅助下手写的工具,都能为大多静态的内容提供接近满分的 Lighthouse 分数、更简单的部署以及更少的安全顾虑。也有人反驳说,对于复杂、带状态的应用,框架和 SSR 仍然有其价值,但同意它们已经被默认采用到了远超实际需要的程度。

博客的静态站点生成器

  • 许多人认为静态 HTML 是博客的理想选择;一整类性能问题都随之消失了。
  • 常见的 SSG 选择包括:Astro、Hugo、Zola、Zine(Zig)、Web Origami、Eleventy、自定义 Gulp 流水线,以及 Amytis 和 QIP Router 这类小众工具。
  • Hugo 和 Zola 因单一二进制的简洁性、速度,以及避免依赖 JS 生态而受到称赞;也有人抱怨 Hugo 在不同版本之间会破坏向后兼容性。
  • Astro 经常被推荐,但有些人认为它的“islands/server stuff”对一个简单博客来说过度设计了。

Astro、Hugo、Zola 和其他替代方案

  • Astro 受到称赞的原因包括:
    • 灵活性(可以混用 React/Vue/Svelte 或纯 HTML/CSS)。
    • 性能出色,可选的 server islands,以及既适合简单博客也适合更复杂网站。
  • 反方观点:其他人觉得 Astro 并没有明显更适合复杂应用,而且它的高级模式对博客来说没必要。
  • Hugo 被广泛使用,并且有很强的 Lighthouse 分数;图片流水线和 srcset 生成之类的功能很受重视。
  • Zola 因其带有主张但又简单的结构而受到喜爱;被认为适合小型站点,但不太适合大型、相互关联的站点。

对 Next.js 和重型框架的看法

  • 许多人认为 Next.js 对大多数网站来说都过于庞大或不合适,尤其是静态博客;有些人把这归因于营销驱动的采用。
  • 也有人报告静态导出的 Next.js 博客在 Lighthouse 上拿到 100 分,并认为这些批评被夸大了。
  • 抱怨点包括混合范式(SSR/SSG/SPA)带来的复杂性、庞大的 JS 包,以及服务器和客户端之间的重复工作。
  • 有人指出 Next.js 的静态导出仍然会发送不必要的 JS;也有人认为它带来了有用的功能(路由、预取、图片优化),而博客很少需要这些。

性能、缓存和 JS 的使用

  • 基于 Hugo、SvelteKit 或手工搭建的静态博客,常常能拿到满分的 Lighthouse 分数。
  • 如果页面生成足够快,缓存的重要性就会降低;CDN 对地理分发更重要。
  • 几位发言者认为许多静态站点几乎不需要 JavaScript;任何额外的 JS 都应该是经过刻意选择的。

AI 与框架的未来

  • 多条评论认为 AI/LLMs 可以:
    • 快速生成自定义静态站点生成器或简单框架。
    • 通过抵消 DX 的痛点,让原生 HTML/CSS/JS 变得更有吸引力。
  • 有人推测,随着 DX 优势缩小、而安全面扩大,功能庞大的框架可能会走向衰落。
  • 也有人警告说,LLM 工具往往默认选择像 Next.js 这样的流行技术栈,不过明确的指令可以限制它们。