Ajuste de Rendimiento

Optimiza el renderizado y la memoria

El perfil de recursos de Doconut está dominado por tres cosas: render DPI, lo que permanece en caché, y cuánto tiempo viven las sesiones. Esta guía recorre las palancas en orden de impacto.

Resolución — la palanca más grande

ImageResolution (25–300 DPI) controla tanto el tiempo de renderizado como el tamaño de la imagen. La mayoría de los formatos usan 200 DPI por defecto; las imágenes y PSD usan 100 por defecto.

csharp
// A document list preview doesn't need print quality
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { ImageResolution = 100 });

Reducir a la mitad el DPI reduce aproximadamente a la cuarta parte la cantidad de píxeles por página — renderizados más rápidos, transferencias más pequeñas, menos memoria de caché. Reserva 250–300 DPI para casos de uso con mucho zoom (CAD, planos de ingeniería).

Para PDFs con imágenes incrustadas intensas, PdfConfig añade ajustes más finos: CompressImages + CompressQuality, ResizeImages + ResizeResolution, y CompressFast. Para imágenes simples, ImageConfig.MaxImagePixelSize (por defecto 3000 px) limita el tamaño de salida.

Caché de páginas — memoria vs. re-renderizado

BaseConfig.CachePages (por defecto true) mantiene cada página renderizada en memoria durante la vida de la sesión. Ese es el valor predeterminado correcto para la visualización interactiva — los usuarios se desplazan adelante y atrás. Desactívalo cuando:

  • los documentos son enormes y se visualizan una sola vez, de principio a fin,
  • muchas sesiones concurrentes multiplicarían las páginas en caché,
  • prefieras gastar CPU por vista en lugar de ocupar RAM.
csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });

En el cliente, ViewerConfig.CacheEnabled = true precarga una pequeña ventana móvil de imágenes de páginas próximas en la memoria del navegador. Es una caché de prefetch por vista, no un localStorage persistente.

Sesiones — la memoria que no ves

Cada sesión abierta mantiene el modelo de documento analizado más (con CachePages) sus páginas renderizadas, hasta que el TimeOut deslizante (por defecto 60 minutos) transcurre desde la última solicitud. Dos hábitos mantienen esto bajo control:

  • Cierra lo que ya no necesitas. viewer.CloseDocument(token) libera el motor inmediatamente en lugar de esperar la ventana de inactividad.
  • Ajusta el tiempo de espera. Una vista previa que los usuarios miran durante dos minutos no necesita una sesión de una hora:
csharp
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });

Recuerda la compensación: después de expirar el widget muestra Document session not found. Please re-open document. — elige un tiempo de espera que coincida con las sesiones de lectura reales.

Conmutadores específicos por formato

  • Excel: MemoryOptimizationPreference está activado por defecto y reduce la huella de memoria al renderizar libros de trabajo muy grandes — déjalo activado, o establécelo a false si prefieres cambiar memoria por una pequeña ganancia de velocidad; SheetNames / PrintArea restringen el renderizado a lo que importa.
  • El modo de redirección tiene un costo inicial: DefaultRender = false convierte el documento completo a PDF al abrirlo. Obtienes búsqueda nativa basada en texto, pero en un documento de 500 páginas la llamada de apertura lleva esa conversión — no lo actives de forma reflexiva.
  • Word/PPT en Linux/Docker: la falta de fuentes provoca una búsqueda de respaldo lenta y métricas incorrectas; apunta FontFolders a un directorio con tus fuentes.
  • Presentaciones en Linux/macOS: los archivos PPT/PPTX/PPS/POT/ODP pueden abrirse, pero el renderizado con el motor de presentaciones actual requiere libgdiplus nativo y el interruptor de tiempo de ejecución System.Drawing.EnableUnixSupport=true. Otras familias de formatos usan la ruta de renderizado multiplataforma normal.

Estrategias del lado del cliente

  • LargeDoc = true — estrategia de carga diferida para documentos muy grandes; las páginas se cargan a medida que el usuario se acerca a ellas.
  • AutoLoad = false (por defecto) — no renderizar hasta que realmente llames a View(token).
  • ShowThumbs = false — omitir la generación/solicitud de miniaturas para vistas previas de una sola página o incrustadas.
  • Habilitar FixedZoom evita cambios de zoom libres; cuando mapeas un ViewerConfig en C#, ajusta FixedZoomPercentMobile (valor predeterminado C# 75) para pantallas pequeñas.

Inicializar una vez, no por solicitud

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) pertenece a Program.cs — registrar codificaciones por solicitud es trabajo desperdiciado; olvidarlo por completo rompe documentos legados con páginas de código.

Lista de verificación de ajuste

  1. Establece la ImageResolution más baja que acepte tu UX.
  2. Mantén CachePages activado para visualización interactiva; desactívalo para escenarios de un solo paso o alta concurrencia.
  3. Cierra las sesiones explícitamente; acorta TimeOut donde el uso sea intermitente.
  4. Usa LargeDoc + AutoLoad = false por defecto en el cliente para documentos grandes.
  5. Usa DefaultRender = false solo cuando necesites una proyección PDF con texto.

¿Fue útil esta página?