初識Javascript

  • 網(wǎng)頁一般由三個部分構(gòu)成厦凤,HTML ,CSS屯耸,JAVASCRIPT颜屠。其中HTML負(fù)責(zé)網(wǎng)頁的整體結(jié)構(gòu)统舀,CSS負(fù)責(zé)網(wǎng)頁的樣式更啄,也就是美化HTML纳令,這兩個部分構(gòu)成了一個靜態(tài)網(wǎng)頁送火,JAVASCRIPT則負(fù)責(zé)網(wǎng)頁上的一些動畫娘汞,以及與后端數(shù)據(jù)的交互部分歹茶。

CSS和JS在網(wǎng)頁中的放置位置

一般而言,因?yàn)镠TML是一種相對松散的文檔類型,同時瀏覽器的容錯性又非常高惊豺,所以CSS和JS可以放置在頁面上的任何位置燎孟,甚至可以放到<!DOCTYPE HTML>的外部。
但是在實(shí)際使用中尸昧,我們習(xí)慣上把CSS文件放到head標(biāo)簽內(nèi)部揩页,這是由瀏覽器的渲染機(jī)制決定的,因?yàn)榇蟛糠譃g覽器都是要等HTML和CSS加載完畢后才開始進(jìn)行網(wǎng)頁布局并最終繪制到瀏覽器窗口烹俗;JS則更加的苛刻爆侣,因?yàn)闉g覽器的解析器遇到JS腳本后會立刻開始執(zhí)行JS腳本,這樣就會阻塞HTML幢妄、CSS的解析兔仰,瀏覽器出現(xiàn)白屏,只有當(dāng)JS腳本執(zhí)行完畢蕉鸳,才會繼續(xù)后面文檔的渲染乎赴,所以我們一般把JS放到HTML文檔的尾部,這樣就不會出現(xiàn)白屏現(xiàn)象潮尝,用戶體驗(yàn)比較好榕吼。

白屏和FOUC(flash of unstyled content)

白屏和FOUC(無樣式內(nèi)容閃爍)其實(shí)是瀏覽器渲染機(jī)制所固有的特性
Webkit內(nèi)核的瀏覽器的渲染過程中頁面的繪制要等HTML和CSS都加載完畢才開始,所以在這個加載過程中瀏覽器會出現(xiàn)白屏現(xiàn)象勉失。

  • 如果把樣式放在文檔底部羹蚣,對于IE瀏覽器,在某些場景下(新窗口打開,刷新等)頁面會出現(xiàn)白屏,而不是內(nèi)容逐步展現(xiàn)
  • 如果使用 @import 標(biāo)簽,即使 CSS 放入 link, 并且放在頭部,也可能出現(xiàn)白屏
  • 對于圖片和CSS, 在加載時會并發(fā)加載(如一個域名下同時加載兩個文件). 但在加載 JavaScript 時,會禁用并發(fā),并且阻止其他內(nèi)容的下載. 所以把 JavaScript 放入頁面頂部也會導(dǎo)致白屏現(xiàn)象.

Gecko內(nèi)核的瀏覽器則是在加載過程中優(yōu)先渲染HTML部分,在CSS加載的時候再次進(jìn)行頁面的二次渲染乱凿,這樣渲染到頁面上的無樣式內(nèi)容時就會不斷的進(jìn)行頁面二次渲染顽素,無樣式內(nèi)容就會閃爍,這就是FOUC現(xiàn)象告匠。

  • 如果把樣式放在底部,對于IE瀏覽器,在某些場景下(點(diǎn)擊鏈接,輸入URL,使用書簽進(jìn)入等),會出現(xiàn) FOUC 現(xiàn)象(逐步加載無樣式的內(nèi)容,等CSS加載后頁面突然展現(xiàn)樣式).對于 Firefox 會一直表現(xiàn)出 FOUC .

asynnc和defer的作用與區(qū)別

它們的作用主要是作用于script標(biāo)簽戈抄。

  1. 對于沒有這兩個關(guān)鍵字的腳本標(biāo)簽,瀏覽器會立即加載并執(zhí)行指定的腳本后专,即在渲染該script標(biāo)簽之下的文檔元素之前划鸽,不等待后續(xù)載入的文檔元素,讀到就加載并執(zhí)行戚哎。
  2. 有了async后裸诽,加載和渲染后續(xù)文檔的過程會和腳本的 加載與執(zhí)行 同時進(jìn)行(異步)
  3. 如果是defer,加載和渲染后續(xù)文檔的過程將和腳本的 加載 同時進(jìn)行型凳,但是腳本的執(zhí)行要等到所有的后續(xù)元素解析完畢以后丈冬,DOMContentLoaded事件觸發(fā)之前完成。

*defer 和 async 的區(qū)別

  • defer: 腳本延遲到文檔解析和顯示后執(zhí)行甘畅,有順序
  • async: 不保證順序

*注意

  • defer 屬性只被 IE 4 和 Firefox 3.5 更高版本的瀏覽器所支持埂蕊,所以它不是一個理想的跨瀏覽器解決方案往弓。在其他瀏覽器中,defer屬性會被直接忽略蓄氧,因此<script>標(biāo)簽會以默認(rèn)的方式處理函似,也就是說會造成阻塞。然而喉童,如果您的目標(biāo)瀏覽器支持的話撇寞,這仍然是個有用的解決方案。
  • 在有 async 的情況下堂氯,JavaScript 腳本一旦下載好了就會執(zhí)行蔑担,所以很有可能不是按照原本的順序來執(zhí)行的。如果 JavaScript 腳本前后有依賴性咽白,使用 async 就很有可能出現(xiàn)錯誤啤握。

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

  1. 解析 HTML 標(biāo)簽, 構(gòu)建 DOM 樹
  2. 解析 CSS 標(biāo)簽, 構(gòu)建 CSSOM 樹
  3. 把 DOM 和 CSSOM 組合成 渲染樹 (render tree)
  4. 在渲染樹的基礎(chǔ)上進(jìn)行布局, 計算每個節(jié)點(diǎn)的幾何結(jié)構(gòu)
  5. 把每個節(jié)點(diǎn)繪制到屏幕上 (painting)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市局扶,隨后出現(xiàn)的幾起案子恨统,更是在濱河造成了極大的恐慌,老刑警劉巖三妈,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異莫绣,居然都是意外死亡畴蒲,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門对室,熙熙樓的掌柜王于貴愁眉苦臉地迎上來模燥,“玉大人,你說我怎么就攤上這事掩宜∧杪睿” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵牺汤,是天一觀的道長辽旋。 經(jīng)常有香客問我,道長檐迟,這世上最難降的妖魔是什么补胚? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮追迟,結(jié)果婚禮上溶其,老公的妹妹穿的比我還像新娘。我一直安慰自己敦间,他們只是感情好瓶逃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布束铭。 她就那樣靜靜地躺著,像睡著了一般厢绝。 火紅的嫁衣襯著肌膚如雪契沫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天代芜,我揣著相機(jī)與錄音埠褪,去河邊找鬼。 笑死挤庇,一個胖子當(dāng)著我的面吹牛钞速,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嫡秕,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼渴语,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了昆咽?” 一聲冷哼從身側(cè)響起驾凶,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掷酗,沒想到半個月后调违,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泻轰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年技肩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浮声。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡虚婿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泳挥,到底是詐尸還是另有隱情然痊,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布屉符,位于F島的核電站剧浸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏筑煮。R本人自食惡果不足惜辛蚊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望真仲。 院中可真熱鬧袋马,春花似錦、人聲如沸秸应。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至桑谍,卻和暖如春延柠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锣披。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工贞间, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雹仿。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓增热,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胧辽。 傳聞我的和親對象是個殘疾皇子峻仇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

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

  • JavaScript的發(fā)展歷史 JavaScript因?yàn)榛ヂ?lián)網(wǎng)而生,緊隨著瀏覽器的出現(xiàn)而問世邑商。1994年12月摄咆,N...
    饑人谷_深色晨霧閱讀 338評論 0 0
  • 瀏覽器是如何渲染網(wǎng)頁的? 這個時候我們就涉及到了CSS的放置方式的問題人断,因?yàn)镃SS的放置前后順序會引起白屏和FOU...
    petertou閱讀 258評論 0 0
  • 簡單介紹 JavaScript的發(fā)展歷史 1990年底吭从,歐洲核能研究組織(CERN)科學(xué)家Tim Berners-...
    飄飄流浪者閱讀 241評論 0 0
  • CSS和JS在網(wǎng)頁中的放置順序 css放在文檔元素的前面包含在 中,js放在文檔元素的后面在 里且在尾部恶迈。 白屏和...
    柯良勇閱讀 160評論 0 0
  • CSS 和 JavaScript 在網(wǎng)頁中的放置順序是怎樣的 CSS 一般放在 HTML 文檔的 元素里面影锈,由...
    水劍承王閱讀 292評論 0 0