class ListenDomChange { constructor(dom, callbackDomChange) { // 监听 dom 节点 this.dom = dom; // 回调函数 this.callbackDomChange = callbackDomChange; } // 监听 dom变化 mutationListen() { // 选择需要观察变动的节点 const targetNode = this.dom // 观察器的配置(需要观察什么变动) const config = { attributes: true, childList: true, subtree: true }; // 当观察到变动时执行的回调函数 const callback = function (mutationsList, observer) { // Use traditional 'for loops' for IE 11 for (let mutation of mutationsList) { if (mutation.type === "childList") { console.log("A child node has been added or removed."); } else if (mutation.type === "attributes") { console.log("The " + mutation.attributeName + " attribute was modified."); } } }; // 创建一个观察器实例并传入回调函数 const observer = new MutationObserver(callback); // 以上述配置开始观察目标节点 observer.observe(targetNode, config); // 之后,可停止观察 observer.disconnect(); } getPerformance() { // Time to when activation occurred let activationStart = performance.getEntriesByType("navigation")[0].activationStart; // Time to first paint let firstPaint = performance.getEntriesByName("first-paint")[0].startTime; // Time to first contentful paint let firstContentfulPaint = performance.getEntriesByName( "first-contentful-paint", )[0].startTime; console.log("time to first paint: " + (firstPaint - activationStart)); console.log( "time to first-contentful-paint: " + (firstContentfulPaint - activationStart), ); } } export { ListenDomChange }