最近研究css性能優化,明白了瀏覽器讀取css選擇器的順序是從右到左。可是爲何呢?這就涉及到了瀏覽器渲染頁面的順序,而關於瀏覽器的渲染,咱們首頁要了解瀏覽器的架構
瀏覽器構架圖
如上圖所示,瀏覽器主要由 用戶界面(User Interface), 瀏覽器引擎(Browser engine), 渲染引擎(Rendering engine), 網絡模塊(Networking),js解析器(Javascript Interpreter),用戶界面後臺(UI Backend)和數據持久層(Data persistence) 等幾部分組成。其中各模塊除了Browser engine是用來協調Render engine和UI層(也許還有別的層)的,UI Backend是用來繪製頁面上的各個組件的,其它模塊的用途都見名知義,因此也就很少說了。
OK,進入正題。從用戶在地址欄中輸入地址並按下回車,到他看到整個頁面的過程大體以下:
1.用戶在瀏覽器地址欄輸入地址,按下回車;
2. 瀏覽器向服務器發送請求,服務器響應請求並返回數據;(這其中的DNS解析,路由解析,服務器mvc請求分發,鏈接數據庫等一系列操做略過)
3.瀏覽器接收服務器傳回的html代碼,經過詞法解析和語法解析生成dom樹,生成dom樹期間,解析到link標籤則去下載相應的css文件,待全部外部css文件下載完成後,結合頁面中的style標籤和標籤行內style樣式,生成render樹. render樹包含了每一個dom節點的樣式信息(位置,大小,字體,背景等)。
4.結合dom樹和render樹繪製頁面,以下圖所示:

渲染引擎基本工做流程