Optimisation des performances

Optimize rendering and memory

Le profil de ressources de Doconut est dominé par trois éléments : render DPI, what stays cached, et how long sessions live. Ce guide parcourt les leviers par ordre d'impact.

Résolution — le levier le plus important

ImageResolution (25–300 DPI) détermine à la fois le temps de rendu et la taille de l'image. La plupart des formats utilisent 200 DPI par défaut ; les images et les PSD utilisent 100 DPI par défaut.

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

Diviser le DPI par deux réduit d'environ un facteur quatre le nombre de pixels par page — rendus plus rapides, transferts plus petits, moins de mémoire cache. Réservez 250–300 DPI pour les cas d'utilisation nécessitant un fort zoom (CAO, dessins techniques).

Pour les PDF contenant beaucoup d'images intégrées, PdfConfig ajoute des réglages plus fins : CompressImages + CompressQuality, ResizeImages + ResizeResolution, et CompressFast. Pour les images simples, ImageConfig.MaxImagePixelSize (3000 px par défaut) limite la taille de sortie.

Mise en cache des pages — mémoire vs. nouveau rendu

BaseConfig.CachePages (par défaut true) conserve chaque page rendue en mémoire pendant toute la durée de la session. C'est le réglage par défaut approprié pour la visualisation interactive — les utilisateurs font défiler en avant et en arrière. Désactivez-le lorsque :

  • les documents sont volumineux et consultés une seule fois, de la première à la dernière page,
  • de nombreuses sessions concurrentes multiplieraient les pages mises en cache,
  • vous préférez consommer du CPU par affichage plutôt que d'occuper de la RAM.
csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });

Côté client, ViewerConfig.CacheEnabled = true précharge une petite fenêtre mobile d'images de pages à venir dans la mémoire du navigateur. Il s'agit d'un cache de préchargement par affichage, pas d'un localStorage persistant.

Sessions — la mémoire que vous ne voyez pas

Chaque session ouverte conserve le modèle de document analysé ainsi que (avec CachePages) ses pages rendues, jusqu'à ce que le TimeOut glissant (60 minutes par défaut) expire depuis la dernière requête. Deux bonnes pratiques permettent de garder cela sous contrôle :

  • Fermez ce dont vous avez fini. viewer.CloseDocument(token) libère le moteur immédiatement au lieu d'attendre la fenêtre d'inactivité.
  • Ajustez la durée du timeout. Un aperçu que les utilisateurs consultent pendant deux minutes n'a pas besoin d'une session d'une heure :
csharp
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });

Rappelez-vous du compromis : après expiration, le widget affiche Document session not found. Please re-open document. — choisissez un timeout qui correspond aux sessions de lecture réelles.

Commutateurs spécifiques aux formats

  • Excel : MemoryOptimizationPreference est activé par défaut et réduit l'empreinte mémoire lors du rendu de classeurs très volumineux — laissez-le activé, ou réglez-le sur false si vous êtes prêt à échanger de la mémoire contre un léger gain de vitesse ; SheetNames / PrintArea limitent le rendu à ce qui est pertinent.
  • Le mode de redirection a un coût initial : DefaultRender = false convertit le document entier en PDF au moment de l'ouverture. Cela permet la recherche native basée sur le texte, mais sur un document de 500 pages l'appel d'ouverture effectue cette conversion — ne l'activez pas de façon réflexive.
  • Word/PPT sous Linux/Docker : l'absence de polices entraîne une recherche de secours lente et des métriques incorrectes ; pointez FontFolders vers un répertoire contenant vos polices.
  • Présentations sous Linux/macOS : les fichiers PPT/PPTX/PPS/POT/ODP peuvent s'ouvrir, mais le rendu avec le moteur de présentation actuel nécessite le libgdiplus natif et le commutateur d'exécution System.Drawing.EnableUnixSupport=true. Les autres familles de formats utilisent le chemin de rendu multiplateforme habituel.

Stratégies côté client

  • LargeDoc = true — stratégie de chargement différé pour les documents très volumineux ; les pages se chargent à mesure que l'utilisateur s'en approche.
  • AutoLoad = false (par défaut) — ne pas rendre tant que vous n'appelez pas réellement View(token).
  • ShowThumbs = false — ignorer la génération/demande de miniatures pour les aperçus à page unique ou intégrés.
  • Activer FixedZoom évite les changements de zoom libres ; lorsque vous mappez un ViewerConfig C#, ajustez FixedZoomPercentMobile (75 par défaut en C#) pour les petits écrans.

Démarrage unique, pas à chaque requête

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) doit être placé dans Program.cs — enregistrer les encodages à chaque requête est du travail inutile ; l'oublier complètement casse les documents legacy utilisant des pages de code.

Checklist d'optimisation

  1. Définissez la plus basse ImageResolution que votre UX accepte.
  2. Laissez CachePages activé pour la visualisation interactive ; désactivez-le pour les scénarios à passage unique ou à forte concurrence.
  3. Fermez les sessions explicitement ; raccourcissez le TimeOut lorsque l'utilisation est ponctuelle.
  4. Utilisez LargeDoc + AutoLoad = false par défaut côté client pour les gros documents.
  5. Utilisez DefaultRender = false uniquement lorsque vous avez besoin d'une projection PDF contenant du texte.

Cette page vous a-t-elle été utile ?