瀏覽器的主要做用是將用戶輸入的「URL」轉變爲可視化圖像 ,其中包含兩個過程:javascript
從 URL到構建DOM樹
從DOM生成可視化圖像
網頁的渲染過程
網頁渲染有一個特性,一般視圖比屏幕可視化面積大。因此在渲染時通常
加入滾動條
,就用戶體驗來講,垂直方向的滾動條效果好過水平頁面的滾動條效果
這個過程當中的數據和模塊包括:css
從網頁的URL到構建完DOM樹
WebKit調用資源加載器加載該URL對應的網頁
依賴網絡創建鏈接
,發送請求並接受答覆。接受到各類網頁或者資源的連接
,其中某些資源經過同步或者異步獲取HTML解釋器解釋爲一系列詞語
根據詞語構建節點(NODE),造成DOM樹
。JavaScript代碼就調用JavaScript引擎解釋並執行
JavaScript代碼可能會修改DOM樹的結構
圖片,css ,視頻等,調用資源加載器來加載他們但這個過程異步的
,不會阻礙當前dom樹的構建,若是是javascript 資源url(沒有標記異步,經過async和defer)則須要中止當前DOM樹的建立 。直到js資源加載並執行完畢以後纔會繼續DOM樹的建立上述過程當中,網頁會發出「DOMConent」
和DOM onload
事件,分別在DOM樹構建完以後
,以及DOM樹建完而且網頁因此來的資源都加載完
以後發生,由於某些資源的加載並不會阻礙DOM樹的建立,因此這兩個事件多數時候不是同時發生的java
DOMConentLoad: DOM樹構建完以後
onload : DOM樹建完而且網頁因此來的資源都加載完
web
webkit利用cssTree和DOMTree構建renderTree 直到繪圖上下文
RenderObject樹的簡歷並不表示DOM樹會被銷燬,事實上,上圖中的四個內部結構一直存在,直到網頁被銷燬
,由於它們對於網頁的渲染起了很是大的做用瀏覽器
從繪圖上下文到最終的圖像(主要依賴2D和3D圖形庫)
上面介紹的是一個完整的渲染過程.現代網頁不少是動態網頁,這意味着在渲染完成以後,因爲網頁的動畫或者用戶的交互,瀏覽器其實一直在不一樣地重複執行渲染過程網絡
歡迎關注個人公衆號FE未道 ,不間斷更新, 咱們一塊兒腳踏實地,仰望星空。dom