自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

面試官:Window.onload 和 DOMContentLoaded 的區(qū)別

開發(fā) 前端
DOMContentLoaded? 事件在 HTML 解析完成后觸發(fā),不會等待圖片、CSS 資源加載,而 ?window.onload? 需要等待所有資源加載完成才觸發(fā)。

window.onload 和 DOMContentLoaded 都是頁面加載相關(guān)的事件,但它們觸發(fā)的時機(jī)不同,主要區(qū)別如下:

1. DOMContentLoaded 事件

當(dāng) HTML 完全解析并構(gòu)建 DOM 后觸發(fā),但 不等待 CSS、圖片、JS 資源加載完成。

觸發(fā)時機(jī):

  • 只要 HTML 解析完成并構(gòu)建了 DOM,就會觸發(fā) DOMContentLoaded。
  • 不會等待 CSS、圖片、iframe 加載完成,所以它的觸發(fā)時間更早。

適用場景

  • 希望盡早操作 DOM,例如動態(tài)修改頁面結(jié)構(gòu)、綁定事件監(jiān)聽器。
  • 對圖片、CSS 不依賴的 JS 操作,例如表單校驗(yàn)、事件監(jiān)聽等。

示例

document.addEventListener("DOMContentLoaded", function() {
  console.log("?? DOM 解析完畢!");
});

 輸出時機(jī):頁面結(jié)構(gòu)加載完成,但圖片、CSS 可能還未加載完。

2. window.onload 事件

當(dāng) HTML、CSS、JS、圖片、iframe 及所有外部資源都加載完成后才觸發(fā)。

觸發(fā)時機(jī):

  • 等所有資源加載完成(包括 CSS、圖片、iframe、視頻等) 后才觸發(fā)。
  • 比 DOMContentLoaded 晚,尤其是如果頁面有大量圖片、視頻時,window.onload 可能會很慢。

適用場景

  • 需要確保所有資源都加載完畢,例如:

a.獲取圖片寬高

b.操作 canvas

c.計算 offsetWidth、offsetHeight

d.頁面統(tǒng)計(如 Google Analytics)

e.依賴外部 API(如廣告、第三方 SDK)

示例

window.onload = function() {
  console.log("? 所有資源加載完成!");
};

輸出時機(jī):等頁面所有資源加載完畢才觸發(fā),可能比 DOMContentLoaded 晚很多。

3. DOMContentLoaded vs window.onload 觸發(fā)順序

事件

觸發(fā)時機(jī)

依賴資源加載

適用場景

DOMContentLoaded

HTML 解析完成,DOM 構(gòu)建完成

? 不等待 CSS/圖片/iframe

適合盡早操作 DOM

window.onload

所有資源(HTML、CSS、JS、圖片等)加載完成

? 需要等待所有資源

適合依賴圖片/視頻的操作

4. 示例對比

HTML

<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>測試頁面</title>
<script>
    document.addEventListener("DOMContentLoaded", function() {
      console.log("?? DOMContentLoaded 觸發(fā)");
    });

    window.onload = function() {
      console.log("? window.onload 觸發(fā)");
    };
  </script>
</head>
<body>
<h1>測試頁面</h1>
<img src="https://via.placeholder.com/600x400" alt="測試圖片">
</body>
</html>

可能的輸出順序

?? DOMContentLoaded 觸發(fā)
? window.onload 觸發(fā)

 DOMContentLoaded 先觸發(fā),因?yàn)樗坏却龍D片加載。

5. 面試官可能的追問

 面試官:為什么 DOMContentLoaded 不會等待圖片加載?
回答因?yàn)?nbsp;DOMContentLoaded 只需要 HTML 解析完成并構(gòu)建 DOM,而不會等待圖片、CSS 資源的加載

 面試官:什么時候必須使用 window.onload 而不是 DOMContentLoaded?
回答

  • 需要確保圖片、CSS、iframe 資源加載完成 的場景,如:

a.獲取圖片尺寸(img.width)

b.操作 canvas(必須等圖片加載完)

c.執(zhí)行外部 API 或廣告代碼

 面試官:如何在 DOMContentLoaded 之后監(jiān)聽 onload?
回答

document.addEventListener("DOMContentLoaded", function() {
  console.log("DOM 加載完成");
  window.onload = function() {
    console.log("所有資源加載完成");
  };
});

這樣可以 先執(zhí)行 DOM 操作,再等待資源加載。

總結(jié)

對比項

DOMContentLoaded

window.onload

觸發(fā)時機(jī)

HTML 解析完畢,DOM 結(jié)構(gòu)就緒

所有資源(HTML、CSS、圖片等)加載完畢

是否等待 CSS 加載

? 不等待

? 等待

是否等待圖片加載

? 不等待

? 等待

適用場景

綁定事件監(jiān)聽、修改 DOM

依賴圖片、CSS、廣告 SDK

最佳面試回答 "DOMContentLoaded 事件在 HTML 解析完成后觸發(fā),不會等待圖片、CSS 資源加載,而 window.onload 需要等待所有資源加載完成才觸發(fā)。如果只需要操作 DOM,應(yīng)該用 DOMContentLoaded;如果依賴圖片、CSS 資源加載,則使用 window.onload。" 

責(zé)任編輯:姜華 來源: 大遷世界
相關(guān)推薦

2023-07-05 15:55:26

性能優(yōu)化開發(fā)分析工具

2025-03-10 00:00:00

property?attributeHTML

2025-03-10 11:40:00

前端開發(fā)HTML

2021-05-10 08:01:12

BeanFactoryFactoryBean容器

2022-09-13 14:44:40

HashMap哈希表紅黑樹

2021-05-12 08:20:53

開發(fā)

2023-02-17 08:10:24

2024-04-03 15:33:04

JWTSession傳輸信息

2024-09-19 08:42:43

2024-09-25 12:26:14

2015-08-13 10:29:12

面試面試官

2021-05-14 08:34:32

UDP TCP場景

2021-12-13 06:56:45

Comparable元素排序

2024-03-20 15:12:59

KafkaES中間件

2021-12-23 07:11:31

開發(fā)

2025-03-07 08:44:47

Typescriptiinterfacetype

2021-08-17 07:15:16

Git RebaseGit Merge面試

2022-05-16 11:04:43

RocketMQPUSH 模式PULL 模式

2024-10-31 09:30:05

線程池工具Java

2023-01-30 15:39:40

GETHTTP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號