网页效率之DNS查找和并行下载
首先,一個頁面所需要訪問的域名數量為n,那么就需要n次DNS查找,而DNS查找通常是blocking call,就是說在得到結果之后才能繼續,所以越多的DNS查找,反應速度就越慢;
?
雅虎的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,那么就需要n次DNS查找,而DNS查找通常是blocking call,就是說在得到結果之后才能繼續,所以越多的DNS查找,反應速度就越慢;
?
其次,并行下載(parallel downloading)由兩個因素決定:到服務器的連接數量,以及每個連接內部的流水線請求數量。
?
一個頁面里到服務器的連接數量由兩個因素決定:
頁面所需訪問的域名數量,和瀏覽器所允許的最多連接數。
?
后者在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。
?
總結
以上是生活随笔為你收集整理的网页效率之DNS查找和并行下载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一天玩多久
- 下一篇: 汽车音响改装一般要多少钱?