From d5e7b2a5beaea3a32915f2fd28ee2fdcd81e060b Mon Sep 17 00:00:00 2001 From: Research Assistant Date: Wed, 20 May 2026 17:03:50 +0800 Subject: [PATCH] fix: debounce page observer to prevent render spam --- paperforge/plugin/main.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/paperforge/plugin/main.js b/paperforge/plugin/main.js index 6826282b..23e9577d 100644 --- a/paperforge/plugin/main.js +++ b/paperforge/plugin/main.js @@ -608,15 +608,13 @@ function injectPdfEventHooks(containerEl, view, vaultPath, pdfPath, plugin) { var anns = fetchAnnotationsForPaper(vaultPath, pdfPath); console.log('[PF] fetched ' + (anns ? anns.length : 0) + ' annotations for ' + pdfPath); if (anns && anns.length > 0) { renderAnnotationsOnExistingPages(containerEl); } - var pageObserver = new MutationObserver(function (mutations) { - var changed = false; - for (var mi = 0; mi < mutations.length; mi++) { - if (mutations[mi].addedNodes.length > 0) { changed = true; break; } - } - if (changed) { - console.log('[PF] page DOM changed, re-rendering overlays'); + var _debounceTimer = null; + var pageObserver = new MutationObserver(function () { + if (_debounceTimer) clearTimeout(_debounceTimer); + _debounceTimer = setTimeout(function () { + _debounceTimer = null; renderAnnotationsOnExistingPages(containerEl); - } + }, 200); }); pageObserver.observe(containerEl, { childList: true, subtree: true }); if (plugin && typeof plugin.register === 'function') {