Vue SSR 学习笔记

这是一篇各处抄来的流水账

为什么ssr

ssr目的从来不是争论的焦点:SEO & 首屏加载时间
SEO很容易理解,全是一堆js,浏览器爬虫才懒得给你索引什么内容,关键也没有实际内容好索引o(╥﹏╥)o。
用沃尔玛的两张图解释一下首屏加载时间:


CSR
SSR

从图中可以看出,(这两种渲染方式的)区别主要在于出现首屏渲染的时机。对于SSR来说,服务器返回的是(结构相对完整的)HTML文件,(通过解析HTML文件),浏览器就能渲染出页面。而对CSR来说,浏览器拿到的只是包含JavaScript代码的HTML文件,(换句话,在浏览器渲开始渲染出页面之前,需要动态创建HTML标签)。这也就意味着,SSR可以让浏览器在边下载JavaScript文件的同时边渲染HTML页面,换句话说,浏览器再也不需要等到所有的JavaScript文件下载并执行完之后才去渲染页面啦。

这两张图应该清楚的说明了问题,如果csr,用户可能前面三个步骤看到的都是loading,ssr则是只有第一步骤白屏loading,对于一些电商类网站,快0.01s都是钱,应该不用多解释了。
同时,观察上面的过程,大家也可以注意到,ssr不代表完全在服务端渲染完所有,毕竟你的页面还是需要交互的,这些静态html打死也没法替你完成的,所以,把共同点也抄过来大家看下:

都需要下载React的
都需要经历虚拟DOM构建过程
都需要(给页面元素)绑定事件来增强页面的可交互性。

所以综合以上,大家应该也能对SSR利用场景有自己的判断:

  • 需要seo的,上ssr
  • 对首屏展示速度要求极高的,上ssr
  • 后台admin看起来是必要性不大的

Vue SSR

1 vue怎么做ssr

vue-server-renderer 给你写好了,用它来把你的vue实例render成html,然后后端返回。
似乎一句话说完了,什么鬼?!!

Vue SSR 过程

首先,我们需要有一份同构代码,这部分代码和我们之前写的前端代码是基本一致的。然后,因为需要服务端渲染,所以服务端需要有一份同构代码打包后的js bundle,前端不必多说,天生需要一份。要注意的是,这两份是不同的bundle,因为server端和client端虽然都是做渲染工作,他们做的事情是有不同的,下面细说。然后经过中间的webpack打包后部署。接下来,请求到来,node server收到请求后,用server bundle作为入口拿到一份前端代码,render成html后返回给前端。前端收到后,就可以把预渲染的html展示给用户拉!!!就这么利索。但是前端还会去下载前端的bundle,然后以此为入口,激活后端返回的html,然后此时你的站点就完全可交互了!完美~

2 前后端的entry区别分析

理解两个entry的区别是理解SSR过程的关键,所以下面我们简单分析一下服务端和客户端分别做了什么:

  • vue实例管理:
    前端完全是独立的浏览器环境,所以只有一个vue实例,后端每个请求对应一个实例,所以entry返回的应该是一个实例生成方法,每次收到一个请求,就new 一个新的vue,执行render方法
  • router 路由
    前端路由,后端需要根据每个请求,获取一个新的router实例,然后通过请求path,找到目标访问组件,然后render这个组件即可!
  • store 数据管理
    server既然要渲染,一定要获取部分数据,然而在什么时候获取呢?很简单,router.ready后,此时我么已经知道需要走到哪个路由。还有个问题是,获取哪些数据呢?更粗暴,我们直接在每个路由对应的Vue组件里面写一个asyncData 方法,然后服务端拿到目标路由组建后,执行组件内的asyncData方法,获取到数据后,存到store里面,全部完成之后,带着store里的数据开始render,bingo,一个带着数据的html渲染好了!!!
    不过这些数据前端也是需要,咋办呢,总不能再取一次吧?简单,用window带到前端,context.state 将作为 window.INITIAL_STATE 状态,自动嵌入到最终的 HTML 中。而在客户端,在挂载到应用程序之前,store 就应该获取到状态。
  • 模板激活
    后端render了一部分html回来,前端怎么用呢?这些总不能扔掉重新渲染吧,但是不扔掉,前端有需要将这些静态的html编程响应式的动态dom节点,咋办?激活他们!data-server-rendered="true" 后端渲染好的模板会带有这个属性,前端只要判断有这个属性,会尝试激活这些静态的html~

区别分析完了,相信大家对于SSR应该更糊涂了,别骂人,关掉网页,赶紧去看官方文档才是正道,这些辣鸡笔记只是我自己学习的时候随便写下来的,自己学到的,才是自己的,加油~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容