HTML的解析和css的迴流與重繪的本身初略理解

       在別人的博客上看到了一篇講的很生動的網頁解析HTML的原理,而且還初步的說了一下css在渲染時候出現的reflow(迴流)和repaint(重繪)。如下爲引用他人博客中的內容。渲染就是瀏覽器把HTML代碼以css定義的規則顯示在瀏覽器窗口的過程。簡單的說說本身對瀏覽器解析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文件,從新渲染頁面。
     從上面的過程能夠看出,當頁面的佈局發生變化時,瀏覽器會回過頭來從新渲染,這就是頁面爲何會慢的一個緣由,當一個點的變化影響了佈局,這就會使得要倒回去從新渲染,這個倒回去的過程稱爲 reflow(迴流)。

                         

       reflow幾乎是沒法避免的,頁面上有樹狀摺疊和展開效果時,當咱們鼠標滑過或者是點擊只要影響了頁面的佈局,讓某些元素改變了佔位面積,定位,邊距等屬性時,就會引發某個部分或者整個頁面從新渲染。一般咱們是不能預計瀏覽器是會reflow哪一個部分的代碼。 html

                           

        reflow問題也是能夠優化的,減小reflow是頗有必要的,好比給圖片設定好寬度和高度,這樣就能夠把圖片的佔位面積預約好。 瀏覽器

       另外還有一個是repaint(重繪),當只改變背景顏色,文字顏色,邊框顏色而不改變頁面佈局時,瀏覽器就會repaint。repaint的速度明顯比reflow的速度快。 服務器

       最後說一下,瀏覽器的不一樣,解析的方式也會有差異。 佈局

相關文章
相關標籤/搜索