Βελτιστοποίηση Απόδοσης

Βελτιστοποίηση απόδοσης και μνήμης

Το προφίλ πόρων του Doconut κυριαρχείται από τρία πράγματα: DPI απόδοσης, τι παραμένει στην προσωρινή αποθήκευση, και πόσο διαρκούν οι συνεδρίες. Αυτός ο οδηγός περπατά τα μοχλούς με τη σειρά της επίδρασης.

Ανάλυση — ο μεγαλύτερος μοχλός

ImageResolution (25–300 DPI) καθορίζει τόσο τον χρόνο απόδοσης όσο και το μέγεθος της εικόνας. Οι περισσότερες μορφές έχουν προεπιλογή 200 DPI· οι εικόνες και τα PSD έχουν προεπιλογή 100.

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

Η μείωση του DPI στο ήμισυ μειώνει περίπου κατά τέσσερα τον αριθμό εικονοστοιχείων ανά σελίδα — ταχύτερη απόδοση, μικρότερες μεταφορές, λιγότερη μνήμη προσωρινής αποθήκευσης. Κρατήστε 250–300 DPI για περιπτώσεις χρήσης με έντονο ζουμ (CAD, τεχνικά σχέδια).

Για PDF με έντονη ενσωματωμένη εικονογράφηση, το PdfConfig προσθέτει πιο λεπτές ρυθμίσεις: CompressImages + CompressQuality, ResizeImages + ResizeResolution, και CompressFast. Για απλές εικόνες, το ImageConfig.MaxImagePixelSize (προεπιλογή 3000 εικ. px) περιορίζει το μέγεθος εξόδου.

Προσωρινή αποθήκευση σελίδων — μνήμη vs. επανα-απόδοση

BaseConfig.CachePages (προεπιλογή true) διατηρεί κάθε αποδοθείσα σελίδα στη μνήμη για τη διάρκεια της συνεδρίας. Αυτό είναι η σωστή προεπιλογή για διαδραστική προβολή — οι χρήστες κυλούν μπρος και πίσω. Απενεργοποιήστε το όταν:

  • τα έγγραφα είναι τεράστια και προβάλλονται μία φορά, από την αρχή μέχρι το τέλος,
  • πολλές ταυτόχρονες συνεδρίες θα πολλαπλασιάσουν τις αποθηκευμένες σελίδες,
  • προτιμάτε να πληρώνετε CPU ανά προβολή αντί να κρατάτε RAM.
csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });

Στον πελάτη, το ViewerConfig.CacheEnabled = true προφορτώνει ένα μικρό κινούμενο παράθυρο από επερχόμενες εικόνες σελίδων στη μνήμη του προγράμματος περιήγησης. Είναι προσωρινή προσωρινή αποθήκευση ανά προβολή, όχι μόνιμο localStorage.

Συνεδρίες — η μνήμη που δεν βλέπετε

Κάθε ανοιχτή συνεδρία κρατά το αναλυμένο μοντέλο εγγράφου συν (με CachePages) τις αποδοθείσες σελίδες της, μέχρι να λήξει το κυλιόμενο TimeOut (προεπιλογή 60 λεπτά) από το τελευταίο αίτημα. Δύο συνήθειες το διατηρούν υπό έλεγχο:

  • Κλείστε ό,τι έχετε τελειώσει. viewer.CloseDocument(token) ελευθερώνει τη μηχανή αμέσως αντί να περιμένει το παράθυρο αδράνειας.
  • Ρυθμίστε σωστά το χρονικό όριο. Μια προεπισκόπηση που οι χρήστες ρίχνουν μια ματιά για δύο λεπτά δεν χρειάζεται συνεδρία μιας ώρας:
csharp
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });

Θυμηθείτε το συμβιβαστικό: μετά τη λήξη το widget εμφανίζει Document session not found. Please re-open document. — επιλέξτε ένα χρονικό όριο που ταιριάζει με τις πραγματικές συνεδρίες ανάγνωσης.

Ειδικές ρυθμίσεις ανά μορφή

  • Excel: το MemoryOptimizationPreference είναι ενεργό από προεπιλογή και μειώνει το αποτύπωμα μνήμης κατά την απόδοση πολύ μεγάλων βιβλίων εργασίας — αφήστε το ενεργό, ή ορίστε το σε false αν θα ανταλλάξετε μνήμη για μικρή κερδισμένη ταχύτητα· τα SheetNames / PrintArea περιορίζουν την απόδοση σε ό,τι είναι σημαντικό.
  • Η λειτουργία ανακατεύθυνσης έχει αρχικό κόστος: το DefaultRender = false μετατρέπει ολόκληρο το έγγραφο σε PDF κατά το άνοιγμα. Παρέχει εγγενή αναζήτηση κειμένου, αλλά σε έγγραφο 500 σελίδων η κλήση ανοίγματος μεταφέρει αυτή τη μετατροπή — μην το ενεργοποιείτε αυτόματα.
  • Word/PPT σε Linux/Docker: η έλλειψη γραμματοσειρών προκαλεί αργή εναλλακτική ανίχνευση και λανθασμένα μετρικά στοιχεία· ορίστε το FontFolders σε έναν φάκελο με τις γραμματοσειρές σας.
  • Παρουσιάσεις σε Linux/macOS: τα αρχεία PPT/PPTX/PPS/POT/ODP μπορούν να ανοίξουν, αλλά η απόδοση με τη τρέχουσα μηχανή παρουσίασης απαιτεί το εγγενές libgdiplus και τη διακόπτη χρόνου εκτέλεσης System.Drawing.EnableUnixSupport=true. Άλλες οικογένειες μορφών χρησιμοποιούν τη φυσιολογική δια-πλατφόρμα διαδρομή απόδοσης.

Στρατηγικές στην πλευρά του πελάτη

  • LargeDoc = true — στρατηγική lazy-load για πολύ μεγάλα έγγραφα· οι σελίδες φορτώνουν καθώς ο χρήστης τις προσεγγίζει.
  • AutoLoad = false (προεπιλογή) — μην αποδίδετε μέχρι να καλέσετε πραγματικά το View(token).
  • ShowThumbs = false — παραλείψτε τη δημιουργία/αίτηση μικρογραφιών για μονές σελίδες ή ενσωματωμένες προεπισκοπήσεις.
  • Η ενεργοποίηση του FixedZoom αποτρέπει τις ελεύθερες αλλαγές ζουμ· όταν χαρτογραφείτε ένα C# ViewerConfig, ρυθμίστε το FixedZoomPercentMobile (προεπιλογή C# 75) για μικρές οθόνες.

Εκκίνηση μία φορά, όχι ανά αίτημα

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) ανήκει στο Program.cs — η καταχώρηση κωδικοποιήσεων ανά αίτημα είναι σπατάλη εργασίας· η πλήρης παράλειψ του διασπά έγγραφα κωδικοσελίδων παλαιού τύπου.

Διανομή της εργασίας σε κόμβους

Όλα τα παραπάνω ρυθμίζουν την απόδοση ενός κόμβου κατ' ανάγκη. Όταν ένας μόνο κόμβος δεν μπορεί να απορροφήσει το φορτίο, ο επόμενος μοχλός δεν είναι μεγαλύτερη ρύθμιση — είναι η δημοσίευση των τεχνουργημάτων ενός εγγράφου μία φορά σε κοινόχρηστη αποθήκευση και η εξυπηρέτηση τους από κάθε κόμβο. Αυτό αλλάζει το μοντέλο κόστους: η απόδοση γίνεται μία φορά ανά έγγραφο αντί για μία φορά ανά συνεδρία, και τα αιτήματα σελίδων γίνονται αναγνώσεις αρχείων. Δείτε το Κατανεμημένες Αναπτύξεις.

Λίστα ελέγχου βελτιστοποίησης

  1. Ορίστε τη χαμηλότερη ImageResolution που αποδέχεται η εμπειρία χρήστη (UX).
  2. Διατηρήστε το CachePages ενεργό για διαδραστική προβολή· απενεργοποιήστε το για σενάρια μονού περάσματος ή υψηλής ταυτόχρονης χρήσης.
  3. Κλείστε τις συνεδρίες ρητά· μειώστε το TimeOut όταν η χρήση είναι σποραδική.
  4. Χρησιμοποιήστε LargeDoc + προεπιλογή AutoLoad = false στον πελάτη για μεγάλα έγγραφα.
  5. Χρησιμοποιήστε DefaultRender = false μόνο όταν χρειάζεστε μια PDF προβολή με κείμενο.

Ήταν αυτή η σελίδα χρήσιμη;