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.

csharp
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.
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 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:
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à redirect ha un costo iniziale: DefaultRender = false converte 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 FontFolders a 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 libgdiplus nativo e l'opzione di runtime System.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 effettivamente View(token).
  • ShowThumbs = false — salta la generazione/richieste di miniature per anteprime a pagina singola o incorporate.
  • Abilitare FixedZoom evita modifiche di zoom libere; 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 singola o ad alta concorrenza.
  3. Chiudi le sessioni esplicitamente; riduci TimeOut dove l'uso è intermittente.
  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?