Mutation Observer優點
利用Mutation Observer可以監聽DOM屬性節點或者子節點的增加或者刪除等變化。
Mutation Observer是DOM4增加,也就是HTML5新增的API。
與之類似,DOM3增加的Mutation Events也可以完成類似功能。
由於存在一系列問題,W3C已經將Mutation Events廢棄,不過當前依然得到部分瀏覽器支援。
更多關於HTML5內容可以參閱HTML5 API版塊。
一.Mutation Events:
首先簡單介紹一下Mutation Events,它能夠監聽DOM樹結構的變化。
程式碼片段如下:
[JavaScript] 純文字檢視 複製程式碼document.getElementById("ant").addEventListener("DOMSubtreeModified", function () { console.log("螞蟻部落"); }, false);
子節點被修改,那麼就會在控制檯輸出"螞蟻部落"。
當然Mutation Events還包括其他不少事件,這裡就不介紹了。
主要缺點如下:
(1).瀏覽器相容性問題很大,並且W3C已經將其廢棄。
(2).效能較差,Mutation Events是同步操作,節點的每次變動,都會觸發事件,如果節點連續進行一萬次變動,那麼事件會連續觸發一萬次,執行一萬次回撥函式,很有可能導致瀏覽器卡頓的現象。
(3).Mutation Events是真正的事件,存在冒泡現象,可能會觸父級Mutation Events事件,導致一些問題。
二.Mutation Observer:
它被用來替代Mutation Events,所有的監視操作會在其他指令碼執行完畢後非同步執行。
所有的變化都記錄在陣列中,最後統一使用回撥函式處理,例如一個dom元素進行了若干變化,每一次變化都會暫時儲存在一個陣列中,等所有指令碼執行完成,通過回撥函式來統一執行每一次變化對應的動作。
特別說明:Mutation Observer在功能上類似於事件,但是並不是真正的事件。
瀏覽器相容性:
從上圖看,Mutation Observer的瀏覽器支援度還是非常不錯的。
主要優點如下:
(1).瀏覽器相容性更好。
(2).因為是非同步操作,所以效能會更好。
相關文章
- 監聽Dom節點變化 - Mutation ObserverServer
- Mutation Observer儲存原有的值Server
- 前端曝光資料埋點——Intersection Observer+vue指令前端ServerVue
- [Vuex系列] - Mutation的具體用法Vue
- vuex 原始碼:深入 vuex 之 mutationVue原始碼
- ora.ctssd OBSERVERServer
- Observer原始碼解析Server原始碼
- Vuex中使用報錯unknown mutation typeVue
- observer pattern 之我見Server
- observer-觀察者模式Server模式
- vue observer 原始碼學習VueServer原始碼
- 懶載入之intersection observerServer
- OBServer啟動恢復解析Server
- 理解 JavaScript Mutation 突變和 PureFunction 純函式JavaScriptFunction函式
- 第十一屆河南ACM Gene mutation(模擬)ACM
- vuex的 State ,Mutation ,Action ,Getter ,Module用途,關係Vue
- Laravel 中模型事件 Observer 的使用Laravel模型事件Server
- ajax優點?
- HTTPS 優點與缺點HTTP
- 精讀《react-intersection-observer 原始碼》ReactServer原始碼
- Hive 優缺點Hive
- MapReduce優缺點
- 棧的優點
- RabbitMQ優缺點MQ
- Vue響應式原理-理解Observer、Dep、WatcherVueServer
- 談 C++17 裡的 Observer 模式 - 3C++Server模式
- 談 C++17 裡的 Observer 模式 - 補C++Server模式
- 節點快取的優缺點快取
- MyBatis的優缺點以及特點MyBatis
- 繼承的優點和缺點繼承
- iframe有哪些優點和缺點?
- Docker的優缺點Docker
- 【DG】dg中如何配置多個後臺observerServer
- Intersection observer檢測元素是否在視窗內Server
- 原生實現的觀察者模式(Observer Model)模式Server
- 使用Intersection Observer API建立無限載入元件ServerAPI元件
- 設計模式之觀察者模式(Observer Pattern)設計模式Server
- 記 Laravel Observer 導致 Redis 佇列異常LaravelServerRedis佇列