SSG(Nuxt.js,盖茨比)在做什么?

What is SSG (Nuxt.js, Gatsby) doing?

我听说 SSG 生成静态站点。 然后我认为 SSG 生成不包含 React 的纯 HTML,但我认为现在可能不是这样。

我认为:

  1. SSG 生成一个普通的 React App 并渲染 HTMLs 用于初始化。 因为它是一个普通的React App,如果我点击一个按钮并触发副作用,就会触发客户端渲染并更新页面。

  2. 当触发router路由时,会下载下一页的js文件和build时获取的数据,然后触发客户端渲染。 此处未使用为初始化呈现的下一页HTML。

这是真的吗?

我几周前在 Nuxt 讨论中回答了这个问题:https://github.com/nuxt/nuxt.js/discussions/9493#discussioncomment-948643

假设 SSG 带来了一些东西:

  • 搜索引擎优化
  • 速度
  • 生态
  • [可能还有一些其他事情]

有多种实现 SSG 的方法,它们都有自己的 pro/cons 和用例。在大多数情况下,如果您使用 Nuxt.js,您可能会选择 target: staticssr: true 路线。

这将:

  • 在构建期间生成完全静态的页面,您将能够在 Netlify、Vercel 或类似平台上托管它
  • 获取静态文件后,用一些 JS 来润色静态内容
  • 之后具有 Vue 行为,作为经典 SPA(因此无需进一步的服务器调用即可管理路由)

此行为称为同构或通用,更多信息请参见链接讨论。


Gatsby 和 Next.js 的工作方式有些相似。有一些细微差别,但在这 3 个 AFAIK 中,一般情况在全球范围内是相同的。

SvelteKit and Astro 处理方式略有不同。看看可能会很有趣!

SSG (Static Site Generators) 像 Gatsby 和 Next,什么他们所做的是基于 React 环境代码创建一个输出 HTML。这并不意味着该站点在交互方面是“静态的”。这意味着您请求的页面已经创建,因此您可以避免服务器中的响应和编译时间。

总结一下,给定一个“传统”/“老式”PHP 网站。例如,当您请求主页时,您的请求发送到服务器,服务器将 PHP 转换为 HTML(浏览器可以解析和打印的内容),然后您获得该页面。 Gatsby/Next 中省略了处理时间,因为 HTML 已经创建。

当您在 Gatsby/Next 中构建您的网站时,将从源中检索数据(使用降价、CMS、API、JSON 等中的 GraphQL)并创建输出(这就是为什么有 /public 文件夹生成)。您所有的 JavaScript 和 React 都捆绑到输出 HTML 中,因此您的网站在用户交互方面将是“动态的”,React 是生态系统的一部分,因此您的副作用(由 [=11 触发) =] 挂钩)或您的 rehydration 流程(例如 useState 挂钩)将成为您网站的一部分。

解释为:

当您导航到另一个页面时,您正在请求一个已经构建和生成的页面,这就是速度如此之快的原因。