Тонка налаштування продуктивності
Оптимізація рендерингу та пам'яті
Профіль ресурсів Doconut переважає три фактори: DPI рендерингу, те, що залишається в кеші, та тривалість сесій. Цей посібник розглядає важелі у порядку їх впливу.
Роздільна здатність — найбільший важіль
ImageResolution (25–300 DPI) визначає як час рендерингу, так і розмір зображення. Більшість форматів за замовчуванням мають 200 DPI; зображення та PSD — 100.
// 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) зберігає кожну відрендерену сторінку в пам'яті протягом всього часу життя сесії. Це правильне значення за замовчуванням для інтерактивного перегляду — користувачі прокручують вперед і назад. Вимикайте його, коли:
- документи великі і переглядаються один раз, від початку до кінця,
- багато одночасних сесій збільшать кількість кешованих сторінок,
- ви віддаєте перевагу навантаженню CPU на перегляд, а не зайняттю ОЗП.
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 });Пам'ятайте про компроміс: після закінчення терміну віджет показує 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 — реєстрація кодувань на кожен запит є марнотратною; повне забування цього ламає документи зі старими кодовими сторінками.
Чекліст налаштувань
- Встановіть найнижчу
ImageResolution, яку приймає ваш UX. - Тримайте
CachePagesувімкненим для інтерактивного перегляду; вимикайте для одноразових або сценаріїв з високою конкурентністю. - Явно закривайте сесії; скорочуйте
TimeOut, коли використання спорадичне. - Використовуйте
LargeDoc+ за замовчуваннямAutoLoad = falseна клієнті для великих документів. - Використовуйте
DefaultRender = falseлише коли потрібна PDF‑проекція з текстом.
Чи була ця сторінка корисною?