这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战
前言
我们了解了动静分离的概念,以及为什么要进行动静分离的理由,那么我们怎么进行动静分离呢?
动静分离改造
我们需要考虑以下的几种要素,我们通过典型的商品详情页面来进行分析。
URL唯一化
商品详细页面的话可以很自然的做到这一特性,我们可以根据商品的唯一ID来进行标识,那么 item.xxx.com/item.htm?id… 就可以作为唯一的 URL 标识。这样我们在缓存整个HTTP连接时,就可以以URL作为换成的KEY值,进行唯一区分。
分离浏览者相关的因素
浏览者相关的因素包括是否已登录,以及登录身份等,这些相关因素我们可以单独拆分出来,通过动态请求来获取。
分离时间因素
服务端输出的时间也通过动态请求获取。
异步化地域因素
详情页面上与地域相关的因素做成异步获取的方式,也可以通过动态请求获取。在这个要素下,异步获取会更加合适的。
去掉Cookie
服务端输出的页面包含的 Cookie 可以通过代码软件来删除,Web 服务器 Varnish可以通过 unset req.http.cookie 命令去掉 Cookie。注意,这里说的去掉 Cookie 并不是用户端收到的页面就不含 Cookie了,而是说,在缓存的静态数据中不含有Cookie。
分离之后
当我们将动态内容分离出来后,组织这些页面会非常重要,如果很多的动态内容会被页面的中的其他模块使用到,例如判断该用户是否已登录、用户 ID 是否匹配等,我们这时候应该将这些信息使用JSON格式进行组织。方便前端进行数据的获取。
动态内容处理方案
我们使用缓存的方式处理静态数据,那么动态内容的处理方式通常有以下两种:
-
ESI(Edge Side Includes)方案:即在 Web 代理服务器上做动态内容请求,并将请求插入到静态页面中,当用户拿到页面时已经是一个完整的页面了。这种方式对服务端性能有些影响,但是用户体验较好。
-
CSI(Client Side Include)方案:单独发起一个异步 JavaScript 请求,以向服务端获取动态内容。这种方式服务端性能更佳,但是用户端页面可能会延时,体验稍差。
总结
以上就是我们做动静分离的改造的方式。