解析瀏覽器打開網(wǎng)頁過程

瀏覽器是什么吊履,瀏覽器是用戶用來查看網(wǎng)頁的軟件程序,它是由多個進(jìn)程構(gòu)成调鬓,那么什么是進(jìn)程艇炎?什么又是線程呢?

進(jìn)程與線程科學(xué)定義:

  • 進(jìn)程 進(jìn)程是cpu資源分配的最小單位(是能擁有資源和獨立運(yùn)行的最小單位)
  • 線程 線程是cpu是調(diào)度的最小單位 (線程是建立在進(jìn)程的基礎(chǔ)上的一次程序運(yùn)行單位腾窝,一個進(jìn)程中可以有多個線程)

總的來說軟件服務(wù)好比一座工廠冕臭,進(jìn)程好比一個加工車間,而線程則是加工車間中的一條流水線燕锥,多條線程構(gòu)成一個進(jìn)程辜贵,多個進(jìn)程構(gòu)成一個軟件服務(wù),

以chorme瀏覽器為例归形,他分為Browser主進(jìn)程托慨,GPU進(jìn)程,第三方插件進(jìn)程暇榴、瀏覽器渲染進(jìn)程厚棵。其中我們前端開發(fā)
人員最需要關(guān)注的是它的瀏覽器渲染進(jìn)程蕉世,該進(jìn)程主要由下列幾個線程構(gòu)成:

1.JS引擎線程;2.GUI渲染線程婆硬;3.事件觸發(fā)線程狠轻;4.定時器觸發(fā)線程;5彬犯,異步請求線程向楼;

通常我們說JS是單線程運(yùn)行的,是因為JS程序的可執(zhí)行代碼在JS引擎線程中執(zhí)行谐区,其中的異步任務(wù)會丟到其他的線程中執(zhí)行湖蜕,待拿到返回結(jié)果,再通知JS引擎線程運(yùn)行其回調(diào)宋列。需要注意的一點是GUI渲染進(jìn)程和JS引擎互斥昭抒,一個運(yùn)行另一個就需要掛起,他們中的一方要是運(yùn)行的時間過長炼杖,則會引起程序的卡頓灭返。

64bf928efc59f98184b77df2b6c15eba.png

打開網(wǎng)頁的全過程:

1.在地址欄中輸入URL;
2.對輸入的URL進(jìn)行DNS解析坤邪,獲取目標(biāo)服務(wù)器IP地址婆殿,優(yōu)先瀏覽器DNS緩存查詢>本地host文件查詢,如沒有則進(jìn)行遞歸或迭代查詢罩扇,本地區(qū)的域名服務(wù)器>根DNS域名服務(wù)器>頂級域名服務(wù)器>依次向下>>>;
3.像目標(biāo)IP發(fā)送http請求婆芦;
4.建立tcp鏈接;
5.接受返回數(shù)據(jù)喂饥,(http1.1長鏈接消约,默認(rèn)不會斷開tcp握手)
6.瀏覽器渲染線程解析html文件,方向由上至下员帮;
7. 解析HTML文件標(biāo)簽對并渲染或粮,具體規(guī)則如下:
  • 1.解析到DOM(文檔對象模型 Document Object Model)標(biāo)簽,置入DOM樹捞高,HTML標(biāo)簽對以棧的形式解析氯材,解析到標(biāo)簽頭先入棧并構(gòu)成一個DOM節(jié)點,解析到該標(biāo)簽尾硝岗,則需要判斷當(dāng)前棧頂是不是該標(biāo)簽頭氢哮,是則認(rèn)為解析完畢出棧。因為HTML標(biāo)簽是成對出現(xiàn)的且標(biāo)簽對之間無法穿插只能是包含關(guān)系型檀,所以以這種形式解析dom節(jié)點的話冗尤,必然會將其子節(jié)點全部解析完成才開始進(jìn)行其兄弟節(jié)點的解析;
  • 2.解析到CSS標(biāo)簽(link),首先將CSS文件下載完畢,然后進(jìn)行解析生成CSSOM(層疊樣式表對象模型 Cascading Style Sheets Object Model)CSSOM和DOM是完全獨立的數(shù)據(jù)模型 裂七,因此它們是彼此分開解析的 皆看。 但是它們都具有相似的樹結(jié)構(gòu) ,并且具有相同的目的:為瀏覽器提供一種結(jié)構(gòu)背零,以呈現(xiàn)和標(biāo)識頁面上的不同元素腰吟。注意下載和解析CSS文件都會阻止頁面渲染,從而阻塞JS運(yùn)行徙瓶,這是因為DOM 和 CSSOM 要最終合并成為 render tree 用于頁面渲染毛雇,其中一項未解析完畢則無法正常渲染,而頁面渲染和JS代碼運(yùn)行互斥,所以也阻塞JS運(yùn)行倍啥。
  • 3.合成render tree,利用以獲得的DOM 和 CSSOM 合成render tree澎埠,其中包含完整的界面展示信息虽缕。
  • 4.生成Layout布局階段,生成盒模型蒲稳,確定各節(jié)點大小位置層級等氮趋;
  • 5.進(jìn)行painting繪制階段,將各節(jié)點繪制到界面上(類似片元著色器)
  • 6.解析到JS標(biāo)簽江耀,將JS文件下載完畢然后執(zhí)行剩胁,此過程阻塞DOM解析和CSS解析,因為JS代碼種可能對DOM和樣式有操作祥国,避免引起沖突昵观。
注意上述解析規(guī)則并不是等待所有數(shù)據(jù)全部返回才開始解析,而是當(dāng)它接收到可解析數(shù)據(jù)就會開始解析舌稀。


CSS解析與JS代碼執(zhí)行都會阻塞渲染啊犬,他們阻塞關(guān)系如下:

CSS阻塞渲染規(guī)律:

1.CSS加載和解析不會阻塞DOM TREE構(gòu)建,他們是兩個并行的線程在處理壁查;
2.CSS加載和解析會阻塞RENDER TREE合成觉至,因為CSSOM是構(gòu)成渲染樹的一部分;
3.CSS加載和解析阻塞JS代碼執(zhí)行睡腿,因為JS代碼與渲染互斥语御,可能有DOM操作或者樣式操作上的沖突;

JS阻塞渲染規(guī)律:

1.JS加載和運(yùn)行阻塞DOM TREE和RENDER TREE的構(gòu)建席怪;
2.JS執(zhí)行需等待CSSOM構(gòu)建完成应闯;
3.上述2點可以理解為GUI線程與JS引擎線程互斥,在瀏覽器解析HTML文件并渲染的過程里挂捻,只有執(zhí)行js代碼交由JS主線程處理(異步任務(wù)除外)孽锥,其他過程有GUI線程處理。

總結(jié):日常盜圖


51c3660d3f67948d4ec8279baad97d96.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市惜辑,隨后出現(xiàn)的幾起案子唬涧,更是在濱河造成了極大的恐慌,老刑警劉巖盛撑,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碎节,死亡現(xiàn)場離奇詭異,居然都是意外死亡抵卫,警方通過查閱死者的電腦和手機(jī)狮荔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來介粘,“玉大人殖氏,你說我怎么就攤上這事∫霾桑” “怎么了雅采?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長慨亲。 經(jīng)常有香客問我婚瓜,道長,這世上最難降的妖魔是什么刑棵? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任巴刻,我火速辦了婚禮,結(jié)果婚禮上蛉签,老公的妹妹穿的比我還像新娘胡陪。我一直安慰自己,他們只是感情好碍舍,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布督弓。 她就那樣靜靜地躺著,像睡著了一般乒验。 火紅的嫁衣襯著肌膚如雪愚隧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天锻全,我揣著相機(jī)與錄音狂塘,去河邊找鬼。 笑死鳄厌,一個胖子當(dāng)著我的面吹牛荞胡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播了嚎,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼泪漂,長吁一口氣:“原來是場噩夢啊……” “哼廊营!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起萝勤,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤露筒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后敌卓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慎式,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年趟径,在試婚紗的時候發(fā)現(xiàn)自己被綠了瘪吏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蜗巧,死狀恐怖掌眠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情幕屹,我是刑警寧澤蓝丙,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站香嗓,受9級特大地震影響迅腔,放射性物質(zhì)發(fā)生泄漏装畅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耘眨。 院中可真熱鬧剂癌,春花似錦、人聲如沸蚂夕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽婿牍。三九已至侈贷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間等脂,已是汗流浹背俏蛮。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留上遥,地道東北人搏屑。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像粉楚,于是被迫代替她去往敵國和親辣恋。 傳聞我的和親對象是個殘疾皇子亮垫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容