高性能网站建设指南(三)添加Expires头

如何配置组件,使其能够最大化地利用浏览器的缓存能力来改善页面的性能。如今的Web页面都内包含了大量的组件,并且其数量在不断增长。页面的初访者会进行很多HTTP请求,但通过使用一个长久的Expires头,可以使这些组件被缓存。这会在后续的页面浏览中避免不必要的HTTP请求。长久的Expires头最常用于图片,但应该将其用在所有的组件上,包括脚本、样式表和Flash。

Expires头(Expires Header)

浏览器(和代理)使用缓存来减少HTTP请求的数量,并减小HTTP响应的大小,使Web页面加载得更快。Web服务器使用Expires头来告诉Web客户端它可以使用一个组件的当前副本,直到指定的时间为止。

Max-Age和mod_expires

HTTP1.1引入了Cache-Control头来克服Expires头的限制。因为Expires头使用一个特定的时间,它要求服务器和客户端的时钟严格同步。

换一种方式,Cache-Control使用max-age指令指定组件被缓存多久。它以秒为单位定义了一个更新窗。如果两者同时出现,HTTP规范规定max-age指令将重写Expires头。

mod_expires Apache模块使你在使用Expires头时能够像max-age那样以相对的当时设置日期。这通过Expires-Default指令来完成。

跨浏览器改善缓存的最佳解决方案就是使用由ExpiresDefault设置的Expires头。

空缓存 VS 完整缓存(Empty Cache VS. Primed Cache)

空缓存和完成缓存,指的是与你野蛮相关的浏览器缓存的状态。如果你的页面中的组件没有放在缓存中,则缓存为“空”。反之,如果你的页面中的可缓存组件都在缓存中,则缓存是“完整的”。

空缓存或完整缓存页面浏览的数量取决于Web应用程序的本质。

不仅仅是图片(More Than Just Images)

为图片使用长久的Expires头非常之普遍,但这一最佳实践不应该仅限于图片。长久的Expires头应该包含任何不经常变化组件,包括脚本、样式表和Flash组件。但是,HTML文档不应该使用长久的Expires头,因为它包含动态内容,这些内容在每次用户请求时都降被更新。

修订文件名(Revving Filenames)

如果将组件配置为可以由浏览器代理缓存,当这些组件改变时用户如何获得更新呢?

为了确保用户能获取组件的更新版本,需要在所有的HTML页面中修改组件的文件名。嵌入版本好不仅可以改变文件名,还能在 调试时更容易地找到准确的源代码文件。


Copyright © 2018 Darkerxi