瀏覽器的渲染原理(簡化版)

  Web頁面運行在各類各樣的瀏覽器當中,瀏覽器載入、渲染頁面的速度直接影響着用戶體驗簡單地說,頁面渲染就是瀏覽器將html代碼根據CSS定義的規則顯示在瀏覽器窗口中的這個過程。先來大體瞭解一下瀏覽器都是怎麼幹活的:
  1. 用戶輸入網址(假設是個html頁面,而且是第一次訪問),瀏覽器向服務器發出請求,服務器返回html文件;
  2. 瀏覽器開始載入html代碼,發現<head>標籤內有一個<link>標籤引用外部CSS文件;
  3. 瀏覽器又發出CSS文件的請求,服務器返回這個CSS文件;
  4. 瀏覽器繼續載入html中<body>部分的代碼,而且CSS文件已經拿到手了,能夠開始渲染頁面了;
  5. 瀏覽器在代碼中發現一個<img>標籤引用了一張圖片,向服務器發出請求。此時瀏覽器不會等到圖片下載完,而是繼續渲染後面的代碼;
  6. 服務器返回圖片文件,因爲圖片佔用了必定面積,影響了後面段落的排布,所以瀏覽器須要回過頭來從新渲染這部分代碼;
  7. 瀏覽器發現了一個包含一行Javascript代碼的<script>標籤,趕快運行它;
  8. Javascript腳本執行了這條語句,它命令瀏覽器隱藏掉代碼中的某個<div> (style.display=」none」)。杯具啊,忽然就少了這麼一個元素,瀏覽器不得不從新渲染這部分代碼;
  9. 終於等到了</html>的到來,瀏覽器淚流滿面……
  10. 等等,還沒完,用戶點了一下界面中的「換膚」按鈕,Javascript讓瀏覽器換了一下<link>標籤的CSS路徑;
  11. 瀏覽器召集了在座的各位<div><span><ul><li>們,「大夥兒收拾收拾行李,咱得從新來過……」,瀏覽器向服務器請求了新的CSS文件,從新渲染頁面。html

  說到頁面爲何會慢?那是由於瀏覽器要花時間、花精力去渲染,尤爲是當它發現某個部分發生了點變化影響了佈局,須要倒回去從新渲染內行稱這個回退的過程叫reflow。 web

  reflow幾乎是沒法避免的。如今界面上流行的一些效果,好比樹狀目錄的摺疊、展開(實質上是元素的顯示與隱藏)等,都將引發瀏覽器的 reflow。鼠標滑過、點擊……只要這些行爲引發了頁面上某些元素的佔位面積、定位方式、邊距等屬性的變化,都會引發它內部、周圍甚至整個頁面的從新渲染。一般咱們都沒法預估瀏覽器到底會reflow哪一部分的代碼,它們都彼此相互影響着。瀏覽器

  reflow問題是能夠優化的 咱們能夠儘可能減小沒必要要的reflow。好比開頭的例子中的<img>圖片載入問題,這其實就是一個能夠避免的reflow——給圖片設置寬度和高度就能夠了。這樣瀏覽器就知道了圖片的佔位面積,在載入圖片前就預留好了位置。服務器

  另外,有個和reflow看上去差很少的術語:repaint,中文叫重繪。若是隻是改變某個元素的背景色、文字顏色、邊框顏色等等不影響它周圍或內部佈局的屬性,將只會引發瀏覽器repaint。repaint的速度明顯快於 reflow(在IE下須要換一下說法,reflow要比repaint 更緩慢)。下次將經過一系列的實驗說明在Firefox、IE等瀏覽器下reflow的優化。佈局

  文章參考:http://hi.baidu.com/zhoumm1008/blog/item/03fa88f97fe5ddebfd037f4b.html優化

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息