一:網頁整體 分析
1:總用時
2:未知
3:總下載數據量
4:總上傳數據量
5:未知
6:DNS 查詢次數
7:TCP查詢次數
二:速度分析
1:阻塞時長 訪問請求前的所用時間,比如等待有效TCP連接。瀏覽器TCP的併發數有限。
2:connect TCP連接時間
3:get/post 時長
4:服務器響應時長
5:下載時長
6:第一個數據包達到時長 6=2+3+4
7:整個網絡過程時長 7=6+5
三:HTTP報頭分析
1:左邊分析
accept-Encoding
也就是說當服務器返回的是用gzip或deflate協議進行壓縮過的內容, 瀏覽器將自動的進行解壓縮 . 這樣做可以節省大量的網絡帶寬,負面影響是加重了服務器的負擔。
connect: keep-active 還有close
resin 處理流程
<!-- Configures the socket timeout -->
<socket-timeout>65s</socket-timeout>
<!-- Configures the keepalive -->
<keepalive-max>32</keepalive-max>
<keepalive-timeout>5s</keepalive-timeout>
1.處理完成http請求
2.等待keepalive-timeout秒,如果在這個等待中收到後繼的http請求,則跳轉到1
3.進入keepalive等待過程,超時時間是socket-timeout秒。如果有後繼請求,則跳轉到1
4.線程釋放到線程池
TCP連接方式 增加keep-active值可以減少TCP連接次數,DNS查詢次數。
2:右邊分析
max-age:總有效時長(s) 源服務器設置。
Age: 已過時間(s) 這個值CDN計算出的。
瀏覽器會根據max-age age ,expires 計算緩存是否有效。max-age,age級別高於expires,expires是以時間點爲基準,時間點在一些情況下不準(本機的系統設置等)。
Cache-crontrol max-age 最長的有效時間 有服務器端設置 CDN不修改
Date: CDN或者瀏覽器從源站讀取的時間(服務器的時間)
Etag:
服務器首先產生ETag,服務器可在稍後使用它來判斷頁面是否已經被修改。本質上,客戶端通過將該記號傳回服務器要求服務器驗證其(客戶端)緩存。
其過程如下:
客戶端請求一個頁面(A)。 服務器返回頁面A,並在給A加上一個ETag。 客戶端展現該頁面,並將頁面連同ETag一起緩存。 客戶再次請求頁面A,並將上次請求時服務器返回的ETag一起傳遞給服務器。 服務器檢查該ETag,並判斷出該頁面自上次客戶端請求之後還未被修改,直接返回響應304(未修改——Not Modified)和一個空的響應體。
etag的優先級高於 not modified
區別 etag 用於標示 文件本身的一些描述信息,可以自己寫算法實現。
如:apache2 中定義的是 3段 inode-size-timestamp
inode 存儲文件的 類型,所有者,組,訪問模式
size 存儲文件的大小
timestamp 存儲的是文件內容被修改的時間戳
什麼情況下使用 etag:
1:一些文件也許會週期性的更改,但是他的內容並不改變(僅僅改變的修改時間),這個時候我們並不希望客戶端認爲這個文件被修改了,而重新GET。
2:某些文件修改非常頻繁,比如在秒以下的時間內進行修改,(比方說1s內修改了N次),If-Modified-Since能檢查到的粒度是s級的。if-non-math的顆粒是SS級的。
爲提高訪問速度,提高性能,最好把etag關閉 apache 方法:在配置文件中加入 FileETag none
Expires:源站設置的的實效時間點
Last-Modified :文件最後一次修改時間
X-Cache :表示你的 http request 是由 proxy server 回的
四:性能優化
1:減少DNS查詢次數,響應時間
增加TTL值 time-to-live 值 緩存時間。有域名解析設置,告知域名解析服務器緩存多長時間,域名解析服務器,通過換算出有效的緩存時長,告知瀏覽器。
增加keep-alive 時長 TCP連接時間長 DNS不在查詢,TCP不用再重新連接。
配置響應速度快的DNS服務器。
IE4.x以上的緩存機制 默認緩存30分鐘。如果服務器設置的TTL<30分鐘,將以30分鐘爲準。
參考:support.microsoft.com/kb/263558/zh-cn
註冊表地址 HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings
DnsCacheTimeout 默認值 30分鐘
如果IE緩存實效後查找windows系統自身的DNS client 緩存。
瀏覽器重啓會失效,超過瀏覽器的DNS記錄的數量會失效。
ServerInfoTimeOut 默認值爲2分鐘,即:如果至少每2分鐘重用一個主機名,將超過30鐘不需要DNS查詢。
windows DNS client 系統服務
緩存的時長在與 DNS 資源記錄相關聯的生存時間 (TTL) 中指定。
cmd --》 ipconfig/displaydns 查看緩存的DNS記錄 ipconfig/flushdns 刷新緩存使其失效
註冊表 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/DNSCache/Parameters
在註冊表中找到並單擊以下項:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Dnscache/Parameters
|
|
在“編輯”菜單上,指向“新建”,單擊“DWORD 值”,然後添加下列註冊表值:
數值名稱:MaxCacheTtl 以後還需要繼續研究,不太清楚IE,DNS client緩存的機制,我測試都是按TTL走的。 |
2:增加單個TCP的使用時長,增加TCP併發連接數,減少TCP連接響應時間
增加keep-alive值可以增加單個TCP的使用時長。
增加併發數,可以更多的請求分佈式的資源數據,加快下載,顯示等速度。
分佈式部署服務器,做最後一公里原則,選擇優質帶寬。
IE: 註冊表信息KeepAliveTimeout 默認爲1分鐘,即TCP連接空閒超過1分鐘就斷開,未斷開的情況下DNS不再查詢。
3:減少服務器響應時間
部署高配服務器,做系統集羣,分佈式系統等,優化軟件(數據庫緩存,頁面靜態化等)
4:減少下載時長
優質帶寬資源,同2. 網頁組件壓縮gzip等,網頁組件製作要求。
5:減少頁面的顯示加載時長
將頁面按DIV+table結構製作,實現部分加載。
做網頁組件(如:圖片等) 客戶端緩存,從本地讀取數據。