开篇N问

SSR解决了什么问题?SSR存在那些问题?SSR优点缺点是什么如何使用以及原理

自我总结了有如下优势

-  SSR利于seo优化,因为实现了在node中解析vue,将实例渲染成一个字符串直接返回给客户端,
- 而spa页面只有一个空标签,内容是通过js动态渲染的,所以传统SPA单页页不利于SEO,搜索引擎无法爬取页面中的内容
- SSR页面在服务端渲染完成之后返回给客户端,所以可以有更快的首屏到达时间

而缺陷也很明显

- SSR 会占用服务器内存(可以使用一些缓存来减少压力)

- 浏览器一些API无法使用,例如钩子函数只有beforeCreate created,因为服务器不知dom什么时候渲染完

- 我们做项目的某些钩子就不能使用了,原因为了和服务端渲染保持一致,例如将ajax请求放在created中而不放在mouted中

基本原理

通过一份vue项目代码打包出两份代码,服务端使用 node渲染打包后的结果返回给客户端, 是一个字符串,没有交互,所以需要另一份打包的结果插入页面中,页面就有了交互功能

基本实现思路

通过一份vue项目代码打包出2份代码  ---> 使用node渲染打包后的结果 ( 字符串)--> 然后把另一份代码(客户端js)插入到页面

- 通过vue-servre-renderer 生成实例和模板成字符串,然后渲染

server 基本代码如下

const Vue = require('vue');
const VueServerRenderer = require('vue-server-renderer')
const Koa = require('koa')
const Router = require('@koa/router');
const fs = require('fs') let vm = new Vue({
data () {
return {
name: 'zq'
}
},
template: '<div style="color:red">{{name}}</div>'
}) // 把模板temp.html中的文件读取,然后将渲染的vue实例插入到模板
const template = fs.readFileSync('./temp.html', 'utf8');
// console.log(template) // 将字符串插入模板中
let renderer = VueServerRenderer.createRenderer({template}) let app = new Koa();
let router = new Router(); router.get('/', async (ctx) => {
ctx.body = await renderer.renderToString(vm);
}) app.use(router.routes())// 注册路由
app.listen(3000)

然后路由和 vuex管理的数据都需要单独生成一个实例 来保证每个客户端都是请求到的新实例

以上只是基本原理

我们还是需要使用webpack来打包配置

最新文章

  1. .NET设计模式(1):1.1 单例模式(Singleton Pattern)
  2. UITableView的cell重用优化
  3. HDU 5701 中位数计数 暴力
  4. DIV+CSS 网页布局之:两列布局
  5. Jquery 替换全部花括号
  6. C++11 : variadic templates(可变参数模板)
  7. sql必知必会(第四版) 学习笔记二 视图
  8. Style绑定
  9. IOS 股票K线图、分时图
  10. 深度学习之tensorflow (一)
  11. ArcGIS 10.0发布缓存地图服务(详细版)
  12. HttpServletRequest 获取cookie
  13. hive 修复分区、添加二级分区
  14. Redis 密码设置
  15. WPF设置全局字体和字体嵌入
  16. mysql更新子查询中的内容
  17. Hibernate之openSession与getCurrentSession的区别
  18. CodeForces.158A Next Round (水模拟)
  19. iframe子页面获取父页面元素和window对象
  20. mysql枚举类型与集合类型

热门文章

  1. 服务端&amp;客户端注册进Eureka
  2. python关于openpyxl的二次开发
  3. Django项目常用的logging配置。
  4. 74CMS 3.0 存储型XSS漏洞
  5. 动态规划优化算法——wqs二分 and 折线优化
  6. EasyExcel完成excel文件的导入导出
  7. Java思考——HashSet集合如何保证元素的唯一性也就是不包含重复元素?
  8. 学习廖雪峰的Git教程1
  9. 文件下载文件名包含中文时,乱码的处理方法(url编解码)
  10. Chroot 特性 ?