Next.js 服务端渲染的流程及工作原理

阅读时长 4 分钟读完

服务端渲染(Server-Side Rendering,SSR)是一种将 React 组件在服务端先渲染成HTML字符串,再发送给客户端进行展示的技术。Next.js 是一个支持服务端渲染的 React 框架,通过 Next.js 可以轻松实现服务端渲染。接下来,我们将详细介绍 Next.js 的服务端渲染流程及工作原理。

Next.js 服务端渲染的优势

Next.js 服务端渲染具有以下优势:

  1. 提高页面加载速度:通过服务端渲染,可以先将页面的 HTML 字符串发送给客户端,用户能够更快的看到页面内容。同时,搜索引擎也能够更快的抓取网页内容。
  2. 有利于 SEO:由于服务端渲染能够提供搜索引擎更好的抓取能力,所以对于 SEO 优化有很大帮助。
  3. 更好的用户体验:因为页面能够更快的呈现出来,用户体验也能够得到提升。

Next.js 服务端渲染的流程

下面是 Next.js 服务端渲染的基本流程:

  1. 客户端请求服务器。
  2. 服务器使用 Next.js 运行时框架,执行 JavaScript 逻辑,生成 HTML 字符串。
  3. 服务器将 HTML 字符串发送给客户端。
  4. 客户端接收到服务端返回的 HTML 字符串,并将其呈现在页面上。
  5. 客户端加载 JavaScript 图片文件等资源,并且将页面转变成可交互的 SPA。

Next.js 服务端渲染的工作原理

下面是 Next.js 服务端渲染的工作原理:

  1. Next.js 运行时框架内置了一个文件系统路由,根据请求的路由匹配对应的页面组件。
  2. 页面组件将会被传入到 getInitialProps 静态方法中,进行数据预取。
  3. getInitialProps 静态方法内可以使用数据获取方法(如 fetch 等)获取必要的数据,提前将这些数据获取到,渲染出完整的 HTML 字符串。
  4. 服务端将渲染出的 HTML 字符串发送给浏览器。
  5. 浏览器将接收到的 HTML 字符串解析并渲染出页面整体。
  6. Next.js 会把服务端预取的数据作为 window.NEXT_DATA.props 的值存放在浏览器中,在客户端渲染前提供给组件使用。

Next.js 服务端渲染的代码示例

下面是一个使用 Next.js 服务端渲染的代码示例,实现的功能是在服务端获取数据,并将获取到的数据传递给组件进行渲染。

  1. pages/index.js
-- -------------------- ---- -------
------ ----- ---- --------

----- --------- - -- ---- -- -- -
  ------ -
    -----
      ---------- -------------
      -----------------
      ----
        ---------------- -- -
          --- ------------------------------
        ---
      -----
    ------
  --
--

------------------------- - ----- -- -- -
  ----- --- - ----- ----------------------------------------------------
  ----- ---- - ----- -----------

  ------ -
    -----
  --
--

------ ------- ----------
  1. next.config.js(配置文件)
-- -------------------- ---- -------
-------------- - -
  ----- ---------- -
    ------ -
      -
        ------- ------------
        ------------ --------------------------------------------
      -
    -
  -
--

在该代码示例中,首先我们定义了一个简单的组件 IndexPage,该组件会将服务端获取到的数据 data 渲染成列表展示在页面上。使用 Next.js 的 getInitialProps 静态方法,我们可以在服务端获取数据并将数据预先渲染到 HTML 字符串中。将获取数据的请求配置到 rewrites 中,避免跨域问题。

总结

服务端渲染是一种提高页面加载速度、有利于 SEO 以及提升用户体验的技术。使用 Next.js,我们可以轻松实现服务端渲染,并预先渲染数据,提高页面性能和用户体验。在实际项目开发中,需要根据需求和具体场景来选择合适的渲染方式。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6485205248841e989440d7f0

纠错
反馈