独家供稿:移动Labs
上一篇文章介绍了如何通过CDN动态路由优化技术提升动态内容的访问速度。除了在传输路径中进行加速,在内容的源头—也就是网站侧也可以实施相应的优化,使得Cache/CDN的缓存机制更有效率。
在实际应用中,动态内容并不意味页面的所有内容都是动态的,事实上,一个动态生成的页面,通常可能只有少量的内容是频繁变化的或者个性化的。而传统网站的动态内容往往直接由Web应用程序生成,导致不同用户的输出页面不同。对于Cache系统或CDN而言,为保证页面的显示正确,通常不对该类页面实施缓存。
这里要隆重请出ESI:铛铛铛铛~~~。ESI的全称是Edge Side
Includes,不是特别好翻译,让我们还是姑且就叫做ESI吧。ESI的本质是通过定义一整套标记语言来对网页中可以加速和不能加速的内容片断进行描述和区分,将每个网页划分成不同的小部分,并分别赋予不同的缓存策略,使Cache服务器可以根据策略将不同的网页部分组合在一起,再将网页数据传送给用户。
加入ESI标签后的代码形式如:
引入ESI后,理想的页面框架应当是下图形式,各个组件的缓存周期都可以非常灵活的控制。
源站使用了ESI机制后,CDN的各服务节点也需要采用支持ESI的Cache服务器。下图给出了一个访问流程及处理机制的简单示意。
可以看出,CDN服务节点会在本地缓存整个页面,当响应用户请求、解析发现页面中的ESI标签时,会根据src指定的地址去源服务器请求动态内容,并将其整合到缓存页面中,再将完整的内容发送到客户端。由此可以有效地减少从源网站下载对象的数量,只需获取少量的动态内容即可,从而达到尽可能边缘服务、提升用户访问速度的目的。
ESI成为W3C标准已经超过10年时间了,国内有迹可查的像淘宝也早在2004年就开始应用ESI。但不可否认的一点是ESI在互联网上的应用还不是特别广泛。这里可能有两方面的原因:1)
对源站的页面设计及代码实现都提出了额外的要求;2)
WEB服务端软件对ESI的支持支持度不高,往往需要通过第三方模块来支持相关功能。
但不管怎样,ESI对于动态页面的缓存提供了一种完备且有效的技术,在实施网站优化时也不失为一种有价值的手段。
加载中,请稍候......