Optimisation des performances
Optimiser le rendu et la mémoire
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.
// 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 d'ingénierie).
Pour les PDF contenant de nombreuses 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 visualisés une seule fois, de bout en bout,
- de nombreuses sessions concurrentes multiplieraient les pages en cache,
- vous préférez consommer du CPU par vue plutôt que de garder 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électure par vue, 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 terminé.
viewer.CloseDocument(token)libère le moteur immédiatement au lieu d'attendre la fin de la période 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 });Gardez à l'esprit le compromis : après expiration, le widget affiche Document session not found. Please re-open document. — choisissez un timeout qui correspond aux véritables sessions de lecture.
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 : les polices manquantes entraînent 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 normal.
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(valeur par défaut C# 75) pour les petits écrans.
Démarrage unique, pas par 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 utilisant des pages de code héritées.
Checklist d'optimisation
- Définissez la plus basse
ImageResolutionque votre UX accepte. - Gardez
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 ?