如何使用 Fastify 实现服务器端渲染 (SSR)

阅读时长 13 分钟读完

在前端开发中,服务器端渲染 (Server-Side Rendering, SSR) 是目前较为流行的一种技术方案。它能够在服务器端将数据渲染成 HTML,然后再将 HTML 返回给客户端,从而加快页面的加载速度和提高 SEO。而 Fastify 是一个高效的 Node.js Web 框架,它的核心优势在于其极高的性能。

本文将介绍如何使用 Fastify 实现服务器端渲染。我们将重点讲解:

  1. SSR 的定义和原理
  2. Fastify 的安装和使用
  3. 构建一个最基本的 SSR 应用程序
  4. 优化你的 SSR 应用程序

什么是服务器端渲染 (SSR)

在传统的客户端渲染(Client-Side Rendering, CSR)模式下,客户端在加载网站时,服务器仅仅只是提供了一个空的 HTML 文件和相关的静态文件,其它组件的渲染操作都交给了浏览器端的 JavaScript 来完成,当然这也导致有一些缺点如:

  • 全部应用逻辑都在浏览器端,会导致执行效率很低
  • 搜索引擎无法爬取动态渲染的内容,导致 SEO 不友好

服务器端渲染 (SSR) 是一种将组件渲染为 HTML 的方法。它是将 Vue、React、AngularJS 和类似框架的代码执行在服务器端,将 HTML、CSS 和 JavaScript 应用程序的块返回给浏览器的过程。与客户端渲染(CSR)相反,SSR的优点包括:

  • 更快的呈现首个页面,因为在初始加载时可以同时获取到完整的 HTML 内容
  • 更好的 SEO,因为每个网页都是完整的 HTML 文档,可以被搜索引擎爬取
  • 降低白屏时间,因为在客户端渲染权衡有可能在 JavaScript 异步加载时引发两者之间的等待
  • 当 JavaScript 失败时,可以使用 SSR 来向用户提供一个基本的网站体验
  • 在网络连接不佳的情况下,我们可以使用 SSR 让用户体验不受到影响。

Fastify 的安装和使用

Fastify 是一个用于构建 Web 应用程序的快速和低开销的框架。在使用 Fastify 之前,我们需要安装 Node.js 和 npm,并确保它们的版本是最新的。

使用 npm 安装 Fastify:

要使用 Fastify,我们在 Node.js 项目中引入它:

Fastify 就是这么简单,现在开始写你的代码吧!

构建一个最基本的 SSR 应用程序

接下来我们将介绍如何使用 Fastify 实现一个最基本的 SSR 应用程序。

1. 创建一个 HTML 文件

创建一个 index.html 文件,内容如下:

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

2. 创建一个 Entry 文件

src/entry.js

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

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

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

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

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

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

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

3. 构建 Webpack 配置

使用 Webpack,我们可以将整个 SSR 应用程序打包成一个可执行的 JavaScript 文件。

webpack.config.js

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

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

4. 启动服务器

最后,通过运行以下命令启动服务器:

现在你可以使用任何浏览器访问你的 SSR 应用程序:

优化你的 SSR 应用程序

实现了一个基本的 SSR 应用程序后,我们来看一下如何对其进行优化。

1. 使用缓存

服务器端渲染对性能来说是一个重量级的操作。对于复杂的页面,它可能需要大量时间来渲染每一个组件,这可能导致用户等待时间过长。因此,我们需要使用缓存机制来减少渲染时间。

Fastify 通过使用 LRU 算法提供了一个方便的缓存插件,可以通过以下方式来使用它:

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

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

Fastify 生成一个新的缓存实例并在 global 缓存变量中存储它。可以通过访问 server.cache 来访问缓存实例。所以每当我们要写入和读取缓存时,我们需要使用 server.cache

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

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

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

generateCustomerPage 函数会生成一个带有 HTML 内容的对象。

2. 减少服务器渲染的负载

一个复杂的 Web 应用程序可能会需要大量过程来完成渲染。为了避免阻塞服务器的性能,我们可以使用线程池或 fork 子进程来完成渲染任务。

Fastify 为我们提供了一个名为 fastify-compress 的插件,可以将响应压缩到客户端以减少带宽和响应时间。如果你在响应的输出中看到这条消息:“unknown compression method”,那就需要安装相关扩展,如 zlib-dev、libz-dev、compress-dev。

3. 使用异步组件

使用异步组件可以提高 SSR 的性能。Vue 的异步组件功能允许我们定义多个钩子,将组件分割成小块,只有在需要渲染时才会加载这些块。

有了异步组件,就可以将大的应用程序分割成小部分,并在需要时渲染特定部分。对于大型应用程序或移动设备等有限资源的应用程序来说,这是非常重要的。

4. 优化 HTML 和 CSS

HTML 和 CSS 是构建好的 SSR 应用程序的一部分,并且会在初始加载时被立即下载。因此,我们需要考虑对这些文件进行优化。

HTML 和 CSS 可以被打包在一起,以减少网络请求的数量:

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

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

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

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

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

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

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

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

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

将 CSS 放在 HTML 的 head 部分引入:

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

再次运行 webpack,并在 HTML 中链接打包的 styles.css 文件:

5. 快速退出

如果服务器接收到退出信号,它会立即终止所有未完成的请求并退出进程。为了实现快速退出功能,我们可以使用:

这将确保服务器尽快退出,而不是等待所有请求完成。

6. 开启缓存技术

通过开启缓存技术和启用性能优化,我们可以显著提高 SSR 的性能。在高端机器上,优化服务器端渲染过程可以加速 SSR 的响应时间和吞吐量。

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

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

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

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

通过缓存和其他优化,我们可以实现更快的 SSR 应用程序和更好的用户体验。

总结

在本文中,我们展示了如何使用 Fastify 实现服务器端渲染 (SSR)。Fastify 是一个高性能的 Web 框架,使用它实现 SSR 的步骤非常简单。我们从头开始,介绍了 SSR 的定义与原理,然后讲解了如何使用 Fastify 搭建 SSR 应用程序,并对其进行了优化。我们涵盖了如何使用缓存、异步组件、快速退出以及完整的性能优化。现在你已经掌握了 Fastify 实现 SSR 的基本原理,可以开始构建自己的 SSR 应用程序了。

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

纠错
反馈