15-同构渲染

51 阅读3分钟

Vue.js既支持服务端渲染(Server side rendering) SSR,也支持客户端渲染(Client side rendering)CSR

接下来学习:CSR和SSR的区别,Vue.js的同构渲染

1、CSR和SSR、同构渲染

服务端渲染流程:

1、用户通过浏览器请求站点

2、服务器请求API获取数据

3、接口返回数据给服务器

4、服务器根据获取的模板和数据拼接出最终的HTML字符串

5、服务器把最后的HTML内容发送给浏览器,浏览器解析内容并渲染

客户端渲染流程:

1、客户端向服务器发送请求,获取包含基本标签的静态页面、和等

2、浏览器解析HTML内容,通过JS渲染基本骨架,结束白屏

3、客户端再通过AJAX技术请求API获取数据,一旦接口返回数据,客户端就会完成动态内容的渲染,呈现完整页面。

同构渲染

同构渲染:同构渲染可以同时兼顾CSR和SSR的优点

Vue.js的同构渲染就是同时使用了这两种渲染模式,在初次渲染时采用SSR,接下来进行激活操作,激活操作完成后,便进入了CSR的渲染方式。

激活操作主要包含以下两部分内容:

Vue.js在当前页面已经渲染的DOM元素以及Vue.js组件所渲染的虚拟DOM之间建立联系

Vue.js从HTML页面中提取由服务端序列化后发送过来的数据用以初始化整个Vue.js应用程序。

激活之后,整个应用程序已经完全被Vue.js接管为CSR应用程序了,后续操作都会按照CSR的流程执行,如果刷新页面,则仍然会进行服务端渲染。

2、将虚拟DOM渲染为HTML字符串

将一个普通标签类型的虚拟节点渲染为HTML字符串,本质上是字符串的拼接。

普通内容拼接时需要注意边界问题:

将字符&转义为实体&amp

将字符<转义为实体&lt

将字符>转义为实体&gt

如果包含属性则还应该添加下面两个转义字符

将字符"转义为实体&quot

将字符'转义为实体&#39

3、客户端激活原理

客户端激活:

1、DOM对象与虚拟节点对象之间建立正确的联系

2、将事件正确的绑定到元素上

当组件进行纯客户端渲染时,使用render函数渲染,同构应用则使用hydrate函数进行渲染

hydrate函数的关键点:

1、因为服务端渲染是忽略事件的,浏览器只是渲染了静态的html,所以激活DOM元素的操作之一就是为其添加事件处理程序

2、递归的激活当前元素的子节点,从第一个子节点el.firstChild开始,递归调用hydrateNode函数完成激活

4、编写同构代码

注意:当组件代码在服务端运行时,由于不会对组件进行真正的挂载操作,即不会把虚拟DOM渲染为真实DOM元素,所以,组件的生命周期函数beforeMount与mounted两个钩子不会执行。

定时器在服务端的内存泄露

解决方案:

1.将创建定时器的代码移动到mounted钩子中,即只在客户端执行定时器

2.使用环境变量包裹这段代码,让其不在服务端运行

避免交叉请求引起的状态污染

注意:在服务端渲染时会为每个请求创建一个全新的应用实例

在编写组件代码时,要额外注意组件中出现的全局变量

总结

1、学习了CSR、SSR和同构渲染的工作机制,以及它们各自的优缺点,见上表

2、把虚拟节点渲染为字符串,注意闭合标签的处理

3、客户端激活的原理,激活操作可以总结为两个步骤

4、如何编写同构的组件代码,定时器的处理,生命周期钩子函数的执行,状态污染