當我們在瀏覽器地址欄輸入www.baidu.com敲下回車鍵之后到瀏覽器顯示出百度首頁,這中間到底發(fā)生了什么呢?現(xiàn)在我從網(wǎng)站表層的角度給大家分析一下。首先大家要先了解一下URL的組成,請看這里。
域名解析
當我們敲下回車之后,瀏覽器會解析url的域名部分,為了加快速度,瀏覽器會按以下幾個步驟進行解析:
瀏覽器緩存 – 瀏覽器會緩存DNS記錄一段時間
系統(tǒng)緩存 - 從 Hosts 文件查找是否有該域名和對應 IP。
路由器緩存 – 一般路由器也會緩存域名信息。
ISP DNS 緩存 – 比如到電信的 DNS 上查找緩存。
如果都沒有找到,則向根域名服務器查找域名對應 IP,根域名服務器把請求轉發(fā)到下一級,直到找到 IP
服務器處理
得到IP地址之后,瀏覽器會訪問到該IP下的服務器并且發(fā)出請求。此時服務器上的web server會根據(jù)寫好的配置文件將請求分配給不同的程序,隨后程序會返回結果,通過web server響應給瀏覽器。(這里的程序其實指的就是我們編寫的后臺程序,大多數(shù)都采用MVC三層架構模式進行設計和實現(xiàn)。有關MVC的知識在這里就不再贅述,請大家自行百度。)
瀏覽器處理
最后一步是瀏覽器對服務器返回的HTML文件進行加載、解析和渲染。
瀏覽器對html的加載順序是自上而下的,但是遇到link標簽、script標簽和img標簽時會再次向服務器發(fā)出請求或缺css文件、js文件和圖片資源。
解析的過程,其實就是生成解析樹,即dom樹。dom樹是由dom元素及屬性節(jié)點組成,加上css解析的樣式對象和js解析后的動作實現(xiàn)。
而渲染,就是將DOM樹進行可視化表示。瀏覽器通過上面步驟計算得到渲染樹,是DOM樹的可視化表示,構建渲染樹使頁面以正確的順序繪制出來,遵循一定的渲染規(guī)則,經(jīng)過一系列的渲染工作,實現(xiàn)網(wǎng)站頁面的繪制,由此最終完成了頁面展示。