Answers:
@toomanyairmiles是部分正确的-此技术的目的是允许从Web浏览器到服务器的并行连接。Web浏览器至少应允许到一个主机的两个同时连接,但是许多新的浏览器最多可以管理60个。无论如何,浏览器与Web服务器之间的并发同时连接是主要的速度瓶颈。
来自Google的资源:
HTTP 1.1规范(第8.1.4节)规定,浏览器每个主机名最多应允许两个并发连接(尽管较新的浏览器允许更多的并发连接:请参阅Browserscope列表)。如果HTML文档所包含的对资源的引用(例如CSS,JavaScript,图像等)超出一台主机上所允许的最大值,则浏览器将发出对该数量资源的请求,并将其余资源排队。一旦某些请求完成,浏览器就会发出对队列中下一个资源数量的请求。重复该过程,直到下载了所有资源。换句话说,如果页面从单个主机引用的X个外部资源超过X个,其中X是每个主机允许的最大连接数,则浏览器必须顺序下载它们,一次X个,每X个资源产生1个RTT。总往返时间为N / X,其中N是要从主机获取的资源数。例如,如果浏览器每个主机名允许4个并发连接,并且页面引用同一域中的100个资源,则每4个资源将产生1个RTT,总下载时间为25个RTT。
因此,解决此问题的方法是将请求“分片”到不同的域或主机:
同样,来自相同的Google资源:
平衡主机名之间的可并行化资源。 对大多数静态资源(包括图像,CSS和其他二进制对象)的请求可以并行化。尽可能平衡主机名对所有这些对象的请求。如果不可能,作为经验法则,请尝试确保没有一台主机的服务比所有主机的平均服务多50%。因此,例如,如果您有40个资源和4个主机,则理想情况下,每个主机应提供10个资源。在最坏的情况下,没有主机可以提供超过15个资源。如果您有100个资源和4个主机,则每个主机应提供25个资源。没有人可以为38人提供服务。
但是,这个难题还有另外一块。每个请求通常带有其自身的开销,通常以cookie的形式。静态元素(例如图像,CSS和JavaScript)不需要传输cookie数据,因此从无cookie(子)域提供它们可以提高往返速度:
静态内容(例如图像,JS和CSS文件)不需要附带Cookie,因为用户无需与这些资源进行交互。您可以通过不提供Cookie的域提供静态资源来减少请求延迟。对于引用大量很少缓存的静态内容(例如,频繁更改的图像缩略图或不经常访问的图像档案)的页面,此技术特别有用。对于任何提供5种以上静态资源的页面,我们建议使用此技术。(对于服务于此资源较少的页面,不值得设置额外的域。)
要保留无cookie的域来提供静态内容,请注册一个新域名,并使用CNAME记录配置DNS数据库,该记录会将新域指向您现有的域A记录。配置您的Web服务器以提供来自新域的静态资源,并且不允许在该域的任何位置设置任何cookie。在您的网页中,在URL中引用静态资源的域名。
过去,Web浏览器一次只能下载两个项目(现在为6个或更多),因此从各个域下载资源比单个域下载速度更快。这适用于从图像到JavaScript的所有内容。
许多公司还使用CDN(一种可确保最终用户从地理位置上与他们接近的服务器上获取数据)的工具,它还可以通过减少资源请求的往返时间来提高站点性能。
2项限制不再是问题。虽然这是HTTP规范的建议,但所有现代浏览器都至少允许6个并发连接。