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‑tuasnya berdasarkan dampak.

Resolusi — tuas terbesar

ImageResolution (25–300 DPI) mengendalikan baik waktu render maupun ukuran gambar. Kebanyakan format memiliki nilai default 200 DPI; gambar dan PSD memiliki default 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 yang banyak melakukan zoom (CAD, gambar teknik).

Untuk PDF dengan banyak gambar tersemat, PdfConfig menambahkan pengaturan yang 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 dalam memori selama masa hidup sesi. Itu adalah nilai default yang tepat untuk tampilan interaktif — pengguna dapat menggulir maju mundur. Nonaktifkan 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, hingga TimeOut 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 secara langsung alih-alih menunggu jendela idle.
  • Sesuaikan ukuran timeout. Pratinjau yang pengguna lihat 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 yang sebenarnya.

Saklar khusus format

  • Excel: MemoryOptimizationPreference aktif secara default dan mengurangi jejak memori saat merender workbook yang sangat besar — biarkan tetap aktif, atau setel ke false jika Anda rela menukar memori dengan sedikit peningkatan kecepatan; SheetNames / PrintArea membatasi rendering hanya pada yang penting.
  • Mode pengalihan memiliki biaya awal: DefaultRender = false mengonversi seluruh dokumen ke PDF saat dibuka. Ini memungkinkan pencarian berbasis teks secara native, tetapi pada dokumen 500 halaman panggilan buka membawa 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 saklar 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 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) seharusnya berada di Program.cs — mendaftarkan encoding per permintaan adalah pekerjaan yang terbuang; melupakannya sepenuhnya merusak dokumen kode‑halaman lama.

Daftar periksa penyetelan

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

Apakah halaman ini membantu?