Налаштування продуктивності

Оптимізація рендерингу та пам'яті

Профіль ресурсів 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 пікселів) обмежує розмір вихідного файлу.

Кешування сторінок — пам'ять проти повторного рендерингу

BaseConfig.CachePages (за замовчуванням true) зберігає кожну відрендерену сторінку в пам'яті протягом усього часу сесії. Це правильне значення за замовчуванням для інтерактивного перегляду — користувачі прокручують вперед і назад. Вимикайте його, коли:

  • документи величезні і переглядаються один раз, від початку до кінця,
  • багато одночасних сесій множать кількість кешованих сторінок,
  • ви віддаєте перевагу навантаженню процесора на перегляд, а не зайнятому ОЗУ.
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 });

Пам'ятайте про компроміс: після закінчення терміну віджет показує 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 — стратегія відкладеного завантаження для дуже великих документів; сторінки завантажуються, коли користувач наближається до них.
  • 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‑проекція з текстом.

Чи була ця сторінка корисною?