SPA 应用中如何实现 SSR

单页应用(SPA)是前端开发热门技术之一,SPA 可以有效提升用户的感知体验,提高访问速度。但是在某些情况下,SPA 也有一些缺点,例如 SEO 不友好、首屏时间较长等问题。因此,为了解决这些问题,我将介绍 SPA 应用中如何使用服务器端渲染(SSR)。

什么是服务器端渲染

服务器端渲染(SSR)是将服务器端的数据和 HTML 模板结合在一起,生成完整的 HTML 页面并将其返回客户端。这个过程在客户端浏览器中急速加载,用户不会感知到这个过程。SSR 可以有效提高首屏渲染速度和 SEO 搜索引擎优化等效果。

理解 SSR 在 SPA 中的作用

对于 SPA 应用,我们都知道单页应用是由 JavaScript 及数据动态生成页面的,SPA 应用通过前端路由控制页面跳转,但在当我们访问 SPA 应用中不存在的页面时,后端返回的是 404 页面,而这个页面是无法被搜索引擎抓取的,也就是说搜索引擎优化效果差。SSR 可以解决这个问题,将页面在服务器端成型返回客户端,搜索引擎抓取到的是完整的首屏页面信息,不会错过任何重要内容,提高 SEO 搜索引擎优化效果。

实现 SSR 的步骤

下面简单介绍 SPA 中实现 SSR 的基本过程。

步骤一:服务端环境的搭建

开发环境:需要有一个 Node.js 服务端环境的搭建,在本地开发环境中可以使用 express、koa 等框架,这里以 express 对 SSR 的实现为例。

生产环境:服务器上需要支持 Node.js 开发平台的环境,并且需要使用 pm2 等进程守护软件运行 Node.js 服务器,保证应用的稳定性和高可用性。

步骤二:开发一套服务器端渲染路由系统并渲染页面

在 express 中,我们可以自定义一套后端路由系统。通过 express 提供的 ejs 或 pug 等模板语言,将 HTML 模板和服务端数据进行组合生成完整的 HTML 页面,供客户端访问。

代码示例:

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

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

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

步骤三:打包客户端需要加载的 JavaScript 资源文件

在服务端渲染的情况下,需要将客户端需要加载的 js、css 资源文件打包好后在后台指定返回给客户端使用。

步骤四:修改客户端代码

将原来的客户端 SPA 代码改造成即支持服务端渲染,也支持客户端渲染。

代码示例:

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

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

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

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

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

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

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

步骤五:配置打包工具webpack

在 app-client.js 中,我们使用了 Vue 实例,并在代码中直接挂载到了 id 为 app 的 DOM 上。但是在服务器端渲染时,并不会将 Vue 实例直接设置到客户端 html 上,因为我们需要在后面将组件挂载到实例上。所以我们需要在客户端渲染时,将组件挂载到 Vue 实例上。这个 Vue 实例需要在服务器端先渲染好,而客户端不应该重新创建一份新的 Vue 实例。所以我们需要在服务器端和客户端公用一份 Vue 实例。

代码示例:

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

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

打包工具 webpack 还需要配置 client 端和 server 端的配置文件,这两份配置文件需要相互配合,确保最终的构建代码可以运行成功。

步骤六:构建和部署

最后,我们需要对整个应用的前后端都进行构建打包,将生成的静态文件部署到服务器上,然后就可以通过访问服务器的 URL 地址来查看 SSR 的效果了。

本文总结

SSR 技术可以有效解决单页应用(SPA)中存在的 SEO 不友好、首屏时间较长等问题。本文介绍了 SPA 应用中如何使用服务器端渲染(SSR)技术,包括步骤一:服务端环境的搭建,步骤二:开发一套服务器端渲染路由系统并渲染页面,步骤三:打包客户端需要加载的 JavaScript 资源文件,步骤四:修改客户端代码,步骤五:配置打包工具 webpack,步骤六:构建和部署。希望对您有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6641c551d3423812e4fc433a