From 9d09ca1b87cdc7636df84746e4bf560e56706a3d Mon Sep 17 00:00:00 2001 From: Baivab Sarkar Date: Thu, 4 Jun 2026 12:34:02 +0530 Subject: [PATCH 1/3] Fix large document preview rendering --- desktop-app/resources/js/script.js | 271 ++++++++++++++++++++++++++--- script.js | 271 ++++++++++++++++++++++++++--- sw.js | 2 +- 3 files changed, 493 insertions(+), 51 deletions(-) diff --git a/desktop-app/resources/js/script.js b/desktop-app/resources/js/script.js index 42e56f4..afda6b1 100644 --- a/desktop-app/resources/js/script.js +++ b/desktop-app/resources/js/script.js @@ -37,9 +37,17 @@ document.addEventListener("DOMContentLoaded", function () { }; let markdownRenderTimeout = null; + let pendingPreviewRenderCancel = null; + let previewRenderGeneration = 0; + let previewHasCommittedRender = false; + let previewLastRenderedTabId = null; // PERF-003: Track last rendered content to skip redundant renders let _lastRenderedContent = null; + const LARGE_DOCUMENT_THRESHOLD = 15000; + const HUGE_DOCUMENT_THRESHOLD = 100000; const RENDER_DELAY = 100; + const LARGE_RENDER_DELAY = 160; + const HUGE_RENDER_DELAY = 240; let syncScrollingEnabled = true; let isEditorScrolling = false; let isPreviewScrolling = false; @@ -48,7 +56,7 @@ document.addEventListener("DOMContentLoaded", function () { // View Mode State - Story 1.1 let currentViewMode = 'split'; // 'editor', 'split', or 'preview' - const APP_VERSION = '3.7.2'; + const APP_VERSION = '3.7.4'; let activeModal = null; let lastFocusedElement = null; let isFindModalOpen = false; @@ -1601,6 +1609,8 @@ document.addEventListener("DOMContentLoaded", function () { function showPreviewSkeleton() { if (markdownPreview && !markdownPreview.querySelector('#markdown-preview-skeleton')) { + markdownPreview.setAttribute('aria-busy', 'true'); + markdownPreview.dataset.renderState = 'loading'; markdownPreview.innerHTML = `