Refactor startObserveDom function to use a while loop instead of MutationObserver for better performance

This commit is contained in:
kwaroran
2024-04-10 10:59:05 +09:00
parent ff089e658f
commit 4f6dc56eff

View File

@@ -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);
}
}