《High Performance Web Sites》是我在借阅《Clean Code》时偶遇的一本小书。看见此书只觉得十分喜欢,就借了来。它同《Don’t Make Me Think》一样的薄,一样的是由各种 Tips 组成。 《High Performance Web Sites》通过数据和图表证明 —— 80 - 90% 的网页加载时间都卡在前端上面。要优化网站速度,最有效最省力的方法,自然是从前端下手。该书试图从 HTTP 的角度,给出好多优化网站加载速度的点子,不一定每一条都适合每个网站,但是总有几条能给每个网站带来巨大的收益。 这几天略翻了引言部分的 Chapter A 和 Chapter B。 Chapter A 用调查图表总结了前端表现的重要性。总结成一句话,就是 “用户终端响应时间只有 10-20% 花在下载HTML文档上,其余 80-90% 都花在下载页面的组件上”。这里的“组件”包括图片等。 Chapter B 概要介绍了 HTTP 协议的相关内容。主要介绍了各种 GET 请求和响应的 headers。 首先是一般的 GET 请求和回应的 Headers,如上图所示。向右的箭头是请求,下同。
为了节约浏览和时间,可以压缩后传输。上图所示就是压缩传输的请求和回应的 Headers。压缩传输的概念在《CSS Mastery》里面(读书笔记)也有提到。传输的内容是否压缩的信息就包含在如图所示的 HTTP 头里面。
上图所示是一种有条件的 GET 请求及其回应的 Headers。浏览器在加载图片的时候往往会这样请求。其中, If-Modified-since 后面的内容是向服务器确认浏览器缓存中的内容是否过时。如果不过时,返回的就是如上图所示的 304 Not Modified。
同样,如果过时,返回的就是如上图的 200 OK。
另外,HTTP 的早期实现是,每遇到一个 HTTP 请求就打开一个新的 socket 连接。而 HTTP 的很多请求都是在同一个服务器上的,因此这样比较低效。这时改进的方法是,如上图,向服务器请求时使用 keep-alive 的 Connection header。不需要时发送 Connection: close header。 理论上,HTTP/1.1 是不需要发送上图所示的 keep-alive 信息的,但是很多浏览器依然要求(本书影印版出版日期 2008 年 5 月)。 最后,Chapter B 推荐了进一步了解 HTTP 协议的读物,分别为 HTTP specification (http://www.w3.org/Protocols/rfc2616/rfc2616.html),还有 David Gourley 和 Brian Totty 的 HTTP: The Definitive Guide (O’Reilly; http://www.oreilly.com/catalog/httptdg)。