面試經典之瀏覽器渲染流程
由於瀏覽器的載入、解析、渲染是一個較為複雜的過程,本文將這三部分拆解開來,僅對瀏覽器渲染部分進行講解。如有錯誤,歡迎指正。
1.第一階段:構建DOM樹
1.進入正題,當網頁輸入URL時候,瀏覽器呼叫相應的資源載入器。
2.載入器依賴網頁模組建立連線,發起請求並接受回覆。
3.瀏覽器接收到各種網頁或者資源的資料,其中某些資源可能是同步的也可能是非同步的。
4.網頁被載入給html直譯器變為一系列的詞語(token)。
5.解析器根據詞語構建節點node,形成DOM樹。
6.如果節點是js程式碼的話則呼叫js引擎解釋執行並且阻塞DOM樹的構建與渲染(js程式碼可能會修改DOM樹的結構)。
7.如果節點需要依賴其他資源,例如圖片,CSS,視訊等,呼叫資源載入器載入他們,此過程為非同步,不會阻礙當前DOM樹的構建(CSS載入不會阻礙DOM樹的構建,但會阻塞渲染)。對於js資源的載入,則會阻塞DOM樹的構建和渲染,除非設定了script標籤的非同步屬性。特別的,載入資源是由單獨的下載執行緒進行非同步載入,瀏覽器會並行載入,不過具體並行最大載入數量是有一定限制的。
2.第二階段:構建CSS規則樹
與DOM樹的構建基本相同,都是要經過 Bytes→Characters→Tokens→Nodes→Objectmodel這個過程。但值得注意的是,CSS是一種渲染阻塞資源(render blocking resource),它需要完全被解析完畢後才能進入生成渲染樹的環節。
3.第三階段:CSS和DOM樹生成Render樹
1.DOM樹從根節點開始遍歷可見節點(script,meta,head等除外,visibility:hidden;opacity:0這種仍佔據空間的節點除外),瀏覽器會建立RenderObject物件,該物件儲存了為繪製DOM節點所必須的各種資訊,例如樣式佈局資訊
2.RenderObject物件構成一顆基於DOM樹的新樹,為了佈局計算和渲染等機制建立的一種新的內部表示。如果DOM樹中添加了新的節點,瀏覽器也需要建立相應的RenderObject物件。
4.第四階段:生成佈局(Generating the Layout)
有了各個節點的樣式資訊和屬性,但不知道各個節點的確切位置和大小,所以要通過佈局將樣式資訊和屬性轉化為實際可視視窗的相對大小和位置。可視視窗大小是由meta標籤的name屬性為viewport的內容設定所決定的,如果缺少這個標籤,預設的視口大小為980px。
5.第五階段:繪製(Painting)
最後,頁面上可見的內容就會通過GPU轉化為螢幕上的畫素點。繪製過程所需要花費的時間取決於DOM的大小以及元素的CSS樣式。有些樣式比較耗時,比如一個複雜的漸變背景色比簡單的單色背景色需要更多的渲染時間。
6.第六階段:迴流(reflow)與重繪(repaint)
當元素的內容、結構、位置、或尺寸發生了變化,需要重新計算元素樣式(reflow)。
當元素的樣式(背景色、邊框顏色、文字顏色等)發生變化,需要重新繪製元素(repaint)。
需要注意的是當出發reflow時都會觸發repaint,但是repaint不一定觸發reflow,即重繪可以單獨觸發。
相關推薦
面試經典之瀏覽器渲染流程
由於瀏覽器的載入、解析、渲染是一個較為複雜的過程,本文將這三部分拆解開來,僅對瀏覽器渲染部分進行講解。如有錯誤,歡迎指正。1.第一階段:構建DOM樹1.進入正題,當網頁輸入URL時候,瀏覽器呼叫相應的資源載入器。2.載入器依賴網頁模組建立連線,發起請求並接受回覆。3.瀏覽器接
瀏覽器渲染流程
幾何 ron som richtext 重繪 操作 不顯示 兄弟節點 知識 webkit瀏覽器渲染的主要流程圖示: 渲染的主要流程: 1. 瀏覽器會將HTML解析成一個DOM樹,DOM 樹的構建過程是一個深度遍歷過程:當前節點的所有子節點都構建好後才會去構建當前節
簡單梳理下瀏覽器渲染流程
- 瀏覽器輸入url,瀏覽器主程序接管,開一個下載執行緒,然後進行 http請求(略去DNS查詢,IP定址等等操作),然後等待響應,獲取內容,隨後將內容通過RendererHost介面轉交給Renderer程序- 瀏覽器渲染流程開始 瀏覽器器核心拿到內容後,渲染大概可以劃分成以下幾個步驟:
瀏覽器渲染流程和重繪,迴流
1、渲染大致流程 渲染引擎首先通過網路獲得所請求文件的內容,渲染引擎在取得內容之後的基本流程: ①解析html以構建dom樹 ②構建render樹 (render tree一般翻譯為渲染樹) ③佈局render樹  
[摘錄]How browsers work之頁面渲染流程
在研究瀏覽器是如何渲染頁面時,意外發現了國外一篇講解瀏覽器工作原理的文章,更幸運的是國內的“攜程設計委員會”已經將該文章的一部分翻譯成中文,但讓人鬱悶的是該委員會並沒有把這篇文章完整翻譯完成,而且也沒有要翻譯完的跡象。 這篇文章把瀏覽器工作
web【乾貨】十分鐘讀懂瀏覽器渲染流程
瀏覽器主要元件結構(瀏覽器主要元件)渲染引擎——webkit和GeckoFirefox使用Geoko——Mozilla自主研發的渲染引擎。Safari和Chrome都使用webkit。Webkit是一款開源渲染引擎,它本來是為linux平臺研發的,後來由Apple移植到Mac
1.計算機圖形學之Opengl渲染流程
Cpu: FBX -Meshrender Fbx obj : 模型檔案,裡面包含了 uv 頂點位置 ,法線、切線等渲染所需要的資訊。 MeshRender : 將這些資訊傳遞到GPU 。 skin mesh render / mesh render,m
前端系統複習之瀏覽器渲染機制
二面的內容: 渲染機制 JS 執行機制 頁面效能 錯誤監控 本文接下來講渲染機制。 渲染機制包括的內容: 什麼是DOCTYPE及作用 瀏覽器渲染過程 面試經常會問:在瀏覽器中輸入url,發生了哪些事情。其中有一部就是瀏覽器的渲染過程。
面試經典問題-瀏覽器輸入一個網址後發生什麼
1.輸入網址,鍵盤的終端輸入的資料流 2.瀏覽器通過DNS查詢域名的IP地址 DNS查詢過程如下: 1.瀏覽器快取-瀏覽器會快取DNS記錄一段時間 2.系統快取-若在瀏覽器中沒有找到需要的記錄,瀏覽器會做一個系統呼叫,利用gethostbyname,獲得系統的快取中的
vlc之d3d渲染流程
由於工作需要,最近在研究YUV420P格式的視訊的渲染,決定採用vlc的渲染機制進行,這裡記錄d3d的流程大的流程如下:開啟和關閉定義:static int Open(vlc_object_t *); static void Close(vlc_object_t *);設定
視頻教程:Java七大外企經典面試套路之基礎篇
視頻教程:Java七大外企經典面試套路之基礎篇 視頻教程:Java七大外企經典面試套路之基礎篇 Java是Sun公司推出的一種編程語言。它是一種通過解釋方式來執行的語言,語法規則和C++類似。同時,Java也是一種跨平臺的程序設計語言。 本教程主要給
瀏覽器渲染之重繪重排
重繪和重排定義 重繪:當渲染樹中的元素外觀(如:顏色)發生改變,不影響佈局時,產生重繪 迴流:當渲染樹中的元素的佈局(如:尺寸、位置、隱藏/狀態狀態)發生改變時,產生重繪迴流 注意:JS獲取Layout屬性值(如:offsetLeft、scrollTop、ge
面試題之從敲入 URL 到瀏覽器渲染完成
前言 小汪最近在看【WebKit 技術內幕】一書,說實話,這本書寫的太官方了,不通俗易懂。但是看完書,對瀏覽器核心的 WebKit 有了進一步的瞭解,所以從瀏覽器核心出發,寫這篇文章以記錄學到的知識,以加深對 WebKit 的理解。 相信很多開發人員在面試時都遇到
瀏覽器渲染機制之渲染過程
瀏覽器渲染流程 1. 當瀏覽器已得到HTML的時候,會經過內建的HTML的解析器,把HTML解析成DOM 樹 2. 與此同時,也會對CSS檔案,通過CSS的解析器生城CSSOM樹 3. 之後把它們合成為渲染樹,但是這裡的渲染樹只是一個大概的頁面結構,對於頁面
react精華之next.js getInitialProps自動切換服務端渲染和瀏覽器渲染 而不需要同時使用渲染
我們已經知道了伺服器端渲染的原理,你只需要搭建一個 Express 伺服器,在伺服器端手工打造『脫水』,在瀏覽器端做『注水』,完成某個頁面的伺服器端渲染並不難。 不過,伺服器端渲染的問題並不這麼簡單,一個最直接的問題,就是怎麼處理多個頁面的『單頁應用』(Single-Page-Applicati
瀏覽器渲染頁面的整個流程
瀏覽器渲染頁面的整個流程 使用者輸入網址(假設是個 html 頁面,並且是第一次訪問),瀏覽器向伺服器發出請求,伺服器返回 html 檔案; 瀏覽器開始載入 html 程式碼,發現<head>標籤內有一個<link>標籤引用外部 CSS 檔案;
前端面試總結之http、html和瀏覽器
前言:本文是轉載文,文章中的'我'指原作者 1.http和https https的SSL加密是在傳輸層實現的。 (1)http和https的基本概念 http: 超文字傳輸協議,是網際網路上應用最為廣泛的一種網路協議,是一個客戶端和伺服器端請求和應答的標準(TCP),用於從WWW伺服
前端面試-瀏覽器渲染機制
在開發WEB應用整一個流程中,使用者體驗通常都會被提及,而網站的效能,又是與使用者體驗直接掛鉤,因此可以在專案需求規格文件中經常看到專案對效能的需求。 WEB效能優化常見的入手點包括以下幾點: 1、 HTTP請求 2、 伺服器響應速度 3、 瀏覽器響應速度 其中瀏覽器
瀏覽器渲染原理(效能優化之如何減少重排和重繪)
繼續上篇《瀏覽器位址列裡輸入URL後的全過程》 前言 為什麼要了解瀏覽器的渲染原理?瞭解瀏覽器的渲染原理有什麼好處?我們做前端開發為什麼非要了解瀏覽器的原理?直接把網頁做出來,什麼需求,直接一把梭,擼完收工不好嗎。 但是經常會有人會問,什麼是重排和重繪? 重排也叫迴流(Re
瀏覽器渲染機制之重排Reflow
什麼是Reflow? DOM結構中每個元素都有自己的盒子模型,都需要瀏覽器根據各種樣式來計算並根據計算結果將元素放到它該出現的位置, 這個過程稱之為reflow 什麼時候會觸發Reflow? 修改Dom節點 移動Dom位置、或是動畫 修改CSS樣式 resize視窗,