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.
// 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.
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 :
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 :
MemoryOptimizationPreferenceest 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 surfalsesi vous êtes prêt à échanger de la mémoire contre un léger gain de vitesse ;SheetNames/PrintArealimitent le rendu à ce qui est pertinent. - Le mode de redirection a un coût initial :
DefaultRender = falseconvertit 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
FontFoldersvers 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
libgdiplusnatif et le commutateur d'exécutionSystem.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éellementView(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 unViewerConfigC#, ajustezFixedZoomPercentMobile(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
- Définissez la plus basse
ImageResolutionque votre UX accepte. - Laissez
CachePagesactivé pour la visualisation interactive ; désactivez-le pour les scénarios à passage unique ou à forte concurrence. - Fermez les sessions explicitement ; raccourcissez le
TimeOutlorsque l'utilisation est ponctuelle. - Utilisez
LargeDoc+AutoLoad = falsepar défaut côté client pour les gros documents. - Utilisez
DefaultRender = falseuniquement lorsque vous avez besoin d'une projection PDF contenant du texte.
Cette page vous a-t-elle été utile ?