web前端面試題@十三(瀏覽器渲染頁面的原理及流程、call,apply和bind的區(qū)別及擴(kuò)展)

一、瀏覽器渲染頁面的原理及流程

瀏覽器將域名通過網(wǎng)絡(luò)通信從服務(wù)器拿到html文件后,如何渲染頁面呢?

1.根據(jù)html文件構(gòu)建DOM樹和CSSOM樹。構(gòu)建DOM樹期間,如果遇到JS,阻塞DOM樹及CSSOM樹的構(gòu)建,優(yōu)先加載JS文件,加載完畢,再繼續(xù)構(gòu)建DOM樹及CSSOM樹。

2.構(gòu)建渲染樹(Render Tree)。構(gòu)建渲染樹,根據(jù)渲染樹計(jì)算每個(gè)可見元素的布局,并輸出到繪制流程,將像素渲染到屏幕上。

(渲染樹(Render Tree)由DOM樹、CSSOM樹合并而成,但并不是必須等DOM樹及CSSOM樹加載完成后才開始合并構(gòu)建渲染樹。三者的構(gòu)建并無先后條件,亦非完全獨(dú)立,而是會(huì)有交叉,并行構(gòu)建。因此會(huì)形成一邊加載,一邊解析,一邊渲染的工作現(xiàn)象。)

3.頁面的重繪(repaint)與重排(reflow,也有稱回流)。頁面渲染完成后,若JS操作了DOM節(jié)點(diǎn),根據(jù)JS對DOM操作動(dòng)作的大小,瀏覽器對頁面進(jìn)行重繪或是重排。

? 基本原理如下:

1、瀏覽器內(nèi)核拿到內(nèi)容后,渲染步驟大致可以分為以下幾步:

2、解析HTML,構(gòu)建DOM樹

3、解析CSS,生成CSS規(guī)則樹

4、合并DOM樹和CSS規(guī)則,生成render樹(DOM樹和CSSOM樹連接在一起形成render tree .‘渲染數(shù)’)

5、布局render樹(Layout/reflow),負(fù)責(zé)各元素尺寸、位置的計(jì)算

6、繪制render樹(paint),繪制頁面像素信息

7、瀏覽器會(huì)將各層的信息發(fā)送給GPU,GPU會(huì)將各層合成(composite),顯示在屏幕上


渲染配圖

二、call,apply和bind的區(qū)別及擴(kuò)展

1、call,apply和bind的區(qū)別

它們在功能上是沒有區(qū)別的,都是改變this的指向,它們的區(qū)別主要是在于方法的實(shí)現(xiàn)形式和參數(shù)傳遞上的不同。call和apply方法都是在調(diào)用之后立即執(zhí)行的。而bind調(diào)用之后是返回原函數(shù),需要再調(diào)用一次才行,

2、總結(jié)一下call,apply,bind方法:

a:第一個(gè)參數(shù)都是指定函數(shù)內(nèi)部中this的指向(函數(shù)執(zhí)行時(shí)所在的作用域),然后根據(jù)指定的作用域,調(diào)用該函數(shù)。

b:都可以在函數(shù)調(diào)用時(shí)傳遞參數(shù)。call,bind方法需要直接傳入,而apply方法需要以數(shù)組的形式傳入。

c:call,apply方法是在調(diào)用之后立即執(zhí)行函數(shù),而bind方法沒有立即執(zhí)行,需要將函數(shù)再執(zhí)行一遍。有點(diǎn)閉包的味道。

d:改變this對象的指向問題不僅有call,apply,bind方法,也可以使用that變量來固定this的指向。

附菜鳥教程https://www.runoob.com/w3cnote/js-call-apply-bind.html,不明的話看一看官方的解釋,在此不做舉例了。。。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)送 & 接收信息 數(shù)據(jù)是以“數(shù)據(jù)包”的形式通過互聯(lián)網(wǎng)發(fā)送,而數(shù)據(jù)包以字節(jié)為單位。當(dāng)你編寫一些 HTML、CSS ...
    mongofeng閱讀 1,124評論 0 0
  • 發(fā)送 & 接收信息 數(shù)據(jù)是以“數(shù)據(jù)包”的形式通過互聯(lián)網(wǎng)發(fā)送,而數(shù)據(jù)包以字節(jié)為單位。當(dāng)你編寫一些 HTML、CSS ...
    IT界中小PQ閱讀 435評論 0 0
  • 2019.8.131.什么是閉包阮一峰博客閉包就是連接內(nèi)部函數(shù)和外部函數(shù)的橋梁,用函數(shù)嵌套實(shí)現(xiàn)內(nèi)部函數(shù)請求到外部函...
    清湯餃子閱讀 1,871評論 0 12
  • 用戶在使用瀏覽器訪問一個(gè)網(wǎng)站時(shí)需要先通過HTTP協(xié)議向服務(wù)器發(fā)送請求,之后服務(wù)器返回HTML文件與響應(yīng)信息。這時(shí),...
    dosher_多舍閱讀 909評論 0 1
  • Web前端技術(shù)由 html、css 和 javascript 三大部分構(gòu)成,是一個(gè)龐大而復(fù)雜的技術(shù)體系,其復(fù)雜程度...
    hnscdg閱讀 705評論 0 0

友情鏈接更多精彩內(nèi)容