不同瀏覽器的工作方式不完全一樣,大體上巍沙,瀏覽器的核心是瀏覽器引擎,目前市場占有率最高的幾種瀏覽器幾乎都使用了不同的瀏覽器引擎:IE使用的是Trident荷鼠、Firefox使用的是Gecko句携、Safari和Chrome使用的是Webkit。不同的瀏覽器引擎對W3C的規(guī)范支持不盡相同允乐。下面講訴瀏覽器從輸入URL地址開始到頁面完全可用的大致過程矮嫉。
1.連接到URL所在服務(wù)器
?? 用戶在地址欄中輸入一個URL削咆,并單擊GO按鈕要求瀏覽器打開該URL后,瀏覽器做的第一件事情是尋找該URL所在服務(wù)器蠢笋,通過向DNS服務(wù)器查詢拨齐,瀏覽器可以獲得該URL所在網(wǎng)站的IP地址。然后昨寞,瀏覽器向該地址發(fā)起連接請求瞻惋,建立到服務(wù)器的連接。
2.獲取頁面對應(yīng)的HTML文檔
?? 當連接建立后援岩,瀏覽器向服務(wù)器發(fā)送HTTP請求熟史,請求URL對應(yīng)的HTML文檔。不管請求的URL是一個靜態(tài)的HTML文件窄俏,還是一個動態(tài)腳本(ASPX蹂匹、PHP或JSP),服務(wù)器返回給瀏覽器的一定是HTML文檔凹蜈。該HTML文檔就是瀏覽器需要呈現(xiàn)的頁面
3.解析文檔并獲取所需要的資源
???瀏覽器在獲取HTML文檔后會對文檔進行解析限寞,目的是知道該頁面需要哪些資源以及生成DOM樹。生成DOM樹的工作與下載頁面上需要的其它資源同時進行仰坦。大致來說履植,瀏覽器會逐行分析HTML文檔,一旦發(fā)現(xiàn)一個標簽悄晃,就會根據(jù)標簽的要求分配對指定資源的下載玫霎。當DOM樹生成后,DOMContentLoaded事件被觸發(fā)妈橄。
??? 首先庶近,理論上瀏覽器并行下載頁面需要的所有資源會帶來最好的性能體驗,但由于服務(wù)器要保證對盡可能多的用戶的支持眷蚓,因此HTTP/1.1規(guī)定了每個客戶端只能與每個服務(wù)器建立2個連接鼻种。
??? 其次,并非所有的元件都可以被并行下載沙热。一般情況下叉钥,頁面中包含兩類需要被執(zhí)行的JavaScript腳本,一類是直接用<script>標簽標識的內(nèi)嵌的JS語句篙贸;另一類則是引用外部的JS文件
4.頁面上的JS文件與CSS文件
5.Onload事件
? 當HTML文檔解析完成投队,生成了DOM樹,所有頁面需要的資源文件都已經(jīng)成功下載和執(zhí)行后爵川,瀏覽器會發(fā)出Onload事件并回調(diào)HTML文檔中的onload函數(shù)敷鸦。
(轉(zhuǎn)載地址:https://www.cnblogs.com/jasonteststudy/p/4001630.html)
更加詳細內(nèi)容:
深入淺出經(jīng)典面試題:從瀏覽器中輸入URL到頁面加載發(fā)生了什么?
https://www.cnblogs.com/confach/p/10050013.html
參考閱讀:
https://blog.csdn.net/jeffleo/article/details/77151646
一個 TCP 連接上面能發(fā)多少個 HTTP 請求