From df433f852f6c2690e8261896d7865f07671cdda0 Mon Sep 17 00:00:00 2001 From: Shirasawa <764798966@qq.com> Date: Wed, 17 Sep 2025 07:52:12 +0000 Subject: [PATCH] feat: Dynamically load jspdf and html2canvas-pro to improve first-screen loading speed --- src/lib/components/layout/Navbar/Menu.svelte | 8 +++++--- src/lib/components/layout/Sidebar/ChatMenu.svelte | 8 +++++--- src/lib/components/notes/NoteEditor.svelte | 8 +++++--- src/lib/components/notes/Notes.svelte | 8 +++++--- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/lib/components/layout/Navbar/Menu.svelte b/src/lib/components/layout/Navbar/Menu.svelte index 6d0c8b62c6..451afdf88e 100644 --- a/src/lib/components/layout/Navbar/Menu.svelte +++ b/src/lib/components/layout/Navbar/Menu.svelte @@ -6,9 +6,6 @@ import fileSaver from 'file-saver'; const { saveAs } = fileSaver; - import jsPDF from 'jspdf'; - import html2canvas from 'html2canvas-pro'; - import { downloadChatAsPDF } from '$lib/apis/utils'; import { copyToClipboard, createMessagesList } from '$lib/utils'; @@ -75,6 +72,11 @@ }; const downloadPdf = async () => { + const [{ default: jsPDF }, { default: html2canvas }] = await Promise.all([ + import('jspdf'), + import('html2canvas-pro') + ]); + if ($settings?.stylizedPdfExport ?? true) { showFullMessages = true; await tick(); diff --git a/src/lib/components/layout/Sidebar/ChatMenu.svelte b/src/lib/components/layout/Sidebar/ChatMenu.svelte index 0e08816c1e..1a8ddad248 100644 --- a/src/lib/components/layout/Sidebar/ChatMenu.svelte +++ b/src/lib/components/layout/Sidebar/ChatMenu.svelte @@ -6,9 +6,6 @@ import fileSaver from 'file-saver'; const { saveAs } = fileSaver; - import jsPDF from 'jspdf'; - import html2canvas from 'html2canvas-pro'; - const dispatch = createEventDispatcher(); import Dropdown from '$lib/components/common/Dropdown.svelte'; @@ -91,6 +88,11 @@ return; } + const [{ default: jsPDF }, { default: html2canvas }] = await Promise.all([ + import('jspdf'), + import('html2canvas-pro') + ]); + if ($settings?.stylizedPdfExport ?? true) { showFullMessages = true; await tick(); diff --git a/src/lib/components/notes/NoteEditor.svelte b/src/lib/components/notes/NoteEditor.svelte index 22bbc32e33..eb4fb9cfbd 100644 --- a/src/lib/components/notes/NoteEditor.svelte +++ b/src/lib/components/notes/NoteEditor.svelte @@ -4,9 +4,6 @@ import fileSaver from 'file-saver'; const { saveAs } = fileSaver; - import jsPDF from 'jspdf'; - import html2canvas from 'html2canvas-pro'; - const i18n = getContext('i18n'); import { marked } from 'marked'; @@ -575,6 +572,11 @@ ${content} const downloadPdf = async (note) => { try { + const [{ default: jsPDF }, { default: html2canvas }] = await Promise.all([ + import('jspdf'), + import('html2canvas-pro') + ]); + // Define a fixed virtual screen size const virtualWidth = 1024; // Fixed width (adjust as needed) const virtualHeight = 1400; // Fixed height (adjust as needed) diff --git a/src/lib/components/notes/Notes.svelte b/src/lib/components/notes/Notes.svelte index abada07812..0e57c67230 100644 --- a/src/lib/components/notes/Notes.svelte +++ b/src/lib/components/notes/Notes.svelte @@ -5,9 +5,6 @@ const { saveAs } = fileSaver; - import jsPDF from 'jspdf'; - import html2canvas from 'html2canvas-pro'; - import dayjs from '$lib/dayjs'; import duration from 'dayjs/plugin/duration'; import relativeTime from 'dayjs/plugin/relativeTime'; @@ -137,6 +134,11 @@ const downloadPdf = async (note) => { try { + const [{ default: jsPDF }, { default: html2canvas }] = await Promise.all([ + import('jspdf'), + import('html2canvas-pro') + ]); + // Define a fixed virtual screen size const virtualWidth = 1024; // Fixed width (adjust as needed) const virtualHeight = 1400; // Fixed height (adjust as needed)