瀏覽器併發連接數測試(IE、Firefox)

版權聲明:可以任意轉載,轉載時請務必以超鏈接形式標明文章原始出處和作者信息

一、測試思路

製作網頁若干,在一個域名(tt1.howmax.com)下放置20個不同文件名的圖片(URI不同)爲一組,先用一組測出瀏覽器的per host max數,再逐步增加組,測試瀏覽器process(thread) max數,最終網頁中圖片的總個數爲20×n組,請求期間在服務器端用netstat查看TCP連接情況,在客戶端用MS NetworkMonitor 3.3抓包分析,兩邊數據對照結合以確定TCP連接總數,以下是包含一組圖片的測試網頁截圖

二、測試詳細設定

服務器端
1、http服務器爲apache,在main server的document root下放測試用的網頁,避免爲不同域名配置vhost
2、增加一個圖片別名:AliasMatch ^/test/big.* /data1/apache2/htdocs/test/big1.jpg 避免圖片物理拷貝
3、確保KeepAlive打開,KeepAliveTimeout爲5秒,如果KeepAlive爲關閉,服務器完成一次響應後會主動關閉TCP連接

4、在請求期間用以下命令統計netstat,輸出的數字減1後爲當前與瀏覽器請求圖片而建立的TCP連接數,減1是因爲要html網頁請求建立的TCP連接,具體見下方截圖

netstat -a -t|grep http|tee rst.txt|wc -l

客戶端

1、配置host
192.168.1.101    tt1.howmax.com tt2.howmax.com .... tt10.howmax.com
2、MS NetworkMonitor中設置以下Capture Filter
(tcp.DstPort == 80 and ipv4.DestinationAddress == 192.168.1.101)
or
(tcp.SrcPort == 80 and ipv4.SourceAddress == 192.168.1.101)
在Display Filter中設置
contains(http.Request.HeaderFields.Host, "howmax")
3、其它:
a、per host定義:按域名而不是按IP作唯一host判定
b、process(thread):瀏覽器進程(線程),IE下一個window或者一個tab頁都表現爲一個process,而FF的內部處理機制與IE不同,FF的一個window爲一個process,tab不佔用process

以下是在W7中用IE8請求包含一組圖片的網頁(上方截圖的網頁)的netstat和MS Network Monitor抓包的截圖,在請求多組圖片時結果與一組類似,只是數量增加,這裏不再列舉



三、測試結果

1、IE7未做測試是因爲找不到合適的機器,有一個筆記本有IE7,但因爲機主工作需要做兼容性測試,安裝了Internet collection後懷疑被污染導致最後放棄了IE7的測試
   2、關於IE6、8的per host max,XP註冊表中的值與IE6實測結果一致,爲2個,但IE8在W7註冊表中寫着是6個,實際卻是16個

3、關於IE的process max,IE6最多在16個域名的情況下達到32(2×16)個連接,IE8在5個域名的情況下達到80(16×5)個連接,此後便沒有嘗試增加更多的 host測試,是否受系統的TCP最大連接數影響也沒有進一步驗證,考慮這年頭的迅雷、驢子等下載軟件都會主動幫用戶修改這個值,上限應該不是問題

4、IE的測試結果在不同的Windows發行版中可能不一致,例如在LCH的W7上測試時IE8就是10個MAX,但也不是傳說中的6個,FF則在XP, W7上都保持了一致,有興趣的同學可以自己測試一下

在測試的過程中順帶有以下發現

1、Windows7的host配置一行最多10個域名,第11個開始無效,需要另起一行再寫
2、關於網頁刷新,這個曾經網上看到有人說過,這裏可以再確認和補充一下
a、點擊“轉到”,在IE下不會發起任何請求,僅僅是重新渲染而已,但FF(3.5)有些不同,如果超過一定時間,會就地址欄中的URL發起一次請求,但不會對頁面元素髮起任何請求,如果不是304,則請求新增加的元素(僅僅請求新增加的元素),這裏的一定時間確切是多長也未知,感覺是1分鐘
b、按F5或者點擊“刷新”按鈕,會將現有所有內容與服務器確認,也就是發起的HTTP請求頭中包含If-Modified-Since和If-None-Match這兩個字段,服務器依據這兩個字段進行對比,瀏覽器收到304響應則不再重新獲取
c、Ctrl + F5則是所有內容都重新加載,服務器不會有304響應,因爲這時發起的HTTP請求頭中沒有If-Modified-Since和If-None-Match這兩個字段
d、在地址欄輸入相同地址(或者選中、回車),等同於與“轉到”
測試一段時間後發現,對於“併發連接”這個概念,從瀏覽器的角度來說可能有不同的理解,這篇文章說的併發連接主要是網絡層面的TCP連接,在用了dynaTrace 後發現也可以理解爲瀏覽器內部的渲染線程,但無論怎麼理解,根據以上的測試結果來看,以後估算服務器的hits量時是需要更新估值了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章