G

Gatsby 与 Next.JS——是什么、为什么以及何时?

2025-05-25

Gatsby 与 Next.JS——是什么、为什么以及何时?

这篇文章写了将近两年了,现在仍然有人在读——太棒了!可惜的是,文中很多内容已经过时了。

我写了这篇文章的新版本,更新至 2021 年。可以在这里找到 --> https://dev.to/jameesy/gatsby-vs-next-js-in-2021-what-why-and-when-2fae


好吧,首先,我跑题了,我超级喜欢这两个“框架”。我经常在 Twitter 或 Instagram 上对它们赞不绝口,然而,毫无疑问,每当我谈论这些工具时,我被问到最多的问题是,哪个更好?

我应该用 Next.JS 吗?不过我听说 Gatsby 挺好用的,或许我应该用一下?

所以我想我会进一步深入讨论这个问题,希望能让选择更加明确一些。

让我们战斗吧!

斗争!


Gatsby 与 Next - 简介

那么,除了您以前听过但从未真正理解的流行语之外,Gatsby 和 Next 是什么呢?

用最基本的话来说,同样的方式,create-react-app将为您创建一个 React 项目的样板,这两个框架将为您创建应用程序奠定基础。

然而,它们已经分离出来create-react-app,因为它们不再被归类为样板,而是工具包,奠定基础,然后为您提供一套关于如何建造房屋的说明。

总结一下:

create-react-app- 奠定 React 项目的基础。剩下的就交给你了。

Gatsby & Next - 奠定 React 项目的基础。为您提供如何在其基础上进行构建的指导。

...

可是啊?奇怪?他们俩做的……竟然是同一件事?

有点。

乍一看,它们非常相似,因为它们:

  • 提供样板应用程序。
  • 生成性能极佳、可访问且 SEO 友好的网站。
  • 开箱即用地创建单页应用程序。
  • 拥有非常棒的开发体验。

但实际上,它们是有根本区别的。


服务器端渲染 vs 静态生成

嗯?

好的,我们开始在这里讨论一些技术问题,所以请继续关注...这并不太糟糕!

Gatsby是一款静态网站生成器工具。静态网站生成器在构建时生成静态 HTML。它不使用服务器。

Next.JS主要是用于服务器端渲染页面的工具。每当有新的请求通过服务器传入时,它都会动态生成 HTML。

当然,两者都可以在客户端调用 API。根本的区别在于 Next 需要服务器才能运行。而 Gatsby 完全不需要任何服务器就能运行。

Gatsby 仅在 处生成纯 HTML/CSS/JS build time,而 Next 在 处创建 HTML/CSS/JS run time。因此,每次收到新请求时,它都会从服务器创建一个新的 HTML 页面。

我不会在这里深入探讨每种方法的优缺点,但如果您想了解更多,请查看这篇文章 - https://dev.to/stereobooster/server-side-rendering-or-ssr-what-is-it-for-and-when-to-use-it-2cpg


数据处理

这些工具之间的另一个根本区别是它们处理数据的方式。

Gatsby 告诉您如何在应用程序中处理数据。

接下来的决定权完全由您决定。

什么?

这到底是什么意思?

Gatsby 使用了一种叫做 GraphQL 的技术。GraphQL 是一种查询语言,如果你熟悉 SQL,它的工作方式与 SQL 非常相似。你使用一种特殊的语法,描述组件中所需的数据,然后组件会将这些数据返回给你。

当您的组件需要时,Gatsby 会在浏览器中提供该数据。

一个例子:

import React from "react"
import { graphql } from "gatsby"
export default ({ data }) => (
  <div>
    <h1>About {data.site.siteMetadata.title}</h1>
    <p>We're a very cool website you should return to often.</p>
  </div>
)
export const query = graphql`
  query {
    site {
      siteMetadata {
        title
      }
    }
  }
`
Enter fullscreen mode Exit fullscreen mode

在上面的例子中,您可以看到我们有一个查询需要获取title,然后title在组件内显示。太棒了!

Gatsby 还提供了丰富的插件,适用于各种数据源,理论上可以轻松集成多种数据源。一些数据源插件包括 Contentful、Wordpress、MongoDB 和 Forestry。这允许你将网站连接到 CMS 并从外部控制内容。

在进行生产构建时,不再使用 GraphQL,而是将数据保存到 JSON 文件中。

...好的,很酷。

另一方面,如何管理数据完全取决于你自己。你必须根据自己的架构来决定如何管理数据。

这样做的好处是,您不会被束缚于您可能想要或不想使用的任何技术。


那么我应该选择什么呢?

是否应该使用 Gatsby 或 Next 很大程度上取决于您的用例,因为它们确实都很棒。

何时使用 Next.JS

如果您有大量内容,或者您​​预计内容会随着时间的推移而大幅增长,那么静态生成的网页并非最佳解决方案。原因是,如果内容过多,构建网站会耗费大量时间。

当创建一个包含数千个页面的大型应用程序时,重建速度可能会相当慢。而且,如果点击发布后需要等待一段时间才能上线,这可不是一个完美的解决方案。

因此,如果您的网站内容会随着时间的推移而不断增长,那么 Next.JS 是您的最佳选择。

此外,如果您希望在访问数据方面拥有更多自由,Next.JS 值得一试。

值得一提的是,Next 的文档是我见过的最好的文档之一。它有一个交互式的介绍,会在你浏览内容时进行测试,确保你跟上进度 :) 太棒了!👏

何时使用 Gatsby

我倾向于(这是我的个人偏好)在构建小型网站和博客时使用 Gatsby。这个生态系统非常适合连接到 CMS(真的非常轻松),而且有一些很棒的指南教你如何开始使用它。

在我看来,Gatsby 的上手和运行都更容易,所以这一点值得牢记。同样,它的文档非常高水平,包含大量教程,方便你循序渐进地学习。

Gatsby 还附带一些“入门”模板,以及相对较新推出的“主题”,所有这些都使得快速启动和运行功能齐全的 Web 应用程序成为可能。

文章来源:https://dev.to/jameesy/gatsby-vs-next-js-what-why-and-when-4al5
PREV
科技领域求职终极指南 👋🏼 简介 🌱 第一步 - 准备 🚀 第二步 - 申请 🤝 第三步 - 面试 👋 结论
NEXT
2021 年面向开发人员的最佳 Web 可访问性工具