網頁渲染流程
『壹』 誰知道 html和css的全部渲染過程,從解析html 開始到渲染結束
1.瀏覽器載入和渲染html的順序
1、IE下載的順序是從上到下,渲染的順序也是從上到下,下載和渲染是同時進行的。
2、在渲染到頁面的某一部分時,其上面的所有部分都已經下載完成(並不是說所有相關聯的元素都已經下載完)
3、如果遇到語義解釋性的標簽嵌入文件(JS腳本,CSS樣式),那麼此時IE的下載過程會啟用單獨連接進行下載。
4、並且在下載後進行解析,解析過程中,停止頁面所有往下元素的下載。阻塞載入
5、樣式表在下載完成後,將和以前下載的所有樣式表一起進行解析,解析完成後,將對此前所有元素(含以前已經渲染的)重新進行渲染。
6、JS、CSS中如有重定義,後定義函數將覆蓋前定義函數
2. JS的載入
2.1 不能並行下載和解析(阻塞下載)
2.2 當引用了JS的時候,瀏覽器發送1個js request就會一直等待該request的返回。因為瀏覽器需要1個穩定的DOM樹結構,而JS中很有可能有代碼直接改變了DOM樹結構,比如使用 document.write 或 appendChild,甚至是直接使用的location.href進行跳轉,瀏覽器為了防止出現JS修改DOM樹,需要重新構建DOM樹的情況,所以 就會阻塞其他的下載和呈現。
3.如何加快HTML頁面載入速度
1,頁面減肥
頁面的肥瘦是影響載入速度最重要的因素
刪除不必要的空格、注釋
將inline的script和css移到外部文件
可以使用HTML Tidy來給HTML減肥,還可以使用一些壓縮工具來給javaScript減肥
2,減少文件數量
減少頁面上引用的文件數量可以減少HTTP連接數
許多JavaScript、CSS文件可以合並最好合並
3,減少域名查詢
DNS查詢和解析域名也是消耗時間的,所以要減少對外部JavaScript、CSS、圖片等資源的引用,不同域名的使用越少越好
4,緩存重用數據
使用緩存
5,優化頁面素載入順序
首先載入頁面最初顯示的內容和與之相關的JavaScript和CSS
然後載入DHTML相關的東西
像什麼不是最初顯示相關的圖片、flash、視頻等很肥的資源就最後載入
6,減少inline JavaScript的數量
瀏覽器parser會假設inline JavaScript會改變頁面結構,所以使用inline JavaScript開銷較大
(比如我們在一個HTML對象生成過程中,使用了inline方式定義的函數,那麼這個元素生成幾次,那個函數也就要同時生成幾次。)
不要使用document.write()這種輸出內容的方法,使用現代W3C DOM方法來為現代瀏覽器處理頁面內容
7,使用現代CSS和合法的標簽
使用現代CSS來減少標簽和圖像,例如使用現代CSS+文字完全可以替代一些只有文字的圖片
使用合法的標簽避免瀏覽器解析HTML時做「error correction」等操作,還可以被HTML Tidy來給HTML減肥
8,Chunk your content
不要使用嵌套tables
..
..
而使用非嵌套tables或者divs
………………
將基於大塊嵌套的tables的layout分解成小tables,這樣顯示時不用載入整個頁面(或大table)的內容
9,指定圖像和tables的大小
如果瀏覽器可以立即決定圖像或tables的大小,那麼它就可以馬上顯示頁面而不要重新做一些布局安排的工作
這不僅加快了頁面的顯示,也預防了頁面完成載入後布局的一些不當的改變
image使用height和width
table使用table-layout: fixed並使用col和colgroup標簽指定columns的width
10,根據用戶瀏覽器明智的選擇策略
IE、Firefox、Safari等等等等
11,頁面結構的例子
· HTML
· HEAD
· LINK …
CSS files required for page appearance. Minimize the number of files for performance while keeping unrelated CSS in separate files for maintenance.
· SCRIPT. …
JavaScript. files for functions required ring the loading of the page, but not any DHTML that can only run after page loads.
Minimize the number of files for performance while keeping unrelated JavaScript. in separate files for maintenance.
· BODY
· User visible page content in small chunks (tables / divs) that can be displayed without waiting for the full page to download.
· SCRIPT. …
Any scripts which will be used to perform. DHTML. DHTML script. typically can only run after the page has completely loaded and all necessary objects have been initialized. There is no need to load these scripts before the page content. That only slows down the initial appearance of the page load.
Minimize the number of files for performance while keeping unrelated JavaScript. in separate files for maintenance.
If any images are used for rollover effects, you should preload them here after the page content has downloaded.
4.HTML頁面載入和解析流程
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文件,重新渲染頁面。
『貳』 瀏覽器載入渲染頁面的流程是怎樣的
1、輸入網址。
2、瀏覽器查找域名的IP地址。
3. 瀏覽器給web伺服器發送一個HTTP請求
4. 網站服務的永久重定向響應
5. 瀏覽器跟蹤重定向地址 現在,瀏覽器知道了要訪問的正確地址,所以它會發送另一個獲取請求。
6. 伺服器「處理」請求,伺服器接收到獲取請求,然後處理並返回一個響應。
7. 伺服器發回一個HTML響應
8. 瀏覽器開始顯示HTML
9. 瀏覽器發送請求,以獲取嵌入在HTML中的對象。在瀏覽器顯示HTML時,它會注意到需要獲取其他地址內容的標簽。這時,瀏覽器會發送一個獲取請求來重新獲得這些文件。這些文件就包括CSS/JS/圖片等資源,這些資源的地址都要經歷一個和HTML讀取類似的過程。所以瀏覽器會在DNS中查找這些域名,發送請求,重定向等等…
『叄』 面試的時候人家問瀏覽器渲染過程 這個怎麼答
從用戶輸入瀏覽器輸入url到頁面最後呈現 有哪些過程?
一道很常規的題目,考的是基本網路原理,和瀏覽器載入css,js過程。
答案大致如下:
用戶輸入URL地址
瀏覽器解析URL解析出主機名
瀏覽器將主機名轉換成伺服器ip地址(瀏覽器先查找本地DNS緩存列表 沒有的話 再向瀏覽器默認的DNS伺服器發送查詢請求 同時緩存)
瀏覽器將埠號從URL中解析出來
瀏覽器建立一條與目標Web伺服器的TCP連接(三次握手)
瀏覽器向伺服器發送一條HTTP請求報文
伺服器向瀏覽器返回一條HTTP響應報文
關閉連接 瀏覽器解析文檔
如果文檔中有資源 重復6 7 8 動作 直至資源全部載入完畢
以上答案基本簡述了一個網頁基本的響應過程背後的原理。
但這也只是一部分,瀏覽器獲取數據的部分,至於瀏覽器拿到數據之後,怎麼渲染頁面的,一直沒太關注。
所以抽出時間研究下瀏覽器渲染頁面的過程。
通過研究,了解一些基本常識的原理:
為什麼要將js放到頁腳部分
引入樣式的幾種方式的權重
css屬性書寫順序建議
何種類型的DOM操作是耗費性能的
『肆』 簡述單擊網頁顯示網頁內容的過程
讀取url,定位服務端資源,瀏覽器發起請求,與服務端通過http傳輸資源。瀏覽器獲取到資源後根據資源的doctype類型分為嚴格模式和混雜模式,前者以最新標准渲染,後者以低版本向後兼容。載入dom樹,然後載入css,獲取頁面內資源,最終渲染成頁面。
『伍』 如何顯示網頁的載入過程
網頁載入過程詳解
網頁載入的詳細步驟拆分:
1、用戶打開url鏈接
2、瀏覽器查詢url的dns地址
3、提交url請求到伺服器端
4、伺服器端處理
5、傳輸處理好的html文本內容到瀏覽器
6、瀏覽器解析html,並載入css,js,圖片等內容
7、載入完成,用戶看到完整的頁面內容
其中第六步的瀏覽器解析過程將是前端優化最直接、有效的地方,該過程的詳細過程為:接受網路數據-》將二進制碼變成字元-》將字元變為unicode code points.-》tokenizer -》tree constructor -》DOM ready -》Window ready。前端編程,主要理解的是tree constructor -> dom ready -> window ready的流程。
瀏覽器載入和渲染html的順序
1. IE下載的順序是從上到下,渲染的順序也是從上到下,下載和渲染是同時進行的。
2. 在渲染到頁面的某一部分時,其上面的所有部分都已經下載完成(並不是說所有相關聯的元素都已經下載完)。
3. 如果遇到語義解釋性的標簽嵌入文件(JS腳本,CSS樣式),那麼此時IE的下載過程會啟用單獨連接進行下載。
4. 樣式表在下載完成後,將和以前下載的所有樣式表一起進行解析,解析完成後,將對此前所有元素(含以前已經渲染的)重新進行渲染。
5. JS、CSS中如有重定義,後定義函數將覆蓋前定義函數。
JS的載入(js是單線下載和執行的)
1. 不能並行下載和解析(阻塞下載)。
2. 當引用了JS的時候,瀏覽器發送1個js request就會一直等待該request的返回。因為瀏覽器需要1個穩定的DOM樹結構,而JS中很有可能有
代碼直接改變了DOM樹結構,比如使用 document.write 或 appendChild,甚至是直接使用的location.href進行跳轉,瀏覽器為了防止出現JS修
改DOM樹,需要重新構建DOM樹的情況,所以 就會阻塞其他的下載和呈現.
『陸』 瀏覽器渲染頁面的全部過程各個過程有什麼方式優化
用戶輸入URL地址
瀏覽器解析URL解析出主機名
瀏覽器將主機名轉換成伺服器ip地址(瀏覽器先查找本地DNS緩存列表 沒有的話 再向瀏覽器默認的DNS伺服器發送查詢請求 同時緩存)
瀏覽器將埠號從URL中解析出來
瀏覽器建立一條與目標Web伺服器的TCP連接(三次握手)
瀏覽器向伺服器發送一條HTTP請求報文
伺服器向瀏覽器返回一條HTTP響應報文
關閉連接 瀏覽器解析文檔
如果文檔中有資源 重復6 7 8 動作 直至資源全部載入完畢
『柒』 在瀏覽器中完成展示這段時間,瀏覽器載入渲染頁面的流程是怎樣的
下面有一個欄如出現有網址閃過就是正在載入 如出現『完成』 頁面載入完成了
『捌』 瀏覽器的渲染過程是什麼樣的
解析HTML生成DOM樹;
解析CSS生成CSSOM規則樹;
將DOM樹與CSSOM規則樹合並在一起生成渲染樹;
遍歷渲染樹開始布局,計算每個副本的位置大小信息;
將渲染樹每個變數繪制到屏幕。
『玖』 網頁載入過程,及解析全過程,包括html css及javascript
HTML頁面載入和解析流程
1. 用戶輸入網址(假設是個html頁面,並且是第一次訪問),瀏覽器向伺服器發出請求,伺服器返回html文件。
2. 瀏覽器開始載入html代碼,發現<head>標簽內有一個<link>標簽引用外部CSS文件。
3. 瀏覽器又發出CSS文件的請求,伺服器返回這個CSS文件。
4. 瀏覽器繼續載入html中<body>部分的代碼,並且CSS文件已經拿到手了,可以開始渲染頁面了。
5. 瀏覽器在代碼中發現一個<img>標簽引用了一張圖片,向伺服器發出請求。此時瀏覽器不會等到圖片下載完,而是繼續渲染後面的代碼。
6. 伺服器返回圖片文件,由於圖片佔用了一定面積,影響了後面段落的排布,因此瀏覽器需要回過頭來重新渲染這部分代碼。
7. 瀏覽器發現了一個包含一行Javascript代碼的<script>標簽,趕快運行它。
8. Javascript腳本執行了這條語句,它命令瀏覽器隱藏掉代碼中的某個<style>(style.display=」none」)。杯具啊,突然就少了這么一個元素,瀏覽器不得不重新渲染這部分代碼。
9. 終於等到了</html>的到來,瀏覽器淚流滿面……
10. 等等,還沒完,用戶點了一下界面中的「換膚」按鈕,Javascript讓瀏覽器換了一下<link>標簽的CSS路徑。
11. 瀏覽器召集了在座的各位<div><span><ul><li>們,「大夥兒收拾收拾行李,咱得重新來過……」,瀏覽器向伺服器請求了新的CSS文件,重新渲染頁面。