首页 > 其他分享 >5 分钟理解 Next.js SSG (Static Site Generation / Static Export)

5 分钟理解 Next.js SSG (Static Site Generation / Static Export)

时间:2023-09-27 16:34:21浏览次数:28  
标签:Generation Site js Static Components SSG Next data 页面

5 分钟理解 Next.js SSG (Static Site Generation / Static Export)

在本篇文章中,我们将介绍 Next.js 中的 SSG(静态网站生成)功能,以及它是如何工作的。我们将介绍 SSG 的基本概念,以及在 Next.js 中如何使用 Server Components 和 Client Components 来实现不同的数据获取策略。

什么是 SSG

SSG 是一种 Web 开发模式,它允许我们在构建网站时将页面提前生成为静态 HTML 文件,而不是在每次请求时动态生成。这意味着页面内容在构建时就已经准备好,而不是等待用户请求时才生成。这样做的好处是:

  • 和 SSR(服务器端渲染) 相比,可以提高网站的性能和降低网站托管成本。因为页面内容可以直接从静态文件中提供,而无需进行服务器端渲染;
  • 和 SPA(单页应用)相比,有利于SEO且有更好的首屏加载性能。因为作为网页骨架的 Server Components 是在构建时渲染的,且 SSG 的 bundle 更小。

什么是静态网站

静态网站是一种最原始的 Web 形式,它由静态文件组成。和 JSP/Blade/Pug 等后端模板引擎不同, 它不需要服务器端代码来生成页面内容(拼接 HTML)。一个简单的静态网站可以通过将HTML、CSS和JavaScript等文件放入静态服务器中或者本地文件系统中,通过浏览器进行访问。

Server Components

在 Next.js 中,组件默认被视为 Server Components。Server Components 是在构建时生成静态页面的一种方式。让我们看一个示例:

function Home() {
  return (
    <main>
      <ComponentA />
    </main>
  );
}
async function ComponentA() {
  const data = await fetchData(
    '/some_data_that_rarely_changes_so_we_fetch_when_building'
  );

  return <div className='component-a'>{data}</div>;
}

在构建时,上述代码会生成如下的HTML:

<main>
  <div className='component-a'>
    some data that rarely changes
  </div>
</main>

这意味着数据在构建时就被获取,并且在每个用户请求页面时都是相同的,因为数据几乎不会发生变化。

Client Components

但如果我们希望在每次用户访问页面或与页面交互时获取新数据,就需要使用 Client Components。以下是一个示例:

'use client';
// ...
export function ComponentB() {
  const [count, setCount] = useState(0);
  const [data, setData] = useState();
  useEffect(() => {
    fetchData(
      `/some_frequently_changing_data_so_we_fetch_every_time_user_open_the_page_or_click_the_button?param=${count}`
    ).then(setData);
  }, [count]);

  return (
    <div className='component-b'>
      <div className='count'>{count}</div>
      <button onClick={() => setCount((val) => val + 1)}>add</button>
      <div className='data'>{data}</div>
    </div>
  );
}
function Home() {
  return (
    <main>
      <ComponentA />
      <ComponentB />
    </main>
  );
}

在构建时,上述代码会生成如下的HTML:

<main>
  <div className='component-a'>
    some data that rarely changes
  </div>
  <div className='component-b'>
    <div className='count'>0</div>
    <button>add</button>
    <div className='data'></div>
  </div>;
</main>

这里的关键区别在于 some_frequently_changing_data 只有在用户打开页面且水合(Hydration)完成之后才会获取,或点击 "add" 按钮后才会获取,而不是在构建时就提前获取。

而传统的 SPA(Single Page Application),在构建后,通常你只会得一个空空如也的HTML:

<div id='root'></div>
<script src="app.js" />

在 app.js 下载和执行完成之前,用户只能面对一个空白的网页。

总结

在 Next.js 中,SSG 是一种强大的工具,它允许我们在构建时生成静态页面,从而提高性能和加载速度。通过 Server Components 和 Client Components,我们可以选择何时获取数据,以满足不同的需求。使用这些工具,你可以更灵活地构建出适应不同场景的网站。

标签:Generation,Site,js,Static,Components,SSG,Next,data,页面
From: https://www.cnblogs.com/forzhaokang/p/17730038.html

相关文章

  • static的个人理解,抽象类与接口
    变量每个变量都有类型,可以是基础类型也可以是引用类型变量必须是合法的标识符(详情见上章)一个类型可以同时输出多个变量如inta=10,b=20,c=30但是会使代码降低可读性,不建议使用变量类型1类变量类变量是在方式之前括号中的变量,必须含有static,可不予声明和赋予含义直接输出......
  • 作为SiteGPT替代品,HelpLook的优势是什么?
    在当今快节奏的数字化世界中,企业不断寻求创新方式来简化运营并增强客户体验。由于聊天机器人能够自动化任务、提供快速响应并提供个性化互动,它们在业务运营中的使用变得非常重要。因此,企业越来越意识到像SiteGPT和HelpLook这样高效的聊天机器人创建工具的必要性。虽然这两个平台都......
  • SAP Commerce Cloud Backoffice site 里 Require Authentication 字段的作用
    “SAPCommerceCloudBackoffice”是一个用于管理和维护电子商务网站的强大工具,允许管理员和运营团队轻松地管理网站内容和配置。在Backoffice的WCMS(WebContentManagementSystem)部分,管理员可以创建、编辑和管理网站上的内容。在WCMS的Administration面板中,有一个字段称为Requ......
  • Spartacus 启动时 basesites OCC API 请求的技术细节
    SAPSpartacus是一款开源的电子商务前端框架,旨在提供可扩展、可自定义和可维护的电子商务Web应用程序。在Spartacus应用程序启动时,发起的OCC(OpenCommerceCloud)请求occ/v2/basesites?fields=FULL是一个重要的请求,用于获取有关基本站点(basesites)的信息。本文将详细介绍这个请求的......
  • 函数(函数的分类及声明和定义,练习题,作用域和生命周期的介绍,static和extern的详细介绍)
    1.函数的概念是一个完成某项任务的一小段代码,包括库函数和自定义函数1.1库函数库函数相关头文件点击查看库函数需要包含头文件1.2自定义函数函数的语法形式形参只有在函数在被调用的过程中为了存放实参传递过来的值,才向内存申请空间,这个过程叫形参的实例化VS中调试时F10,当进入形......
  • 始终安装Burpsite Pro官方的最新版
    0x01下载安装包1.直接到官网下载BurpPro的最新版jar包,网上的各种倒了几道手的不推荐下载(可以一直使用最新版)官网地址:https://portswigger.net/burp2.下载破解工具文件比较小,这里我直接传到博客园了(h3110w0r1d-y大佬的项目)下载地址:https://files.cnblogs.com/files/......
  • c语言-关键字static
    局部变量:运行周期=函数的运行周期全局变量:运行周期=整个程序的运行周期(程序可以是多个.c文件组成)static可以修饰:1、局部变量(函数内定义的)2、全局变量(函数外定义的) 3、函数1.修饰局部变量->静态局部变量:开辟存储空间。在编译的过程中,会在数据区为该变量开辟空间,并对其进行......
  • Technical support website(URL)
    Thissoftwarerespectsandprotectsthepersonalprivacyofallusersusingtheservice.Inordertoprovideyouwithmoreaccurateandpersonalizedservices,thissoftwarewilluseanddiscloseyourpersonalinformationinaccordancewiththeprovisions......
  • 静态static关键字应用
    1.静态static关键字学生类packageExtendsTest;/**@Author:lcc*@Date:2022/3/1-03-01-22:59*@Description:ExtendsTest*@version:1.0*///学生类publicclassStudent{privateintid;privateStringname;privateintage;staticStringroom;......
  • SAP Commerce Cloud Backoffice site 里 Require Authentication 字段的作用
    “SAPCommerceCloudBackoffice”是一个用于管理和维护电子商务网站的强大工具,允许管理员和运营团队轻松地管理网站内容和配置。在Backoffice的WCMS(WebContentManagementSystem)部分,管理员可以创建、编辑和管理网站上的内容。在WCMS的Administration面板中,有一个字段称为Requi......