Ottimizzazione delle Prestazioni
Ottimizza il rendering e la memoria
Il profilo delle risorse di Doconut è dominato da tre elementi: render DPI, cosa rimane nella cache e quanto durano le sessioni. Questa guida percorre le leve in ordine di impatto.
Risoluzione — la leva più grande
ImageResolution (25–300 DPI) determina sia il tempo di rendering sia la dimensione dell'immagine. La maggior parte dei formati ha come predefinito 200 DPI; le immagini e i PSD hanno come predefinito 100.
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { ImageResolution = 100 });Ridurre la DPI della metà dimezza approssimativamente il conteggio dei pixel per pagina — rendering più veloce, trasferimenti più piccoli, meno memoria cache. Riserva 250–300 DPI per casi d'uso con molto zoom (CAD, disegni tecnici).
Per i PDF con molte immagini incorporate, PdfConfig aggiunge controlli più fini: CompressImages + CompressQuality, ResizeImages + ResizeResolution e CompressFast. Per le immagini semplici, ImageConfig.MaxImagePixelSize (predefinito 3000 px) limita la dimensione dell'output.
Caching delle pagine — memoria vs. ri-render
BaseConfig.CachePages (predefinito true) mantiene ogni pagina renderizzata in memoria per tutta la durata della sessione. È il valore predefinito corretto per la visualizzazione interattiva — gli utenti scorrono avanti e indietro. Disattivalo quando:
- i documenti sono enormi e visualizzati una sola volta, dall'inizio alla fine,
- molte sessioni concorrenti moltiplicherebbero le pagine nella cache,
- preferisci spendere CPU per visualizzazione piuttosto che occupare RAM.
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });Sul client, ViewerConfig.CacheEnabled = true precarica una piccola finestra mobile di immagini delle pagine successive nella memoria del browser. È una cache di prefetch per visualizzazione, non un localStorage persistente.
Sessioni — la memoria che non vedi
Ogni sessione aperta mantiene il modello del documento analizzato più (con CachePages) le sue pagine renderizzate, fino a quando il TimeOut scorrevole (predefinito 60 minuti) scade dalla ultima richiesta. Due abitudini mantengono questo sotto controllo:
- Chiudi ciò che hai finito di usare.
viewer.CloseDocument(token)libera immediatamente il motore invece di attendere la finestra di inattività. - Dimensiona correttamente il timeout. Un'anteprima che gli utenti guardano per due minuti non ha bisogno di una sessione di un'ora:
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });Ricorda il compromesso: dopo la scadenza il widget mostra Document session not found. Please re-open document. — scegli un timeout che corrisponda alle reali sessioni di lettura.
Interruttori specifici per formato
- Excel:
MemoryOptimizationPreferenceè attivo per impostazione predefinita e riduce l'impronta di memoria durante il rendering di cartelle di lavoro molto grandi — lascialo attivo, o impostalo afalsese vuoi scambiare memoria per un piccolo guadagno di velocità;SheetNames/PrintArealimitano il rendering a ciò che è importante. - La modalità redirect ha un costo iniziale:
DefaultRender = falseconverte l'intero documento in PDF al momento dell'apertura. Consente la ricerca nativa basata sul testo, ma su un documento di 500 pagine la chiamata di apertura comporta quella conversione — non abilitarla automaticamente. - Word/PPT su Linux/Docker: i font mancanti causano una lenta ricerca di fallback e metriche errate; punta
FontFoldersa una directory contenente i tuoi font. - Presentazioni su Linux/macOS: i file PPT/PPTX/PPS/POT/ODP possono aprirsi, ma il rendering con il motore di presentazione attuale richiede
libgdiplusnativo e l'opzione di runtimeSystem.Drawing.EnableUnixSupport=true. Altre famiglie di formati usano il normale percorso di rendering multipiattaforma.
Strategie lato client
LargeDoc = true— strategia di caricamento pigro per documenti molto grandi; le pagine si caricano man mano che l'utente si avvicina.AutoLoad = false(predefinito) — non renderizzare finché non chiami effettivamenteView(token).ShowThumbs = false— salta la generazione/richieste di miniature per anteprime a pagina singola o incorporate.- Abilitare
FixedZoomevita modifiche di zoom libere; quando mappi unViewerConfigC#, regolaFixedZoomPercentMobile(predefinito C# 75) per schermi piccoli.
Avvio una sola volta, non per richiesta
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) appartiene a Program.cs — registrare le codifiche per ogni richiesta è lavoro sprecato; dimenticarlo del tutto rompe i documenti legacy basati su code-page.
Una checklist di ottimizzazione
- Imposta la più bassa
ImageResolutionaccettata dalla tua UX. - Mantieni
CachePagesattivo per la visualizzazione interattiva; disattivalo per scenari a passata singola o ad alta concorrenza. - Chiudi le sessioni esplicitamente; riduci
TimeOutdove l'uso è intermittente. - Usa
LargeDoc+AutoLoad = falsedi default sul client per documenti grandi. - Usa
DefaultRender = falsesolo quando ti serve una proiezione PDF con testo.
Questa pagina è stata utile?