Penyetelan Kinerja

Optimalkan rendering dan memori

Profil sumber daya Doconut didominasi oleh tiga hal: render DPI, apa yang tetap di-cache, dan berapa lama sesi hidup. Panduan ini menjelaskan tuas‑tuas tersebut berdasarkan dampaknya.

Resolusi — tuas terbesar

ImageResolution (25–300 DPI) mengendalikan baik waktu render maupun ukuran gambar. Kebanyakan format default ke 200 DPI; gambar dan PSD default ke 100.

csharp
// Pratinjau daftar dokumen tidak memerlukan kualitas cetak
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { ImageResolution = 100 });

Mengurangi DPI menjadi setengah kira‑kira mengurangi empat kali jumlah piksel per halaman — render lebih cepat, transfer lebih kecil, memori cache lebih sedikit. Simpan 250–300 DPI untuk kasus penggunaan dengan zoom berat (CAD, gambar teknik).

Untuk PDF dengan gambar tersemat yang banyak, PdfConfig menambahkan pengaturan lebih halus: CompressImages + CompressQuality, ResizeImages + ResizeResolution, dan CompressFast. Untuk gambar biasa, ImageConfig.MaxImagePixelSize (default 3000 px) membatasi ukuran output.

Caching halaman — memori vs. render ulang

BaseConfig.CachePages (default true) menyimpan setiap halaman yang dirender di memori selama masa hidup sesi. Itu adalah default yang tepat untuk tampilan interaktif — pengguna menggulir maju mundur. Matikan opsi ini ketika:

  • dokumen sangat besar dan hanya dilihat sekali, dari depan ke belakang,
  • banyak sesi bersamaan akan menggandakan halaman yang di-cache,
  • Anda lebih memilih membayar CPU per tampilan daripada menahan RAM.
csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });

Di sisi klien, ViewerConfig.CacheEnabled = true memuat sebelumnya jendela kecil bergerak berisi gambar halaman yang akan datang ke memori browser. Itu adalah cache prefetch per‑tampilan, bukan localStorage yang persisten.

Sesi — memori yang tidak Anda lihat

Setiap sesi yang terbuka menyimpan model dokumen yang telah diurai plus (dengan CachePages) halaman yang dirender, sampai TimeOut yang bergulir (default 60 menit) berakhir sejak permintaan terakhir. Dua kebiasaan menjaga hal ini tetap terkendali:

  • Tutup apa yang sudah selesai Anda gunakan. viewer.CloseDocument(token) membebaskan mesin segera alih‑alih menunggu jendela idle.
  • Sesuaikan ukuran timeout. Pratinjau yang dilihat pengguna selama dua menit tidak memerlukan sesi satu jam:
csharp
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });

Ingat trade‑offnya: setelah kedaluwarsa widget menampilkan Document session not found. Please re-open document. — pilih timeout yang sesuai dengan sesi membaca sebenarnya.

Sakelar khusus format

  • Excel: MemoryOptimizationPreference aktif secara default dan mengurangi jejak memori saat merender buku kerja yang sangat besar — biarkan tetap aktif, atau setel ke false jika Anda ingin menukar memori dengan sedikit peningkatan kecepatan; SheetNames / PrintArea membatasi rendering hanya pada yang penting.
  • Mode pengalihan memiliki biaya awal: DefaultRender = false mengonversi seluruh dokumen menjadi PDF saat dibuka. Ini memungkinkan pencarian berbasis teks secara native, tetapi pada dokumen 500 halaman panggilan buka harus melakukan konversi tersebut — jangan aktifkan secara refleksif.
  • Word/PPT di Linux/Docker: font yang hilang menyebabkan probing fallback yang lambat dan metrik yang salah; arahkan FontFolders ke direktori yang berisi font Anda.
  • Presentasi di Linux/macOS: file PPT/PPTX/PPS/POT/ODP dapat dibuka, tetapi rendering dengan mesin presentasi saat ini memerlukan libgdiplus native dan switch runtime System.Drawing.EnableUnixSupport=true. Keluarga format lain menggunakan jalur rendering lintas‑platform standar.

Strategi sisi klien

  • LargeDoc = true — strategi lazy‑load untuk dokumen sangat besar; halaman dimuat saat pengguna mendekatinya.
  • AutoLoad = false (default) — jangan render sampai Anda benar‑benar memanggil View(token).
  • ShowThumbs = false — lewati pembuatan/permintaan thumbnail untuk pratinjau satu halaman atau yang tersemat.
  • Mengaktifkan FixedZoom menghindari perubahan zoom bebas; ketika Anda memetakan ViewerConfig C#, atur FixedZoomPercentMobile (default C# 75) untuk layar kecil.

Mulai sekali, bukan per permintaan

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) harus berada di Program.cs — mendaftarkan encoding per permintaan adalah pekerjaan yang terbuang; melupakannya sepenuhnya merusak dokumen kode‑halaman lama.

Menyebarkan pekerjaan ke beberapa node

Semua hal di atas menyetel rendering satu node sesuai permintaan. Ketika satu node tidak dapat menampung beban, tuas berikutnya bukan dial yang lebih besar — melainkan memublikasikan artefak dokumen sekali ke penyimpanan bersama dan membiarkan setiap node melayaninya. Itu mengubah model biaya: rendering terjadi sekali per dokumen alih‑alih sekali per sesi, dan permintaan halaman menjadi pembacaan file. Lihat Penyebaran Terdistribusi.

Daftar periksa penyetelan

  1. Tetapkan ImageResolution terendah yang dapat diterima UX Anda.
  2. Biarkan CachePages aktif untuk tampilan interaktif; nonaktif untuk skenario satu‑pass atau konsurensi tinggi.
  3. Tutup sesi secara eksplisit; perpendek TimeOut bila penggunaan bersifat bursty.
  4. Gunakan LargeDoc + AutoLoad = false default di klien untuk dokumen besar.
  5. Gunakan DefaultRender = false hanya ketika Anda memerlukan proyeksi PDF yang berisi teks.

Apakah halaman ini membantu?