构建高性能Web站点
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 等待的真相

整个过程听起来好像并不复杂,也许你从来都没有考虑过在这段等待的时间里世界都发生了什么变化,也许你早已习惯了利用这段时间东张西望或者品尝零食,或者你根本没有来得及意识到这点,新的网页就已经闪亮登场,恭喜你,你很幸运!但是在这个世界上,幸运儿永远只占少数,大多数人的大脑处理速度已经让他们明显感觉到这段等待时间漫长无比,久经考验的他们可以随时身手敏捷地打开多个浏览器窗口与时间赛跑,并为此筋疲力尽。

另一方面,对于站点经营者来说,让用户等待的时间过长,也许会造成毁灭性的后果。我见过很多人为了享用某家特色小吃而在餐馆门口乐此不疲地排着长队,但没有听说有多少用户执著地等待着一个速度缓慢的站点而不去尝试别的站点。

在这段等待的时间里,到底发生了什么?事实上这并不简单,大概经历了以下几部分时间:

● 数据在网络上传输的时间

● 站点服务器处理请求并生成回应数据的时间

● 浏览器本地计算和渲染的时间

数据在网络上传输的时间总的来说包括两部分,即浏览器端主机发出的请求数据经过网络到达服务器的时间,以及服务器的回应数据经过网络回到浏览器端主机的时间。这两部分时间都可以视为某一大小的数据从某主机开始发送一直到另一端主机全部接收所消耗的总时间,我们称它为响应时间,它的决定因素主要包括发送的数据量和网络带宽。数据量容易计算,但是究竟什么是带宽呢?我们将在后续章节中详细介绍带宽的本质。

站点服务器处理请求并生成回应数据的时间主要消耗在服务器端,包括非常多的环节,我们一般用另一个指标来衡量这部分时间,即每秒处理请求数,也称吞吐率,注意这里的吞吐率不是指单位时间处理的数据量,而是请求数。影响服务器吞吐率的因素非常多,比如服务器的并发策略、I/O模型、I/O性能、CPU核数等,当然也包括应用程序本身的逻辑复杂度等。这些将在后续章节中详细介绍。

浏览器本地计算和渲染的时间自然消耗在浏览器端,它依赖的因素包括浏览器采用的并发策略、样式渲染方式、脚本解释器的性能、页面大小、页面组件的数量、页面组件缓存状况、页面组件域名分布以及域名DNS解析等,并且其中一些因素随着各厂商浏览器版本的不同而略有变化。这部分内容我们在后续章节中也会适当提到。

可见,一个页面包含了若干个请求,每个请求都或多或少地涉及以上这些过程,假如有一处关键环节稍加拖延,整体的速度便可想而知。

现在,如果有用户向你抱怨在打开站点首页的时候等待了很久,你知道究竟慢在哪里了吗?