亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

HTML渲染過程詳解

2024-04-27 15:11:06
字體:
來源:轉載
供稿:網友

網絡請求過程:

1、先發請求給DNS進行域名解析獲取服務器ip2、向步驟1獲取的服務器IP發送HTTP請求3、服務器接收請求后,解析主機頭對應的站點,把請求傳送給站點4、站點接受轉發的請求作出回應并返回HTTP回應5、瀏覽器接到返回的HTTP回應,解析頭信息和HTML主體6、根據解析的頭信息設置必要的數據,如cookie,編碼,語言等聲明的處理7、在6的基礎上對HTML主體進行渲染展現

解析渲染該過程主要分為以下步驟:

解析HTML構建DOM樹DOM樹與CSS樣式進行附著構造呈現樹布局繪制

解析與構建DOM樹

  前兩步我們放在一起討論,瀏覽器的實際工作也是將他們放在一起進行的。對于HTML瀏覽器有專門的html解析器來解析HTML,并在解析的過程中構建DOM樹。在這里我們討論兩種DOM元素的解析,即樣式(link、style)與腳本文件(script)。由于瀏覽器采用自上而下的方式解析,在遇到這兩種元素時都會阻塞瀏覽器的解析,直到外部資源加載并解析或執行完畢后才會繼續向下解析html。對于樣式與腳本的先后順序同樣也會影響到瀏覽器的解析過程,究其原因主要在于:script腳本執行過程中可能會修改html界面(如document.write函數);DOM節點的CSS樣式會影響js的執行結果。在我的測試中得到以下四條結論:

  1)外部樣式會阻塞后續腳本執行,直到外部樣式加載并解析完畢。

復制代碼
<!DOCTYPE html><html><head>  <meta charset="utf-8">  <title>JS Bin</title>  <script>var start = +new Date;</script>  <link href="http://udacity-crp.herokuapp.com/style.css?rtt=2" rel="stylesheet">  </head>  <body>  <span id="result"></span>  <script>    var end = +new Date;    document.getElementById('result').innerHTML = (end-start);  </script></body></html>復制代碼

  2)外部樣式不會阻塞后續外部腳本的加載,但會阻塞外部腳本的執行。

復制代碼
<!DOCTYPE html><html><head>  <meta charset="utf-8">  <title>JS Bin</title>  <script>var start = +new Date;</script>  <link href="http://udacity-crp.herokuapp.com/style.css?rtt=2" rel="stylesheet">  </head>  <body>  test  <script src="http://udacity-crp.herokuapp.com/time.js?rtt=1&a"></script>  <div id="result"></div>  <script>var end = +new Date;document.getElementById("result").innerHTML = end-start;</script>  </body></html>復制代碼
var loadTime = document.createElement('div');loadTime.innerText = document.currentScript.src + ' executed @ ' + window.performance.now();loadTime.style.color = 'blue';document.body.appendChild(loadTime);

  從瀑布圖中我們可以看到,外部腳本與外部樣式是并行加載,但直到外部樣式加載完畢,外部腳本才開始執行

  3)如果后續外部腳本含有async屬性(IE下為defer),則外部樣式不會阻塞該腳本的加載與執行

復制代碼
<!DOCTYPE html><html><head>  <meta charset="utf-8">  <title>JS Bin</title>  <script>var start = +new Date;</script>  <link href="http://udacity-crp.herokuapp.com/style.css?rtt=2" rel="stylesheet">  </head>  <body>  test  <script src="http://udacity-crp.herokuapp.com/time.js?rtt=1&a" async></script>  <div id="result"></div>  <script>var end = +new Date;document.getElementById("result").innerHTML = end-start;</script>  </body></html>復制代碼

  從瀑布圖中可以看到外部腳本的加載與執行并不受link的阻塞

  4)對于動態創建的link標簽不會阻塞其后動態創建的script的加載與執行,不管script標簽是否具有async屬性,但對于其他非動態創建的script,以上三條結論仍適用

 View Code

  這是最終頁面結構

  通過瀑布圖與頁面結果可以看到動態創建的外部腳本并未受link的阻塞。

  link或style標簽都會被解析成DOM節點。瀏覽器對于樣式表還會生成CSSStyleSheet對象(C++代碼),他集成子CSSStyle,指標是樣式表對象而不管該對象來自于Style還是link。該對象主要包含以下幾個重要屬性和方法

CSSRules 即css樣式代碼type 表示樣式表類型的字符串。對CSS樣式表而言,這個字符串是“type/css”。href 通過link生成的為樣式鏈接,否則為undefinedinsertRule(rule,index):向cssRules集合中指定的位置插入rule字符串。IE不支持這個方法,但支持一個類似的addRule()方法。deleteRule(index):刪除cssRules集合中指定的位置的規則。IE不支持這個方法,但支持一個類似的removeRule()方法。

  文檔中對于所有的樣式表集合可以通過document.styleSheets來訪問。同時對于style或link DOM元素可以通過element.sheet來訪問CSSStyleSheet對象,IE中則通過element.styleSheet來訪問。

  html解析完畢,DOM樹創建完成后DOMContentLoaded事件即觸發,這時候可以用過script來操作DOM節點。

 

構建呈現樹  

  HTML解析完畢后,開始構建呈現樹RenderTree,這一步的主要工作在于將css樣式應用到DOM節點上,WebKit內核將這一過程稱為附著,其他瀏覽器有不同的概念。對前端工程師而言這個過程會涉及到CSS層疊問題。

  首先將根據樣式重要性排序,由低到高依次為:

瀏覽器聲明用戶普通聲明作者普通聲明作者重要聲明用戶重要聲明

  對于同一重要級別,則是根據CSS選擇符的特指度來判定優先級;一條樣式聲明的特指度由以下四個部分決定:S-I-C-E

聲明來自內聯的style屬性則 S+1;聲明中含有id屬性則 I+1;聲明中含有類、偽類、屬性選擇器則 C+1;生命中含有元素、偽元素選擇器則 E+1;

  特指度的比較類似于兩個字符串之間比較大小。

  呈現樹的每一個節點即為與其相對應的DOM節點的CSS框,框的類型與DOM節點的display屬性有關,block元素生成block框,inline元素生成inline框。每一個呈現樹節點都有與之相對應的DOM節點,但DOM節點不一定有與之相對應的呈現樹節點,比如display屬性為none的DOM節點,而且呈現樹節點在呈現樹中的位置與他們在DOM樹中的位置不一定相同,比如float與絕對定位元素。

  下圖為呈現樹與其相對應的DOM樹節點

布局

  呈現樹構造完成后瀏覽器便進行布局處理,及計算每個呈現樹節點的大小和位置信息。有道友可能要問,前面已將樣式附著到DOM節點上,不是已經有了樣式信息為何還要計算大小。這里可以這樣理解,以上包含大小的樣式信息只是存在內存里,并沒有實際使用,瀏覽器要根據窗口的實際大小來處理呈現樹節點的實際顯示大小和位置,比如對于margin為auto的處理。

  布局是一個遞歸過程,從跟呈現節點開始,遞歸遍歷子節點,計算集合幾何信息。具體過程還是比較復雜偶也不甚了解,道友們還是查閱其他資料吧。

 

繪制

   布局完成后,便是將呈現樹繪制出來顯示在屏幕上。對于每一個呈現樹節點來說,主要繪制順序如下:

背景顏色背景圖片邊框子呈現樹節點輪廓

參考資料:

http://velocity.oreilly.com.cn/2010/PPTs/limufromTaobao.pdfhttp://lifesinger.WordPRess.com/http://hikejun.com/blog/2012/02/02/js%E5%92%8Ccss%E7%9A%84%E9%A1%BA%E5%BA%8F%E5%85%B3%E7%B3%BB/http://www.html5rocks.com/zh/tutorials/internals/howbrowserswork/http://www.2cto.com/kf/201406/305852.htmlhttp://www.w3cmm.com/dom/document-stylesheets-getstylesheet.htmlhttp://www.cnblogs.com/wenanry/archive/2010/02/25/1673368.html
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久影视| 成人午夜高潮视频| 91精品91久久久久久| 97人洗澡人人免费公开视频碰碰碰| 国产一区二区三区在线看| 中文字幕日韩有码| 国产成人a亚洲精品| 伊人男人综合视频网| 96pao国产成视频永久免费| 久久久噜噜噜久久久| 日韩欧美在线中文字幕| 中文字幕久久久av一区| 久久久久久成人| 日韩在线观看成人| 91国产中文字幕| 日本久久中文字幕| 在线精品高清中文字幕| 伊人久久免费视频| 日韩亚洲欧美中文高清在线| 亚洲图片欧美午夜| 久热99视频在线观看| 国产日韩在线精品av| 中文.日本.精品| 欧美国产中文字幕| 国产精品爽黄69| 亚洲综合精品一区二区| 欧美亚洲另类视频| 97精品一区二区三区| 97人人模人人爽人人喊中文字| 国产精品都在这里| 久久久久久久999| 欧美亚洲国产视频| 欧美日韩成人黄色| 欧美性在线观看| 国产不卡精品视男人的天堂| 久久精品中文字幕免费mv| 国产精品综合网站| 国产精品99久久久久久久久| 亚洲国产91精品在线观看| 尤物九九久久国产精品的分类| 久久精品国产欧美亚洲人人爽| 久久久久国产一区二区三区| 国产精品av在线| 欧美亚洲视频一区二区| 欧美一区二区三区免费观看| www.日韩系列| 久久躁狠狠躁夜夜爽| 亚洲色图av在线| 91av在线影院| 欧美精品免费在线观看| 国产成人一区二区三区| 亚洲第一精品久久忘忧草社区| 亚洲天堂av高清| 欧美人交a欧美精品| 性色av一区二区三区红粉影视| 精品在线观看国产| 国产日韩av在线播放| 亚洲欧美日韩精品久久| 国产精品色午夜在线观看| 91精品国产综合久久久久久蜜臀| 欧美国产第一页| 热re99久久精品国产66热| 欧美激情第三页| 午夜精品一区二区三区在线| 亚洲欧美综合v| 欧美日韩国产色视频| 日本亚洲精品在线观看| 亚洲成人激情视频| 久久久午夜视频| 国产欧美一区二区三区视频| 精品国偷自产在线视频99| 国产亚洲欧美aaaa| 亚洲精品视频网上网址在线观看| 国产成人av在线| 久久天天躁狠狠躁夜夜躁2014| 国产精品aaa| 国产精品白嫩美女在线观看| 少妇高潮 亚洲精品| 国产精品一区久久| 91成人性视频| 97人洗澡人人免费公开视频碰碰碰| 国产日韩欧美在线看| 国产精品美女网站| 亚洲国产天堂久久综合网| 日韩av一区在线观看| 欧美裸体男粗大视频在线观看| 国产精品27p| 亚洲电影成人av99爱色| 亚洲精品xxxx| 久久久久久亚洲精品| 精品亚洲va在线va天堂资源站| 日韩中文理论片| 国产精品91视频| 国产精品美乳一区二区免费| 7777kkkk成人观看| 欧美在线视频播放| 日本国产精品视频| 中文综合在线观看| 中文字幕日韩精品有码视频| 欧美成人免费大片| 欧美美女操人视频| 在线成人免费网站| 国产在线观看精品一区二区三区| 欧美亚洲在线视频| 国产精品色悠悠| 91极品女神在线| 欧美一区二区大胆人体摄影专业网站| 尤物tv国产一区| 69视频在线播放| 亚洲欧美自拍一区| 成人激情综合网| 欧美人成在线视频| 欧美激情第6页| 国产精品欧美日韩久久| 91久久久久久久久| 亚洲a区在线视频| 亚洲精品国产精品国产自| 国产91色在线|免| 91精品在线影院| 久久人人97超碰精品888| 欧美激情喷水视频| 最新中文字幕亚洲| 国产精品美女在线观看| 国产成人a亚洲精品| 亚洲人成毛片在线播放| 国产精品 欧美在线| 欧美黄色小视频| 国产日本欧美一区| 色综合视频一区中文字幕| 最近2019中文字幕在线高清| 91av视频在线| 亚洲精品视频播放| 蜜月aⅴ免费一区二区三区| 国产精品久久久久久久久久东京| 成人中文字幕+乱码+中文字幕| 中文欧美在线视频| 2019亚洲男人天堂| 青青久久aⅴ北条麻妃| 97国产suv精品一区二区62| 日韩电视剧免费观看网站| 久久精品久久精品亚洲人| 色爱av美腿丝袜综合粉嫩av| 啪一啪鲁一鲁2019在线视频| 97国产精品免费视频| 91精品在线观看视频| 亚洲一级黄色片| 国产日韩中文在线| 久久久久久高潮国产精品视| 亚洲国产精品久久久| 不卡av电影在线观看| 亚洲加勒比久久88色综合| 日韩女在线观看| 久久香蕉国产线看观看av| 国产精品嫩草影院一区二区| 亚洲一区二区福利| 欧美激情精品久久久久久大尺度| 黄网站色欧美视频| 91伊人影院在线播放| 亚洲欧美制服第一页| 国产成人精品一区二区在线| 国产精品高潮粉嫩av| 国产精品久久久久久久久久久不卡| 少妇精69xxtheporn| 亚洲精品视频免费在线观看|