域名合并与并行下载

YSlow规则之一:Rule 9 – Reduce DNS Lookups提到:

Reducing the number of unique hostnames has the potential to reduce the amount of parallel downloading that takes place in the page. Avoiding DNS lookups cuts response times, but reducing parallel downloads may increase response times. My guideline is to split these components across at least two but no more than four hostnames. This results in a good compromise between reducing DNS lookups and allowing a high degree of parallel downloads.

首先:在浏览器里面加载一个页面,所需要访问的域名数为n,那么完成这次加载就需要而DNS查找通常是blocking call,就是说在查询得到结果之后才能继续,所以越多的DNS查找,反应速度就越慢;

其次:浏览器并行下载(parallel downloading)由两个因素决定:

到服务器的连接数量,以及每个连接内部的流水线请求数量。

一个页面里到服务器的连接数量由两个因素决定:

1. 页面所需访问的域名数量,
2. 浏览器所允许的最多连接数

后者在Mozilla/Firefox中还由浏览器所允许最多连接数(network.http.max-connections,缺省为24),和每个服务器所允许的最大连接数(network.http.max-connections-per-server,缺省为8)决定。如果max-connection-per-server是m,那么一个需要访问n个不同域名的主机的页面,最多可以有n*m个连接 - 前提是n*m小于max-connections的值;

每个连接内部的流水线请求(pipelined requests)的数量也是浏览器的参数(Firefox上由network.http.pipelining来设置,缺省为4),前提是服务器支持persistent connection(比如在Apache设置KeepAlive为On)。之前的例子就不需要那么多的连接了(对服务器和浏览器来说,一个连接里多个流水线请求能够比多个并行连接更好些),假设pipelining的值为p,那么就可以只使用n*m/p个连接了。(BTW,对Firefox做优化的一些插件其实就是对上面的几个设置做调整)

所以减少页面内不同hostname的数量不一定会减少并行下载的数量,也要看所需要的请求(css, javascript, 图片等)的数量,因此YSlow的解释说是potentially。

今天遇到的问题是:审核图片的同学们遇到的,审核后台页面上会显示100张图,每张大小大概在25K,

由于此前审核的同学们还是查那些没合并的域名,所以问题不大,但是现在开始报告说慢了。(首先他们分部网络有问题,部分丢包)

他们那边用opera 浏览器(不知为撒他们统一用opera了),

建议他们临时修改下firefox的参数,

network.http.max-connections (浏览器所允许最多连接数 ,缺省为24)
改成1000
network.http.max-connections-per-server (和每个服务器所允许的最大连接数 缺省为8)
改成50

network.http.max-persistent-connections-per-server,改成50

后来,那边反应说快些了。

关于浏览器的并行下载数:浏览器的并行下载进程数 (firefox默认最多为6个,IE8据说最多为8个,opera 9和Safari最多 为4个)



一条评论 发表在“域名合并与并行下载”上

  1. boluor CHINA Mozilla Firefox Ubuntu Linux 说:

    我FiF中network.http.max-connections默认值是30,version:3.5.7 under ubuntu

留下回复