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.
// Un'anteprima dell'elenco dei documenti non richiede la 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 immagini incorporate pesanti, PdfConfig aggiunge regolazioni più precise: 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 una 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 la finestra mobile TimeOut (predefinita 60 minuti) non 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 richiede 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 sufalsese vuoi scambiare memoria per un piccolo guadagno di velocità;SheetNames/PrintArealimitano il rendering a ciò che è importante. - La modalità di reindirizzamento 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 porta con sé quella conversione — non attivarla automaticamente. - Word/PPT su Linux/Docker: i font mancanti causano una lenta ricerca di fallback e metriche errate; punta
FontFoldersa una directory con 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'interruttore 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 modifiche di zoom libere; quando mappi un C#ViewerConfig, 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.
Distribuire il lavoro tra i nodi
Tutto quanto sopra ottimizza il rendering di un singolo nodo su richiesta. Quando un nodo singolo non può assorbire il carico, la leva successiva non è una manopola più grande — è pubblicare gli artefatti di un documento una volta in uno storage condiviso e lasciare che ogni nodo li serva. Questo cambia il modello di costo: il rendering avviene una volta per documento invece che una volta per sessione, e le richieste di pagina diventano letture di file. Vedi Distribuzioni distribuite.
Una checklist di ottimizzazione
- Imposta il più basso
ImageResolutionche la tua UX accetta. - 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 = falsepredefinito sul client per documenti grandi. - Usa
DefaultRender = falsesolo quando hai bisogno di una proiezione PDF con testo.
Questa pagina è stata utile?