本篇的議題如下:
剖析頁面的解析過程
分析出可能存在的優化點
剖析頁面的解析過程
頁面的解析過程,這裡說的過程不是我們常說的ASP.NET頁面的生命周期的過程,而且浏覽器請求一個 頁面,然後浏覽器呈現頁面的過程。
在本篇的文章中,我會先闡述頁面的解析過程,顯示從整體上闡述,然後在每一個點上提出優化的方 法。先整體,後局部。
當浏覽器在請求一個Web頁面是從URL開始的。下面就是過程描述:
1.輸入URL地址或者點擊URL的一個鏈接
2.浏覽器根據URL地址,結合DNS,解析出URL對應的IP地址
3.發送HTTP請求
4.開始連接請求的服務器並且請求相關的內容(至於請求時怎麼被處理的,我們這裡暫時不討論,只 是後面的文章要討論的問題)
5.浏覽器解析從服務器端返回的內容,並且把頁面顯現出來,同時也繼續進行其他的請求。
上面基本上就是一個頁面被請求到現實的過程。下面我們就開始剖析這個過程。
當輸入URL之後,浏覽器就要知道這個URL對應的IP是什麼,只有知道了IP地址,浏覽器才能准備的把 請求發送到指定的服務器的具體IP和端口號上面。
浏覽器的DNS解析器負責把URL解析為正確的IP地址。這個解析的工作是要花時間的,而且這個解析的 時間段內,浏覽器不是能從服務器那裡下載到任何的東西的。但是這個解析的過程是可以優化的。試想, 如果每次浏覽器每次請求一個URL都需要解析,那麼每次的請求都有一點的時間消耗,可能這個時間消耗 很短,但是性能的提升就是一點點的“調”出來的。如果把對應URL和IP地址緩存起來,那麼當再次請求 相同的URL時,浏覽器就不用去解析,而是直接讀取緩存,這樣勢必會快一點。
其實浏覽器和操縱系統是提供了這樣的支持的。
當獲得了IP地址之後,那麼浏覽器就向服務器發送HTTP的請求,下面我們就稍微看下這個發送請求是 怎麼樣被發送的:
1.浏覽器通過發送一個TCP的包,要求服務器打開連接
2.服務器也通過發送一個包來應答客戶端的浏覽器,告訴浏覽器連接開了。
3.浏覽器發送一個HTTP的GET請求,這個請求包含了很多的東西了,例如我們常見的cookie和其他的 head頭信息。
這樣,一個請求就算是發過去了。