一、服务端渲染和客户端渲染

1、什么是服务端渲染

服务端渲染又称 SSR (Server Side Render),是在服务端完成页面的内容渲染,而不是在客户端完成页面内容的渲染。

SSR 并不是前端特有的技术,我们学习过的 JSP 技术和 Thymeleaf 技术就是典型的 SSR

服务端渲染的特点:

  • 服务端生成html 网页的 dom 元素
  • 客户端(浏览器)只负责显示dom 元素内容

2、什么是客户端渲染

客户端(浏览器) 使用 AJAX 向服务端发起 http 请求,获取到了想要的数据,开始渲染 html 网页,生成 dom 元素,并最终将网页内容展示给用户。

客户端渲染的特点:

  • 服务端只是给客户端响应的了数据,而不是 html 网页
  • 客户端(浏览器)负责获取服务端的数据生成dom元素

3、两种方式优缺点

客户端渲染:

  1. 缺点:不利于网站进行 SEO,因为网站大量使用 javascript 技术,不利于搜索引擎抓取网页。
  2. 优点:客户端负责渲染,用户体验性好,服务端只提供数据不用关心用户界面的内容,有利于提高服务端的开发效率。
  3. 适用场景:对 SEO 没有要求的系统,比如后台管理类的系统,如电商后台管理,用户管理等。

服务端渲染:

  1. 优点:有利于 SEO,网站通过 href 的 url 将搜索引擎直接引到服务端,服务端提供优质的网页内容给搜索引擎。同时,使用服务器端渲染,我们可以获得更快的内容到达时间(time-to-content),无需等待所有的 JavaScript 都完成下载并执行,
  2. 缺点:服务端完成一部分客户端的工作,通常完成一个需求需要修改客户端和服务端的代码,开发效率低,不利于系统的稳定性。
  3. 适用场景:对 SEO 有要求的系统,比如:门户首页、商品详情页面等。

二、Nuxt.js

1、Nuxt.js 介绍

移动互联网的兴起促进了 web 前后端分离开发模式的发展,服务端只专注业务,前端只专注用户体验,比如流行的 vue.js 实现了功能强大的前端渲染。 但是,对于有 SEO 需求的网页如果使用前端渲染技术去开发就不利于 SEO 了,有没有一种即使用 vue.js 的前端技术也实现服务端渲染的技术呢?

Nuxt.js 是一个基于 Vue.js 的轻量级应用框架,可以用来创建服务端渲染 (SSR) 应用,也可充当静态站点引擎生成静态站点应用,具有优雅的代码结构分层和热加载等特性。

官网网站:https://zh.nuxtjs.org/

总结:

  • 服务器端渲染
  • 静态站点引擎

2、Nuxt.js 服务器端渲染

下图展示了从客户端请求到 Nuxt.js 进行服务端渲染的整体的工作流程:

  1. 用户打开浏览器,输入网址请求到 Node.js 中的前端 View 组件
  2. 部署在 Node.js 的应用 Nuxt.js 接收浏览器请求,并请求服务端获取数据
  3. Nuxt.js 获取到数据后进行服务端渲染
  4. Nuxt.js 将 html 网页响应给浏览器

3、Nuxt.js 环境初始化

Github:https://github.com/nuxt/create-nuxt-app

1
npm init nuxt-app <my-project>

比如:npm init nuxt-app Nuxt-app

注意:如果没有安装 Yarn,初始化的过程中 Package manager 选择: Npm(手动输入箭头到 Npm,删除 Yarn 左边的箭头)

测试运行:npm run dev

4、NUXT 目录结构

① 资源目录 assets

用于组织未编译的静态资源如 LESS、SASS 或 JavaScript。

② 组件目录 components

用于组织应用的 Vue.js 组件。Nuxt.js 不会扩展增强该目录下 Vue.js 组件,即这些组件不会像页面组件那样有 asyncData 方法的特性。

③ 布局目录 layouts

用于组织应用的布局组件。

④ 页面目录 pages

用于组织应用的路由及视图。Nuxt.js 框架读取该目录下所有的 .vue 文件并自动生成对应的路由配置。

⑤ 插件目录 plugins

用于组织那些需要在 根 vue.js 应用 实例化之前需要运行的 Javascript 插件。

⑥nuxt.config.js 文件

nuxt.config.js 文件用于组织 Nuxt.js 应用的个性化配置,以便覆盖默认配置。