Βελτιστοποίηση Απόδοσης
Βελτιστοποίηση απόδοσης και μνήμης
Το προφίλ πόρων του Doconut κυριαρχείται από τρία πράγματα: DPI απόδοσης, τι παραμένει στην προσωρινή μνήμη, και πόσο διαρκούν οι συνεδρίες. Αυτός ο οδηγός περιγράφει τις ρυθμίσεις με σειρά προτεραιότητας.
Ανάλυση — ο μεγαλύτερος μοχλός
ImageResolution (25–300 DPI) οδηγεί τόσο στο χρόνο απόδοσης όσο και στο μέγεθος της εικόνας. Οι περισσότερες μορφές έχουν προεπιλογή 200 DPI· οι εικόνες και τα PSD έχουν προεπιλογή 100.
// Μια προεπισκόπηση λίστας εγγράφων δεν χρειάζεται ποιότητα εκτύπωσης
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { ImageResolution = 100 });Η μείωση του DPI στο μισό μειώνει περίπου κατά τέσσερα τον αριθμό των εικονοστοιχείων ανά σελίδα — ταχύτερη απόδοση, μικρότερες μεταφορές, λιγότερη μνήμη προσωρινής αποθήκευσης. Κρατήστε 250–300 DPI για περιπτώσεις με έντονη μεγέθυνση (CAD, τεχνικά σχέδια).
Για PDFs με έντονη ενσωματωμένη εικονογραφία, PdfConfig προσθέτει πιο ακριβείς ρυθμίσεις: CompressImages + CompressQuality, ResizeImages + ResizeResolution, και CompressFast. Για απλές εικόνες, ImageConfig.MaxImagePixelSize (προεπιλογή 3000 px) περιορίζει το μέγεθος εξόδου.
Προσωρινή αποθήκευση σελίδων — μνήμη vs. επαναδημιουργία
BaseConfig.CachePages (προεπιλογή true) διατηρεί κάθε αποδοθείσα σελίδα στη μνήμη για τη διάρκεια της συνεδρίας. Αυτή είναι η σωστή προεπιλογή για διαδραστική προβολή — οι χρήστες κυλούν μπροστά και πίσω. Απενεργοποιήστε το όταν:
- τα έγγραφα είναι τεράστια και προβάλλονται μία φορά, από την αρχή μέχρι το τέλος,
- πολλαπλές ταυτόχρονες συνεδρίες θα πολλαπλασιάσουν τις αποθηκευμένες σελίδες,
- προτιμάτε να πληρώνετε CPU ανά προβολή αντί να κρατάτε RAM.
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });Στον πελάτη, ViewerConfig.CacheEnabled = true προφορτώνει ένα μικρό κινούμενο παράθυρο με τις επερχόμενες εικόνες σελίδων στη μνήμη του προγράμματος περιήγησης. Είναι μια προσωρινή μνήμη προφόρτωσης ανά προβολή, όχι μόνιμη localStorage.
Συνεδρίες — η μνήμη που δεν βλέπετε
Κάθε ανοιχτή συνεδρία κρατά το αναλυμένο μοντέλο εγγράφου συν (με CachePages) τις αποδοθείσες σελίδες του, μέχρι να λήξει η κυλιόμενη TimeOut (προεπιλογή 60 λεπτά) από το τελευταίο αίτημα. Δύο συνήθειες διατηρούν αυτό υπό έλεγχο:
- Κλείστε ό,τι δεν χρειάζεστε.
viewer.CloseDocument(token)ελευθερώνει τη μηχανή αμέσως αντί να περιμένει το παράθυρο αδράνειας. - Ρυθμίστε σωστά το χρονικό όριο. Μια προεπισκόπηση που οι χρήστες κοιτάζουν για δύο λεπτά δεν χρειάζεται μια συνεδρία μιας ώρας:
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/PowerPoint σε διακομιστή χωρίς τις γραμματοσειρές των εγγράφων: ένας Windows Server χωρίς Office έχει πολύ λιγότερες γραμματοσειρές από ένα μηχάνημα ανάπτυξης. Η έλλειψη γραμματοσειρών προκαλεί αργή αναζήτηση εναλλακτικών και λανθασμένα μετρικά; εγκαταστήστε τις γραμματοσειρές ή κατευθύνετε
FontFoldersσε έναν φάκελο που τις περιέχει.
Στρατηγικές στην πλευρά του πελάτη
LargeDoc = true— στρατηγική lazy-load για πολύ μεγάλα έγγραφα· οι σελίδες φορτώνονται καθώς ο χρήστης τις προσεγγίζει.AutoLoad = false(προεπιλογή) — μην αποδίδετε μέχρι να καλέσετε πραγματικά τοView(token).ShowThumbs = false— παραλείψτε τη δημιουργία/αίτηση μικρογραφιών για προεπισκοπήσεις μονής σελίδας ή ενσωματωμένες.- Η ενεργοποίηση του
FixedZoomαποτρέπει τις ελεύθερες αλλαγές ζουμ· όταν αντιστοιχίζετε ένα C#ViewerConfig, ρυθμίστε τοFixedZoomPercentMobile(προεπιλογή C# 75) για μικρές οθόνες.
Εκκίνηση μία φορά, όχι ανά αίτημα
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) ανήκει στο Application_Start, δίπλα στο DoconutHost.Initialize — η καταγραφή κωδικοποιήσεων ανά αίτημα είναι σπατάλη εργασίας· η πλήρης παράλειψή του διασπά τα παλιά έγγραφα κωδικοσελίδων.
Το πρώτο έγγραφο μετά από εκκίνηση
Το Doconut φορτώνει τις μηχανές εγγράφων του την πρώτη φορά που ανοίγεται ένα έγγραφο σε μια εφαρμογή — μετά την εκκίνηση της δεσμεύσεως, μετά από κάθε επαναφόρτωση και σε κάθε νέο domain εφαρμογής. Αυτό το πρώτο άνοιγμα είναι πιο αργό από τα επόμενα, και το antivirus σε πραγματικό χρόνο μπορεί να το κάνει πολύ πιο αργό: οι μηχανές φορτώνονται από τη μνήμη, και το Microsoft Defender ελέγχει αυτόν τον κώδικα καθώς φορτώνεται. Η εξαίρεση φακέλου δεν βοηθά, επειδή δεν εμπλέκεται κανένα αρχείο.
Μετρημένο σε μηχάνημα Windows Server 2022 με 4 πυρήνες, το άνοιγμα ενός εγγράφου Word δύο σελίδων:
| Πρώτο έγγραφο | Κάθε έγγραφο μετά από αυτό | |
|---|---|---|
| Ασφάλεια Defender σε πραγματικό χρόνο ενεργή | περίπου 70 s | 0.3–7.5 s, ανάλογα με τη μορφή |
| Ασφάλεια Defender σε πραγματικό χρόνο ανενεργή | 12–15 s | 0.3–7.5 s, ανάλογα με τη μορφή |
Πληρώστε το μία φορά, πριν το κάνουν οι χρήστες σας:
- Κρατήστε τη διαδικασία εργασίας ενεργή: ορίστε το Start Mode της δεσμεύσεως εφαρμογής σε
AlwaysRunning, και αυξήστε ή απενεργοποιήστε το idle time-out, ώστε μια ήσυχη νύχτα να μην απελευθερώνει τις μηχανές. - Προθερμάνετε το κατά την εκκίνηση: ενεργοποιήστε το IIS Application Initialization (
preloadEnabled="true"στον ιστότοπο) και κατευθύνετε τοinitializationPageσε μια σελίδα σας που ανοίγει ένα μικρό έγγραφο. Ο πρώτος πραγματικός χρήστης τότε βρίσκει τις μηχανές ήδη φορτωμένες. - Δώστε χρόνο στο πρώτο αίτημα: ένας έλεγχος υγείας φορτωτή ή ένας upstream proxy με σύντομο χρονικό όριο μπορεί να εγκαταλείψει μια κρύα εκκίνηση που θα είχε επιτυχία.
Το αν θα αλλάξετε τις ρυθμίσεις antivirus σε έναν διακομιστή είναι απόφαση της ομάδας ασφαλείας σας· η παραπάνω προθέρμανση λειτουργεί χωρίς αυτό.
Η δεσμεύση εφαρμογής
Σε έναν μοναδικό διακομιστή, οι συνεδρίες εγγράφων και οι αποθηκευμένες σελίδες ζουν στη διαδικασία εργασίας. Κάθε επαναφόρτωση της δεσμεύσης εφαρμογής — η προγραμματισμένη, μια επεξεργασία του Web.config, ή το idle time-out της δεσμεύσης (20 λεπτά από προεπιλογή στο IIS) — τις καταστρέφει όλες, και οι ανοιχτοί προβολείς τότε εμφανίζουν Document session not found. Please re-open document.
- Συντονίστε το idle time-out και το πρόγραμμα επαναφόρτωσης της δεσμεύσης με το πόσο διαβάζουν πραγματικά οι χρήστες σας, ή να είστε έτοιμοι να ανοίξετε ξανά τα έγγραφα μετά από επαναφόρτωση.
- Εκτελέστε τη δεσμεύση ως 64-bit διεργασία (αφήστε το Enable 32-Bit Applications απενεργοποιημένο). Τα μεγάλα έγγραφα χρειάζονται το χώρο διευθύνσεων που δεν έχει μια 32-bit διεργασία εργασίας.
- Ένα web farm διατηρεί τις συνεδρίες σε κοινόχρηστο αποθηκευτικό χώρο, ώστε μια επαναφόρτωση σε έναν κόμβο να μην τις χάσει — δείτε Συνεδρίες & Ασφάλεια.
Λίστα ελέγχου βελτιστοποίησης
- Ορίστε το χαμηλότερο
ImageResolutionπου αποδέχεται η εμπειρία χρήστη (UX) σας. - Κρατήστε το
CachePagesενεργό για διαδραστική προβολή· απενεργοποιήστε το για σενάρια μίας διαδρομής ή υψηλής ταυτόχρονης χρήσης. - Κλείστε τις συνεδρίες ρητά· συντομεύστε το
TimeOutόπου η χρήση είναι εκρηκτική. - Χρησιμοποιήστε το
LargeDoc+ προεπιλογήAutoLoad = falseστον πελάτη για μεγάλα έγγραφα. - Χρησιμοποιήστε το
DefaultRender = falseμόνο όταν χρειάζεστε μια προβολή PDF με κείμενο.
Ήταν αυτή η σελίδα χρήσιμη;