window.onload 和 document.onDOMContentLoaded 有什么區(qū)別讳侨?

一枪孩、看文檔:

window.onload document.onDOMContentLoaded
描述 當(dāng)一個資源及其依賴資源已完成加載時,將觸發(fā)load事件偎箫。 當(dāng)初始的 HTML 文檔被完全加載和解析完成之后,DOMContentLoaded 事件被觸發(fā)皆串,而無需等待樣式表淹办、圖像和子框架的完成加載。
常規(guī)-規(guī)范 DOM L3 HTML5
常規(guī)-接口 UIEvent Event
常規(guī)-是否冒泡
常規(guī)-能否被取消 能 (盡管一個簡單的事件被指定為不可取消)
目標(biāo) window document
默認(rèn)行為
屬性 target type bubbles cancelable view detail target type bubbles cancelable

二恶复、實驗

一個簡單的DEMO:測試onload/onDOMContentLoaded

  1. 實驗設(shè)計:
    給一個HTML文檔中加載css怜森、js、和img元素谤牡,給每個資源加上一個onload事件副硅,以此判斷這些資源是在何時加載完成的。

  2. 實驗過程:

    實驗1:

    • 文件內(nèi)順序:css - script.scope - script - img - iframe翅萤。
    • 輸出:

    "font-awesome was loaded."
    "jquery was loaded."
    "bootstrap was loaded."
    "DOM fully loaded and parsed"
    "image was loaded."
    "baidu was loaded."
    "All resources finished loading!"

    可以看到恐疲,DOMContentLoaded事件會在文檔內(nèi)部的img和iframe加載完成之前就觸發(fā)了。因為這一事件只涉及初始的HTML文件的信息套么,而不涉及外部依賴培己。

    • Tips:如果已有css文件的緩存,刷新時css也有可能會在DOMContentLoaded事件后面才出現(xiàn)胚泌。但是script一定會在之前出現(xiàn)省咨,哪怕使用了scope / defer屬性。

    實驗2:

    • 異步加載腳本:分別使用scope/defer/createElement方式加載新腳本玷室。
    • 輸出:

    "newscript was loaded."
    "error"
    "TypeError: Cannot read property 'appendChild' of null
    at <anonymous>:14:21
    at http://js.jirengu.com/js/prod/runner-3.25.5.min.js:1:13840
    at http://js.jirengu.com/js/prod/runner-3.25.5.min.js:1:10893"
    "jquery was loaded."
    "bootstrap was loaded."
    "DOM fully loaded and parsed"
    "font-awesome was loaded."
    "image was loaded."
    "baidu was loaded."
    "All resources finished loading!"

    可以看到零蓉,使用scope/defer方法異步加載的腳本依然會在onDOMContentLoaded觸發(fā)前完成笤受;但是createElement方式加載的腳本,雖然加載時間還是在onDOMContentLoaded之前壁公,但卻無法直接加到文檔中感论。這是因為后面的appendChild是一個DOM操作,而此時DOM樹還沒有渲染完成紊册,找不到對應(yīng)元素。
    appendChild至少要在onDOMContentLoaded觸發(fā)后才能進(jìn)行快耿。

    實驗3:

    • 給iframe一個非法地址囊陡。
    • 輸出:

    DOM fully loaded and parsed
    // 很長很長時間……
    "baidu was loaded."
    "All resources finished loading!"

    可以看到,樣式表掀亥、圖像和子框架資源請求無響應(yīng)時會阻塞window.onload事件撞反,但不會影響document.onDOMContentLoaded事件。因為onDOMContentLoaded只考慮初始的HTML文檔搪花。

結(jié)論:

  1. onload事件是DOM事件遏片,onDOMContentLoaded是HTML5事件。
  2. onload事件會被樣式表撮竿、圖像和子框架阻塞吮便,而onDOMContentLoaded不會。
  3. 當(dāng)加載的腳本內(nèi)容并不包含立即執(zhí)行DOM操作時幢踏,使用onDOMContentLoaded事件是個更好的選擇髓需,會比onload事件執(zhí)行時間更早。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末房蝉,一起剝皮案震驚了整個濱河市僚匆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搭幻,老刑警劉巖咧擂,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異檀蹋,居然都是意外死亡松申,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門续扔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來攻臀,“玉大人,你說我怎么就攤上這事纱昧∨傩ィ” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵识脆,是天一觀的道長设联。 經(jīng)常有香客問我善已,道長,這世上最難降的妖魔是什么离例? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任换团,我火速辦了婚禮,結(jié)果婚禮上宫蛆,老公的妹妹穿的比我還像新娘艘包。我一直安慰自己,他們只是感情好耀盗,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布想虎。 她就那樣靜靜地躺著,像睡著了一般叛拷。 火紅的嫁衣襯著肌膚如雪舌厨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天忿薇,我揣著相機(jī)與錄音裙椭,去河邊找鬼。 笑死署浩,一個胖子當(dāng)著我的面吹牛揉燃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瑰抵,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼你雌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了二汛?” 一聲冷哼從身側(cè)響起婿崭,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肴颊,沒想到半個月后氓栈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡婿着,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年授瘦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竟宋。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡提完,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丘侠,到底是詐尸還是另有隱情徒欣,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布蜗字,位于F島的核電站打肝,受9級特大地震影響脂新,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜粗梭,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一争便、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧断医,春花似錦滞乙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至躬窜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炕置,已是汗流浹背荣挨。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留朴摊,地道東北人默垄。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像甚纲,于是被迫代替她去往敵國和親口锭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

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