Vue SPA 服务器端渲染实践

阅读时长 5 分钟读完

前言

Vue.js 是一款基于数据驱动视图的渐进式 JavaScript 框架,它的出现让前端开发变得更加易于上手。但是由于 SPA(单页应用)的局限性,SPA 应用在一些场景下还有一些问题需要解决。比如,客户端渲染的缺点是首屏渲染慢、SEO 不友好等问题。因此,本篇文章将介绍 SPA 开发中的一个非常重要的技术——服务器端渲染(SSR)。

SSR 是什么

SSR 是将客户端渲染的过程由前端移到后端。简单来说,就是将应用渲染成 HTML 字符串,并返回给客户端。通过服务器端生成 HTML,可以解决 SPA 应用的首屏渲染慢和 SEO 不友好的问题,同时提高用户体验和页面性能。

Vue SSR 原理

在 Vue 的 SSR 渲染过程中,需要通过 2 个环节来完成:

  1. 服务端渲染:将应用渲染成 HTML 字符串,并返回给客户端。
  2. 客户端激活:将服务端渲染的 HTML 字符串转换成客户端可运行的 SPA 应用。

到这里你可能会问,为什么我们还要进行"客户端激活"呢?这是因为通常情况下,我们的 SPA 应用需要动态操作 DOM 元素,并且需要绑定事件等动态交互。这些操作需要在客户端完成。而在服务端渲染的过程中,只能生成一份 HTML 字符串,而不能完成 JS 的运行和绑定事件等动态交互。

Vue SSR 的流程如上图所示,简单来说,流程分为以下四步:

  1. 客户端发送请求。
  2. 服务端渲染。在服务端执行 Vue.js 的渲染函数生成 HTML。
  3. 客户端激活。在客户端激活应用程序,将服务端渲染的 HTML 变成客户端上的可交互应用。
  4. 客户端接管。一旦应用程序已经被客户端接管,Vue 将不再控制从这一点开始的渲染过程。

Vue SSR 实践

环境搭建

在实践之前,我们需要准备 Vue SSR 的环境。首先需要安装 Node.js 和 Vue CLI 脚手架工具。安装之后,可以使用 vue create 命令来创建一个 Vue 项目,需要选择 SSR 模板。

创建完成后,需要进入项目目录,并安装 vue-server-rendererexpress 等相关依赖。

此处我们以 express 作为服务器,当然你也可以选择其他 Node.js 的 Web 框架,比如 Koa、Hapi、Fastify 等等。

创建 Vue 组件

首先,我们需要创建一个简单的 Vue 客户端组件,命名为 App.vue,代码如下:

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

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

创建服务端入口文件

接下来,我们需要创建服务端入口文件,命名为 server.js。这个文件是启动服务端的入口,它负责把我们的 Vue 组件渲染成 HTML 并返回给客户端。

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

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

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

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

服务端用到 Vue 的 createRenderer 方法来创建一个 renderer 实例,它负责将传入的 Vue 实例渲染成 HTML。在请求过来以后,我们使用 renderToString 方法将 Vue 实例渲染成 HTML 并返回给客户端。

运行 SSR 应用

运行以下命令,启动我们的 SSR 应用:

在浏览器中输入 http://localhost:3000 可以看到渲染结果。

可以看出,服务端渲染已经正常工作了。代码演示了一个最简单的服务端渲染应用,实际上,SSR 的实现远比这个复杂,但大体上的流程都是相同的。

总结

以上是本文关于 Vue SSR 的介绍和实践。Vue SSR 采用服务端渲染技术,通过将应用渲染成 HTML 字符串,并返回给客户端,解决了 SPA 应用在首屏渲染慢和 SEO 不友好等问题。

在实践中,我们需要准备 Vue SSR 的环境,创建一个简单的 Vue 客户端组件,创建服务端入口文件,并引入必要的依赖。以上示例代表了 Vue SSR 的基础实践,但是在实际业务中,还需要考虑较多的问题,比如代码分割、动态路由等等,需要我们深入研究和实践。

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

纠错
反馈