JS相關(guān)概念

CSS和JS在網(wǎng)頁中的放置順序是怎樣的?

  • CSS應(yīng)該放在頁面頂部的head標(biāo)簽中解愤,由于Render Tree是由DOM樹和CSSOM樹組合成的,html頁面需要等到CSS解析完后才能完成渲染,所以CSS應(yīng)放在head標(biāo)簽內(nèi)佳晶,優(yōu)先下載解析。
  • JS應(yīng)該放在body的底部佛吓,因為瀏覽器需要一個穩(wěn)定的dom樹結(jié)構(gòu)宵晚,而且js中很有可能有代碼直接改變了dom樹結(jié)構(gòu),瀏覽器為了防止出現(xiàn)js修改dom樹维雇,需要重新構(gòu)建dom樹的情況淤刃,所以就會阻塞其他的下載和呈現(xiàn)。

解釋白屏和FOUC

白屏和無樣式內(nèi)容閃爍(FOUC)是由于不用瀏覽器加載顯示頁面的機(jī)制不同造成的吱型。當(dāng)把CSS樣式放在底部或者使用@import方式引入樣式時逸贾,一些瀏覽器例如chrome,它的加載和渲染機(jī)制是等CSS全部加載解析完成后再渲染展示頁面津滞,而這個等待的時間就是白屏铝侵。另外一些瀏覽器,如Firefox触徐,它會在CSS未加載前展示頁面咪鲜,等CSS加載后再重新繪一次,這就造成了FOUC(無樣式內(nèi)容閃爍)撞鹉。如果把JS文件放在頭部疟丙,腳本會阻塞后面內(nèi)容的展示和其后組件的下載,也會導(dǎo)致白屏現(xiàn)象鸟雏。


async和defer的作用是什么享郊?有什么區(qū)別

當(dāng)瀏覽器遇到script腳本的時候:


藍(lán)色線代表網(wǎng)絡(luò)讀取,紅色線代表執(zhí)行時間孝鹊,這倆都是針對腳本的炊琉;
綠色線代表 HTML 解析。
此圖告訴我們以下幾個要點:

  • a. defer 和 async 在網(wǎng)絡(luò)讀扔只睢(下載)這塊兒是一樣的苔咪,都是異步的(相較于 HTML 解析)
  • b. 它倆的差別在于腳本下載完之后何時執(zhí)行锰悼,顯然defer 是最接近我們對于應(yīng)用腳本加載和執(zhí)行的要求的c. 關(guān)于 defer,此圖未盡之處在于它是按照加載順序執(zhí)行腳本的悼泌,這一點要善加利用
  • c. async 則是一個亂序執(zhí)行的主松捉,反正對它來說腳本的加載和執(zhí)行是緊緊挨著的,所以不管你聲明的順序如何馆里,只要它加載完了就會立刻執(zhí)行e. 仔細(xì)想想隘世,async 對于應(yīng)用腳本的用處不大,因為它完全不考慮依賴(哪怕是最低級的順序執(zhí)行)鸠踪,不過它對于那些可以不依賴任何腳本或不被任何腳本依賴的腳本來說卻是非常合適的丙者,最典型的例子:Google Analytics

簡述網(wǎng)頁的渲染機(jī)制

  1. Create/Update DOM And request css/image/js:瀏覽器請求到HTML代碼后,在生成DOM的最開始階段(應(yīng)該是Bytes → characters后)营密,并行發(fā)起css械媒、圖片、js的請求评汰,無論他們是否在HEAD里纷捞。注意:發(fā)起js文件的下載request并不需要DOM處理那個script節(jié)點。比如:簡單的正則匹配就能做到這一點被去,雖然實際上并不一定是通過正則主儡。這是很多人在理解渲染機(jī)制的時候存在的誤區(qū)。
  2. Create/Update Render CSSOM:CSS文件下載完成惨缆,開始構(gòu)建CSSOM糜值。
  3. Create/Update Render Tree:所有CSS文件下載完成偎快,CSSOM構(gòu)建結(jié)束后惫霸,和DOM一起生成Render Tree。
  4. Layout:有了Render Tree美尸,瀏覽器已經(jīng)能知道網(wǎng)頁中有哪些節(jié)點捣染、各個節(jié)點的CSS定義以及他們的從屬關(guān)系骄瓣。下一步操作稱之為layout,顧名思義就是計算出每個節(jié)點在屏幕中的位置耍攘。
  5. Painting:Layout之后榕栏,瀏覽器已經(jīng)知道了哪些節(jié)點要顯示(which nodes are visible)、么個節(jié)點的CSS屬性是什么(their computed style)少漆、每個節(jié)點在屏幕中的位置是哪里(geometry)。
  6. Painting,按照算出來的規(guī)則硼被,通過顯卡示损,把內(nèi)容畫到屏幕上。以上五個步驟前3個步驟之所有使用 “Create/Update” 是因為DOM嚷硫、CSSOM检访、Render Tree都可能在第一次Painting后又被更新多次始鱼,比如JS修改了DOM或者CSS屬性。Layout 和 Painting 也會被重復(fù)執(zhí)行脆贵,除了DOM医清、CSSOM更新的原因外,圖片下載完成后也需要調(diào)用Layout 和 Painting來更新網(wǎng)頁卖氨。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末会烙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子筒捺,更是在濱河造成了極大的恐慌柏腻,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件系吭,死亡現(xiàn)場離奇詭異五嫂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)肯尺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門沃缘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人则吟,你說我怎么就攤上這事槐臀。” “怎么了逾滥?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵峰档,是天一觀的道長。 經(jīng)常有香客問我寨昙,道長讥巡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任舔哪,我火速辦了婚禮欢顷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捉蚤。我一直安慰自己抬驴,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布缆巧。 她就那樣靜靜地躺著布持,像睡著了一般。 火紅的嫁衣襯著肌膚如雪陕悬。 梳的紋絲不亂的頭發(fā)上题暖,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼胧卤。 笑死唯绍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的枝誊。 我是一名探鬼主播况芒,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼叶撒!你這毒婦竟也來了绝骚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤痊乾,失蹤者是張志新(化名)和其女友劉穎皮壁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哪审,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蛾魄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了湿滓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滴须。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖叽奥,靈堂內(nèi)的尸體忽然破棺而出扔水,到底是詐尸還是另有隱情,我是刑警寧澤朝氓,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布魔市,位于F島的核電站,受9級特大地震影響赵哲,放射性物質(zhì)發(fā)生泄漏待德。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一枫夺、第九天 我趴在偏房一處隱蔽的房頂上張望将宪。 院中可真熱鬧,春花似錦橡庞、人聲如沸较坛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丑勤。三九已至,卻和暖如春吧趣,著一層夾襖步出監(jiān)牢的瞬間法竞,已是汗流浹背除呵。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留爪喘,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓纠拔,卻偏偏與公主長得像秉剑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子稠诲,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

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

  • 1. CSS和JS在網(wǎng)頁中的放置順序是怎樣的侦鹏? css放在head標(biāo)簽內(nèi),防止渲染時出現(xiàn)白屏 js放在最后body...
    billa_8f6b閱讀 568評論 0 0
  • 任務(wù) CSS和JS在網(wǎng)頁中的放置順序是怎樣的臀叙? 解釋白屏和FOUC async和defer的作用是什么略水?有什么區(qū)別...
    mhy_web閱讀 496評論 0 1
  • CSS和JS在網(wǎng)頁中的放置順序是怎樣的? 首先要區(qū)分css和js的執(zhí)行順序 html文件是自上而下的執(zhí)行方式劝萤,但引...
    LINPENGISTHEONE閱讀 253評論 0 0
  • CSS和JS在網(wǎng)頁中的放置順序是怎樣的渊涝? css放到head標(biāo)簽內(nèi) js一般放到body尾部,因為js會涉及dom...
    hhg121閱讀 308評論 0 0
  • 1.CSS和JS在網(wǎng)頁中的放置順序是怎樣的床嫌? CSS放在head中跨释;JS使用script標(biāo)簽放在body中的最后面...
    zhaonu閱讀 305評論 0 0