Ottimizzazione delle Prestazioni

Ottimizza rendering e memoria

Il profilo delle risorse di Doconut è dominato da tre elementi: render DPI, cosa rimane nella cache e quanto tempo vivono le sessioni. Questa guida esplora le leve in ordine di impatto.

Risoluzione — la leva più importante

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.

csharp
// Una 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 zoom intenso (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.
csharp
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. 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:
csharp
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 a false se vuoi scambiare memoria per un piccolo guadagno di velocità; SheetNames / PrintArea limitano il rendering a ciò che è importante.
  • La modalità di reindirizzamento ha un costo iniziale: DefaultRender = false converte 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 lente indagini di fallback e metriche errate; punta FontFolders a 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 libgdiplus nativo e l'opzione di runtime System.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 effettivamente View(token).
  • ShowThumbs = false — salta la generazione/richieste di miniature per anteprime a pagina singola o incorporate.
  • Abilitare FixedZoom evita cambiamenti di zoom liberi; quando mappi un ViewerConfig C#, regola FixedZoomPercentMobile (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

  1. Imposta la più bassa ImageResolution accettata dalla tua UX.
  2. Mantieni CachePages attivo per la visualizzazione interattiva; disattivalo per scenari a passata unica o ad alta concorrenza.
  3. Chiudi le sessioni esplicitamente; riduci TimeOut dove l'uso è a scoppi.
  4. Usa LargeDoc + AutoLoad = false di default sul client per documenti grandi.
  5. Usa DefaultRender = false solo quando ti serve una proiezione PDF con testo.

Questa pagina è stata utile?