第八章 服务器端渲染

8.1 初识服务器渲染

8.1.1客户端渲染和服务端渲染的区别

客户端渲染,即传统的单页面应用(SPA)模式,Vue.js构建的应用程序默认情况下是一个HTML模板页面,只有一个id为app的div根容器,然后通过webpack打包生成css、js等资源文件,浏览器加载、解析来渲染HTML
html仅仅作为静态文件,客户端在请求时,服务端不做任何处理,直接以原文件的形式返回给客户端,然后根据html上的JavaScript,生成DOM插入html

服务器端渲染,Vue进行服务器端渲染时,需要利用Node.js搭建一个服务器,并添加服务器端渲染的代码逻辑。使用webpack-dev-middleware中间件对更改的文件进行监控,使用webpack-hot-middleware中间件进行页面的热更新,使用vue-server-renderer插件来渲染服务器端打包的bundle文件到客户端。
服务器端渲染,是前后端不分离的模式,界面都是服务器端准备好的,浏览器只管请求就好了

服务端渲染相对于传统的SPA(单页面应用来说),主要有以下优势:
利于SEO
首屏渲染速度快

服务器端渲染的不足:
服务器端压力增加
涉及构建设置和部署的要求
在这里插入图片描述

8.1.2服务器端渲染的注意事项

1.版本要求
2.路由模式
hash模式中改变hash值不会重新加载页面
history模式利用history.pushStateAPI来完成URL跳转而无需重新加载页面
由于hash模式的路由提交不到服务器上,因此服务器端渲染的路由需要使用history模式

8.2服务器端渲染的简单实现

8.2.1创建vue-ssr项目

服务器端渲染的实现,通常有3种方式:
①手动进行项目的简单搭建
vue-server-renderer是Vue中处理服务器处理的一个模块,给Vue提供在Node.js服务器端渲染的功能
②使用Vue CLI3脚手架进行搭建
③利用一些成熟框架来搭建(如Nuxt.js)

8.2.2渲染vue实例

1.创建Vue实例
2.创建渲染器
3.将Vue实例渲染成html

8.2.3Express搭建SSR

Express是一个基于Node.js平台的Web应用开发框架,用来快速开发Web应用
1.创建Express实例
2.读取模板
3.处理GET请求
4.将vue实例渲染为html并输出

8.2.4Koa搭建SSR

Koa是一个基于Node.js平台的Web开发框架,致力于成为Web应用和API开发领域更富有表现力的技术框架
1.创建koa实例
2.读取模板
3.添加中间件处理所有请求
4.将vm渲染为html

8.3webpack搭建服务器端渲染

8.4Nuxt.js服务器端渲染框架

8.4.1创建Nuxt.js项目

Nuxt.js是一个基于Vue.js的轻量级应用框架,可用来创建服务端渲染应用,也可充当静态站点引擎生成静态站点应用,具有优雅的代码结构分层和热加载等特性
脚手架工具:create-nuxt-app
①确保已经安装好了node.js和vue-cli脚手架
②全局安装create-nuxt-app脚手架工具

npm install create-nuxt-app@2.9.x -g

③在项目存储目录下执行以下命令,创建项目

npx create-nuxt-app my-nuxt-demo

④在创建项目过程中,会询问选择哪个包管理器,在这里选择使用npm
⑤当询问选择哪个渲染模式,在这里选择使用SSR
⑥安装配置完成后,启动项目

cd my-nuxt-demo
npm run dev

8.4.2页面和路由

在项目中,pages目录用来存放应用的路由及视图,目前该目录下有两个文件,分别是index.vue和README.md,当直接访问根路径"/"的时候,默认打开的是index.vue文件
Nuxt.js会根据目录结构自动生成对应的路由配置,将请求路径和pages目录下的文件名映射
目录相当于路径的一层
Nuxt.js提供了非常方便的自动路由机制,当它检测到pages目录下的文件发生变更时,就会自动更新路由

8.4.3页面跳转

Nuxt.js中使用nuxt-link组件来完成路由的跳转,它类似于Vue中的路由组件router-link,它们具有相同的属性,并且使用方式也相同
需要注意的是在Nuxt.js项目中不要直接使用a标签来进行页面的跳转,因为a标签是重新获取一个新的页面,而nuxt-link更符合SPA的开发模式
①声明式路由
在这里插入图片描述
②编程式路由
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

so.far_away

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值