不同瀏覽器的工作方式不完全一樣,大體上,瀏覽器的核心是瀏覽器引擎,目前市場占有率最高的幾種瀏覽器幾乎都使用了不同的瀏覽器引擎:IE使用的是Trident、Firefox使用的是Gecko、Safari和Chrome使用的是Webkit。不同的瀏覽器引擎對W3C的規范支持不盡相同。下面講訴瀏覽器從輸入URL地址開始到頁面完全可用的大致過程。
1.連接到URL所在服務器
用戶在地址欄中輸入一個URL,並單擊GO按鈕要求瀏覽器打開該URL后,瀏覽器做的第一件事情是尋找該URL所在服務器,通過向DNS服務器查詢,瀏覽器可以獲得該URL所在網站的IP地址。然后,瀏覽器向該地址發起連接請求,建立到服務器的連接。
2.獲取頁面對應的HTML文檔
當連接建立后,瀏覽器向服務器發送HTTP請求,請求URL對應的HTML文檔。不管請求的URL是一個靜態的HTML文件,還是一個動態腳本(ASPX、PHP或JSP),服務器返回給瀏覽器的一定是HTML文檔。該HTML文檔就是瀏覽器需要呈現的頁面
3.解析文檔並獲取所需要的資源
瀏覽器在獲取HTML文檔后會對文檔進行解析,目的是知道該頁面需要哪些資源以及生成DOM樹。生成DOM樹的工作與下載頁面上需要的其它資源同時進行。大致來說,瀏覽器會逐行分析HTML文檔,一旦發現一個標簽,就會根據標簽的要求分配對指定資源的下載。當DOM樹生成后,DOMContentLoaded事件被觸發。
首先,理論上瀏覽器並行下載頁面需要的所有資源會帶來最好的性能體驗,但由於服務器要保證對盡可能多的用戶的支持,因此HTTP/1.1規定了每個客戶端只能與每個服務器建立2個連接。
其次,並非所有的元件都可以被並行下載。一般情況下,頁面中包含兩類需要被執行的JavaScript腳本,一類是直接用<script>標簽標識的內嵌的JS語句;另一類則是引用外部的JS文件
4.頁面上的JS文件與CSS文件
5.Onload事件
當HTML文檔解析完成,生成了DOM樹,所有頁面需要的資源文件都已經成功下載和執行后,瀏覽器會發出Onload事件並回調HTML文檔中的onload函數。