From 4f6dc56eff97db1a1b08af9bbdb118014027f308 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Wed, 10 Apr 2024 10:59:05 +0900 Subject: [PATCH] Refactor startObserveDom function to use a while loop instead of MutationObserver for better performance --- src/ts/observer.ts | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/src/ts/observer.ts b/src/ts/observer.ts index c2184de7..f792f63a 100644 --- a/src/ts/observer.ts +++ b/src/ts/observer.ts @@ -2,6 +2,7 @@ import { get } from "svelte/store"; import { runTrigger } from "./process/triggers"; import { CurrentCharacter, CurrentChat } from "./stores"; import { runCharacterJS } from "./plugins/embedscript"; +import { sleep } from "./util"; function nodeObserve(node:HTMLElement){ @@ -47,23 +48,11 @@ function nodeObserve(node:HTMLElement){ } } -export function startObserveDom(){ - const observer = new MutationObserver((mutations) => { - mutations.forEach((mutation) => { - const node = mutation.target as HTMLElement; - if(node.nodeType !== 1){ - return; - } - node.querySelectorAll('[risu-trigger]').forEach(nodeObserve); - node.querySelectorAll('[risu-btn]').forEach(nodeObserve); - nodeObserve(node) - }); - }); - - observer.observe(document.body, { - childList: true, - subtree: true, - attributeFilter: ['risu-trigger', 'risu-btn'], - attributes: true, - }); +export async function startObserveDom(){ + //We are using a while loop intead of MutationObserver because MutationObserver is expensive for just a few elements + while(true){ + document.querySelectorAll('[risu-trigger]').forEach(nodeObserve); + document.querySelectorAll('[risu-btn]').forEach(nodeObserve); + await sleep(100); + } } \ No newline at end of file