CDN你不知道的前端让前端飞

动态CDN加速

2016-10-26  本文已影响1421人  潘逸飞

内容分类

我们先将网页的内容分类,其实是分为3种内容的:

静态

静态的就不提了,现在静态资源CDN加速已经基本上覆盖了。

动态

这个动态是指完全动态,高度定制化,绝对不会重复,比如ajax。

这部分请求固然是会回源的,一直以来都没有使用过CDN,但是其实是可以通过CDN的加速来起到快速回源的效果的。

我们使用到的就是CDN的快速传输的能力。其实也就是DSA(Dynamic Site Acceleration)。

传统的DSA有:

- TCP 优化:设计算法来处理网络拥堵和包丢失,加快这些情况下的数据从cdn的恢复以及一些常见的TCP瓶颈
- Route optimization:就是优化从源到用户端的请求的线路,以及可靠性,就是不断的测量计算得到更快更可靠的路线
- Connection management:就是边缘和源之间,包括CDN之前的线路,采用长连接,而不是每一个请求一个连接
- On-the-fly compression:就是数据在刚刚离开源的时候就进行压缩,可以缩短在整个网络之中的流通时间
- SSL offload:加速或者说减少一些安全监测,减少原服务器执行这种计算密集型的压力
- Pre-fetching:有的服务可以解析HTML文件,并将原始服务器预取缓存对象嵌入到文件中

事件驱动

这是第三种内容,很多CDN把它定义为动态的(这部分内容很难被缓存)。它实际上是静态的,只是更新时间不可预期,没法提前决定他的生命周期。

实际上只要有个好的缓存机制,是可以被缓存的

我们需要CDN提供即时清除的能力。这种清除能力还得是可编制化的,可以高速,精准的清除。一直以来的两个问题:

几种技术

ESI(Edge Side Includes)

是一个w3c的规范(https://www.w3.org/TR/esi-lang),允许边缘服务器通过多个url来组装内容。

来把HTML切成碎片,每一片可以有自己的独立的缓存策略。CDN将缓存的静态部分模板和回到起源的非静态内容,在CDN的边缘服务器上进行组装,然后全部交付给客户机。ESI很有效,但是比较难实现,在HTML页面也需要不少额外的代码

就是将大家能看到的一样的东西与用户行为相关的分离,提高首屏加载。但是在逻辑层需要去判断是否登录。看上去我们把这个功能用ajax来做也行,但是当js没法运行的时候,ESI还是可以这么做。

AMP HTML

AMP其实就是限制了页面的资源加载,限制了可以使用的元素,将耗时的元素取消,将耗资源的元素通过custom elements自己来管理资源加载。避免资源默认被加载,只能使用行内元素

一些CDN提供了额外的服务来研究对称的优化。就是在用户侧有一层CDN,服务器侧也有一层CDN。

动态的好处

为什么动态资源要使用CDN的加速呢,主要的好处有两个:

参考:

顺便给个github的传送门,喜欢的朋友star一下啊,自己平时遇到的问题以及一下学习的思考都会在上面记录~

上一篇下一篇

猜你喜欢

热点阅读