返回

用 React 编写,你又有多种选择 - Next.SSG

前端

用 React 编写,你又有多种选择-Next.SSG

引言

在当今快速发展的互联网,网站的加载时间和搜索引擎优化 (SEO) 已然成衡量网站成败的关键指标。使用诸如 React 的客户端渲染库开发的网站在加载时间和 Search 优化方,先天劣于传统服务器渲染网站。 Next.js 的问世,部分解决了这个问题,它允许 React 开发者使用服务器渲染来提改进网站的初始加载时。然而,Next.js 并不止于此,它还了另一种优化网站加载时和 Search 的选择 - 静态站点生成 (SSG)。

何为静态站点生成 (SSG)?

静态站点生成是预先将网站的各个部分渲染成静态的HTML文件,并将其部署到内容分发网 (CDN) 的一项。与服务器渲染 (SSR) 采用按需生响应的方,SSG 采用批量的预先渲染,并仅在源内容变更时才触发重新生成。

Next.js SSG 的优势

  • 更快的加载时: 因为网站的静态内容己经保于 CDN,当访客向您的网站发起请时,无需等待服务器生响应,就能立即提供内容。
  • 搜索引擎优化友好: 静态站点更易被搜索引擎爬,有利于网站的 Search。
  • 全球化: 由于内容保于 CDN,访客可以从网站部署地较近的节点获取内容,进而缩短加载时。
  • 开发体验: Next.js 为 SSG 提了一个友的开发验,允许开发人员在编写组件时,不必考虑数据获取和内容渲染,只需关注 UI 逻辑即可。

Next.js SSG 的局限

  • 不适用于全交互式网站: 因为 SSG 是一种批量的预渲染,不适合具有交互式表格、实时聊天或其源内容变化频繁的网站。
  • 管理复杂: 随着网站的增长,管理 SSG 的生管工作会变得复。
  • 数据安全性: 将敏感数据包含在预渲染的静态文件中会带来安隐患。

何时使用 Next.js SSG?

SSG 非常适于:

  • 博客: 博客内容通常变化不大,SSG 可以明显提博客的加载时和 Search。
  • 组合网站: 组合网站通常是数据驱的,而数据变化并不频繁,SSG 也非常适用。
  • 电子商务网站的产品详情页: 这些页通常变化不大,SSG 可以提升用户的购物验。

如何使用 Next.js SSG?

要在 Next.js 中使用 SSG,请在您的 next.config.js 文件中进行以的:

module.exports = {
  // ...
  // 现有 Next.js 配置项
  // ...

  // 启用 SSG
  // 当 `exportBuildId` 设置为 `true`,生产构件时
  // 将会生成 `.next/export` 文件夹中的静态文件
  exportBuildId: true,

  // ...
  // 其他 Next.js 配置项
  // ...
};

要在您的组件中使 SSG 启,请在您想要生成的组件上添 getInitialProps 函数:

// 使用 getInitialProps 来进行数据获取
import getInitialProps from 'next/getInitialProps';

// 您的组件
import MyComponent from './MyComponent';

export class _App extends React.Component {
  static getInitialProps({ query, pathname }) {
    // 这个方法将在服务端调用,并将在 getInitialProps 的返回值中暴露为 `pageProps`
    const data = await api.fetchData();

    return { pageProps: { data } };
  }

  render() {
    return <MyComponent {...this.props.pageProps} />;
  }
}

export default _App;

结论

Next.js SSG 是一种提 React 网站加载时和 Search 的有效方。但它并不适合所有类型的网站。在决定使用 SSG 还是服务器渲染时,请权衡其优缺,选择最适合您网站需的方案。