成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MutationObserver 回調是作為任務或微任務同步或異步調用的?如果出現異常怎么辦?

開發 前端
MutationObserver提供了一種強大而高效的方式來監控DOM變化。了解其作為微任務執行、變更合并和異常處理的特性,可以幫助開發者更好地設計和實現DOM監控邏輯。在實際應用中,合理利用這些特性可以優化性能,并實現更復雜的DOM交互功能。

在前端開發中,監控DOM變化是一項常見需求,無論是用于模擬用戶操作還是動態調整頁面內容。隨著Chrome 127移除了傳統的mutation事件(如DOMNodeInserted和DOMNodeRemoved),MutationObserver成為了DOM監控的首選API。本文將深入探討MutationObserver的工作機制,特別關注其回調執行的時機和異常處理方式。

MutationObserver的核心特性

  1. 異步回調:MutationObserver的回調是作為微任務(microtask)執行的。
  2. 變更合并:多個同步DOM變更會被合并到一個回調中處理。
  3. 異常處理:回調中拋出的異常不會中斷觀察者的運行。

實驗驗證

以下代碼片段展示了MutationObserver的關鍵行為:

function callback(mutations) {
    console.log('變更:', mutations.flatMap(m => [...m.addedNodes].map(n => n.nodeValue)));
    throw '回調中的異常';
}

const observer = new MutationObserver(callback);
observer.observe(root, { childList: true });

setTimeout(() => console.log('前置宏任務'));
Promise.resolve().then(() => console.log('前置微任務'));

for (let i = 0; i < 3; i++) {
    const text = `節點${i}; `;
    root.append(text);
    console.log('已添加: ' + text);
}

setTimeout(() => console.log('后置宏任務'));
Promise.resolve().then(() => console.log('后置微任務'));

運行結果分析:

圖片圖片

  1. 三個同步DOM變更被合并到一個回調中。
  2. 回調在兩個預定的微任務之間執行,證實其作為普通微任務的性質。
  3. 預定的宏任務在微任務隊列清空后執行。
  4. 回調中拋出的異常不影響后續操作。

實際應用示例

考慮一個動態加載內容的網頁場景:

function contentObserver(mutations) {
    for (let mutation of mutations) {
        if (mutation.type === 'childList') {
            mutation.addedNodes.forEach(node => {
                if (node.nodeType === Node.ELEMENT_NODE && node.classList.contains('dynamic-content')) {
                    processNewContent(node);
                }
            });
        }
    }
}

const observer = new MutationObserver(contentObserver);
observer.observe(document.body, { childList: true, subtree: true });

function processNewContent(node) {
    // 處理新加載的內容
    console.log('處理新內容:', node);
}

// 模擬動態加載內容
setTimeout(() => {
    const newContent = document.createElement('div');
    newContent.classList.add('dynamic-content');
    newContent.textContent = '新加載的內容';
    document.body.appendChild(newContent);
}, 1000);

這個例子展示了如何使用MutationObserver監控動態加載的內容,并在新內容添加時進行處理。

結語

MutationObserver提供了一種強大而高效的方式來監控DOM變化。了解其作為微任務執行、變更合并和異常處理的特性,可以幫助開發者更好地設計和實現DOM監控邏輯。在實際應用中,合理利用這些特性可以優化性能,并實現更復雜的DOM交互功能。

責任編輯:武曉燕 來源: 大遷世界
相關推薦

2010-08-26 14:23:28

路由器故障

2019-08-29 07:35:29

網站404空白nginx

2009-10-20 16:48:30

C#委托

2020-08-28 10:21:24

Go代碼程序

2010-02-26 15:46:48

Silverlight

2011-08-29 15:58:58

2023-10-06 12:15:02

2023-07-07 00:54:05

2009-08-21 11:24:16

C#異步調用

2020-10-29 08:31:15

Java同步回調編程語言

2020-03-11 09:15:25

微信asyncawait

2011-08-30 10:20:41

Silverlight

2022-05-19 08:01:49

PostgreSQL數據庫

2018-01-28 20:39:39

戴爾

2011-05-04 09:25:35

打印機

2022-04-22 10:30:07

框架JavaScript前端

2021-11-16 07:02:05

函數Python返回值

2021-01-28 11:40:34

Dubbo異步配置

2014-03-24 10:54:10

大數據分析

2009-06-17 11:47:21

Hibernate 刪
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 狠狠久久久 | 国产成人99久久亚洲综合精品 | 国产乱码精品1区2区3区 | 精品久久久久久亚洲综合网站 | 午夜影院免费体验区 | 99九色| 国产一区精品在线 | 亚洲欧美激情精品一区二区 | 狠狠亚洲 | 日韩一区二区三区四区五区六区 | 久久黄色网 | 一级aaaaaa毛片免费同男同女 | 91原创视频在线观看 | 伊人影院99 | 黄色毛片大全 | 日韩精品在线观看一区二区 | 中文字幕在线视频精品 | 国产丝袜一区二区三区免费视频 | 我想看一级黄色毛片 | 97久久久 | 97色在线观看免费视频 | 天天天操操操 | 三级黄色片在线观看 | 亚洲精品一区二区冲田杏梨 | a视频在线观看 | 狠狠的干狠狠的操 | 国产精品久久久久久久久久久久久 | 一区二区免费在线视频 | 日韩久久久久久 | 日韩国产精品一区二区三区 | 国产日韩欧美一区二区在线播放 | 国产精品av久久久久久久久久 | 国产精品久久毛片av大全日韩 | 免费看色 | 毛色毛片免费看 | 亚洲一区二区三区欧美 | 日本三级全黄三级a | 成人一区二区在线 | 国产精品射| 三级特黄特色视频 | 日韩精品一区二区三区中文在线 |