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 esplora 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.
// Un'anteprima dell'elenco dei documenti non richiede qualità di stampa
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 ingegneristici).
Per i PDF con molte immagini incorporate, PdfConfig aggiunge impostazioni più precise: CompressImages + CompressQuality, ResizeImages + ResizeResolution e CompressFast. Per le immagini semplici, ImageConfig.MaxImagePixelSize (predefinito 3000 px) limita la dimensione dell'output.
Cache 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 pre‑carica 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 conserva 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 il motore immediatamente 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 Sessione del documento non trovata. Per favore riapri il documento. — 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 su testo, ma su un documento di 500 pagine la chiamata di apertura porta con sé 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 formato usano il normale percorso di rendering cross‑platform.
Strategie lato client
LargeDoc = true— strategia di caricamento lazy 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 cambi di zoom liberi; 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 è a scoppi. - Usa
LargeDoc+AutoLoad = falsedi default sul client per documenti grandi. - Usa
DefaultRender = falsesolo quando hai bisogno di una proiezione PDF con testo.
Questa pagina è stata utile?