Dostosowywanie wydajności
Optymalizuj renderowanie i pamięć
Profil zasobów Doconut jest zdominowany przez trzy elementy: render DPI, co pozostaje w pamięci podręcznej i jak długo trwają sesje. Ten przewodnik omawia dźwignie w kolejności ich wpływu.
Rozdzielczość — najważniejsza dźwignia
ImageResolution (25–300 DPI) wpływa zarówno na czas renderowania, jak i rozmiar obrazu. Większość formatów domyślnie używa 200 DPI; obrazy i PSD domyślnie 100.
// A document list preview doesn't need print quality
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { ImageResolution = 100 });Zmniejszenie DPI o połowę przybliżenie czwarta liczbę pikseli na stronę — szybsze renderowanie, mniejsze transfery, mniej pamięci podręcznej. Zachowaj 250–300 DPI dla przypadków intensywnego przybliżania (CAD, rysunki inżynieryjne).
W przypadku plików PDF z dużą ilością osadzonych obrazów, PdfConfig dodaje bardziej precyzyjne ustawienia: CompressImages + CompressQuality, ResizeImages + ResizeResolution oraz CompressFast. Dla zwykłych obrazów, ImageConfig.MaxImagePixelSize (domyślnie 3000 px) ogranicza rozmiar wyjściowy.
Buforowanie stron — pamięć vs. ponowne renderowanie
BaseConfig.CachePages (domyślnie true) przechowuje każdą wyrenderowaną stronę w pamięci przez cały czas trwania sesji. To właściwe domyślne ustawienie dla interaktywnego przeglądania — użytkownicy przewijają w przód i w tył. Wyłącz je, gdy:
- dokumenty są ogromne i przeglądane jednorazowo, od początku do końca,
- wiele równoczesnych sesji pomnożyłoby liczbę buforowanych stron,
- wolisz obciążać CPU przy każdym wyświetleniu niż zajmować pamięć RAM.
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });Po stronie klienta, ViewerConfig.CacheEnabled = true wstępnie ładuje małe przesuwające się okno nadchodzących obrazów stron w pamięci przeglądarki. Jest to bufor prefetch per-widok, a nie trwałe localStorage.
Sesje — pamięć, której nie widzisz
Każda otwarta sesja przechowuje przetworzony model dokumentu oraz (przy włączonym CachePages) jego wyrenderowane strony, aż do upłynięcia przesuwającego się TimeOut (domyślnie 60 minut) od ostatniego żądania. Dwa nawyki utrzymują to pod kontrolą:
- Zamknij to, z czego skończyłeś.
viewer.CloseDocument(token)zwalnia silnik natychmiast, zamiast czekać na okno bezczynności. - Dostosuj czas wygaśnięcia. Podgląd, na który użytkownicy patrzą przez dwie minuty, nie wymaga godziny sesji:
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });Pamiętaj o kompromisie: po wygaśnięciu widget wyświetla Document session not found. Please re-open document. — wybierz czas wygaśnięcia odpowiadający rzeczywistym sesjom czytania.
Przełączniki specyficzne dla formatów
- Excel:
MemoryOptimizationPreferencejest domyślnie włączone i zmniejsza zużycie pamięci przy renderowaniu bardzo dużych skoroszytów — pozostaw je włączone, lub ustaw nafalse, jeśli wymienisz pamięć na niewielki przyrost prędkości;SheetNames/PrintAreaograniczają renderowanie do istotnych części. - Tryb przekierowania ma koszt początkowy:
DefaultRender = falsekonwertuje cały dokument na PDF w momencie otwarcia. Zapewnia natywne wyszukiwanie tekstowe, ale przy dokumencie 500‑stronnicowym wywołanie otwarcia niesie tę konwersję — nie włączaj go automatycznie. - Word/PPT na Linux/Docker: brakujące czcionki powodują wolne próby awaryjne i nieprawidłowe metryki; skieruj
FontFoldersdo katalogu z Twoimi czcionkami. - Prezentacje na Linux/macOS: pliki PPT/PPTX/PPS/POT/ODP mogą się otwierać, ale renderowanie przy użyciu bieżącego silnika prezentacji wymaga natywnego
libgdiplusoraz przełącznika czasu wykonywaniaSystem.Drawing.EnableUnixSupport=true. Inne rodziny formatów korzystają z normalnej, wieloplatformowej ścieżki renderowania.
Strategie po stronie klienta
LargeDoc = true— strategia leniwego ładowania dla bardzo dużych dokumentów; strony ładują się w miarę zbliżania się użytkownika.AutoLoad = false(domyślnie) — nie renderuj, dopóki nie wywołaszView(token).ShowThumbs = false— pomiń generowanie/żądania miniatur dla jednosktroniczych lub osadzonych podglądów.- Włączenie
FixedZoomzapobiega dowolnym zmianom przybliżenia; gdy mapujesz C#ViewerConfig, dostosujFixedZoomPercentMobile(domyślnie C# 75) dla małych ekranów.
Uruchamiaj raz, nie przy każdym żądaniu
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) powinno znajdować się w Program.cs — rejestrowanie kodowań przy każdym żądaniu to zmarnowana praca; całkowite pominięcie tego łamie dokumenty korzystające ze starszych stron kodowych.
Lista kontrolna dostrajania
- Ustaw najniższą
ImageResolution, jaką akceptuje Twoje UX. - Pozostaw
CachePageswłączone dla interaktywnego przeglądania; wyłączone w scenariuszach jednorazowego przeglądu lub wysokiej współbieżności. - Zamykaj sesje explicite; skróć
TimeOut, gdy użycie jest przerywane. - Użyj
LargeDoc+ domyślnegoAutoLoad = falsepo stronie klienta dla dużych dokumentów. - Używaj
DefaultRender = falsetylko wtedy, gdy potrzebujesz PDF‑a zawierającego tekst.
Czy ta strona była pomocna?