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.

csharp
// 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.
csharp
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:
csharp
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: MemoryOptimizationPreference jest domyślnie włączone i zmniejsza zużycie pamięci przy renderowaniu bardzo dużych skoroszytów — pozostaw je włączone, lub ustaw na false, jeśli wymienisz pamięć na niewielki przyrost prędkości; SheetNames / PrintArea ograniczają renderowanie do istotnych części.
  • Tryb przekierowania ma koszt początkowy: DefaultRender = false konwertuje 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 FontFolders do 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 libgdiplus oraz przełącznika czasu wykonywania System.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łasz View(token).
  • ShowThumbs = false — pomiń generowanie/żądania miniatur dla jednosktroniczych lub osadzonych podglądów.
  • Włączenie FixedZoom zapobiega dowolnym zmianom przybliżenia; gdy mapujesz C# ViewerConfig, dostosuj FixedZoomPercentMobile (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

  1. Ustaw najniższą ImageResolution, jaką akceptuje Twoje UX.
  2. Pozostaw CachePages włączone dla interaktywnego przeglądania; wyłączone w scenariuszach jednorazowego przeglądu lub wysokiej współbieżności.
  3. Zamykaj sesje explicite; skróć TimeOut, gdy użycie jest przerywane.
  4. Użyj LargeDoc + domyślnego AutoLoad = false po stronie klienta dla dużych dokumentów.
  5. Używaj DefaultRender = false tylko wtedy, gdy potrzebujesz PDF‑a zawierającego tekst.

Czy ta strona była pomocna?