Penyetelan Kinerja
Optimalkan rendering dan memori
Profil sumber daya Doconut didominasi oleh tiga hal: DPI render, apa yang tetap di‑cache, dan berapa lama sesi berlangsung. Panduan ini menjelaskan tuas‑tuasnya menurut urutan dampak.
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.
// Pratinjau daftar dokumen tidak memerlukan kualitas cetak
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { ImageResolution = 100 });Mengurangi DPI menjadi setengah kira‑kira mengurangi seperempat 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 berat, 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 sesi. Itu adalah default yang tepat untuk tampilan interaktif — pengguna menggulir maju mundur. Matikan 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.
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });Di sisi klien, ViewerConfig.CacheEnabled = true memuat sebelumnya jendela kecil yang bergerak berisi gambar halaman yang akan datang dalam memori peramban. Itu adalah cache prefetch per tampilan, bukan localStorage yang persisten.
Sesi — memori yang tidak Anda lihat
Setiap sesi terbuka menyimpan model dokumen yang diurai plus (dengan CachePages) halaman yang dirender, sampai sliding TimeOut (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 sekilas selama dua menit tidak memerlukan sesi satu jam:
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });Ingat pertukaran: setelah kedaluwarsa widget menampilkan Document session not found. Please re-open document. — pilih timeout yang sesuai dengan sesi membaca sebenarnya.
Saklar khusus format
- Excel:
MemoryOptimizationPreferenceaktif secara default dan mengurangi jejak memori saat merender buku kerja yang sangat besar — biarkan tetap aktif, atau setel kefalsejika Anda menukar memori untuk peningkatan kecepatan kecil;SheetNames/PrintAreamembatasi rendering hanya pada hal yang penting. - Mode pengalihan memiliki biaya awal:
DefaultRender = falsemengonversi seluruh dokumen ke PDF saat dibuka. Ini memungkinkan pencarian berbasis teks asli, tetapi pada dokumen 500 halaman panggilan buka membawa konversi tersebut — jangan aktifkan secara refleksif. - Word/PowerPoint pada server tanpa font dokumen: Windows Server tanpa Office memiliki jauh lebih sedikit font dibandingkan mesin pengembangan. Font yang hilang menyebabkan probing fallback yang lambat dan metrik yang salah; instal font tersebut, atau arahkan
FontFolderske folder yang menyimpannya.
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 memanggilView(token).ShowThumbs = false— lewati pembuatan/permintaan thumbnail untuk pratinjau satu halaman atau tersemat.- Mengaktifkan
FixedZoommenghindari perubahan zoom bebas; ketika Anda memetakan C#ViewerConfig, aturFixedZoomPercentMobile(default C# 75) untuk layar kecil.
Mulai sekali, bukan per permintaan
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) berada di Application_Start, di samping DoconutHost.Initialize — mendaftarkan encoding per permintaan adalah pekerjaan yang terbuang; melupakannya sepenuhnya merusak dokumen kode‑halaman warisan.
Dokumen pertama setelah start
Doconut memuat mesin dokumennya pertama kali sebuah dokumen dibuka dalam sebuah aplikasi — setelah pool dimulai, setelah setiap daur ulang, dan di setiap domain aplikasi baru. Pembukaan pertama itu lebih lambat daripada yang berikutnya, dan antivirus waktu‑nyata dapat membuatnya jauh lebih lambat: mesin dimuat dari memori, dan Microsoft Defender memindai kode tersebut saat dimuat. Pengecualian folder tidak membantu, karena tidak ada berkas yang terlibat.
Diukur pada mesin Windows Server 2022 dengan 4 core, membuka dokumen Word dua halaman:
| Dokumen pertama | Setiap dokumen setelahnya | |
|---|---|---|
| Proteksi real‑time Defender aktif | sekitar 70 s | 0.3–7.5 s, tergantung pada format |
| Proteksi real‑time Defender nonaktif | 12–15 s | 0.3–7.5 s, tergantung pada format |
Bayar sekali, sebelum pengguna Anda melakukannya:
- Pertahankan proses pekerja tetap hidup: set Start Mode pool aplikasi ke
AlwaysRunning, dan tingkatkan atau nonaktifkan idle time‑out‑nya, sehingga malam yang tenang tidak membongkar mesin. - Panaskan pada start: aktifkan Application Initialization IIS (
preloadEnabled="true"pada situs) dan arahkaninitializationPageke halaman Anda yang membuka dokumen kecil. Pengguna nyata pertama kemudian menemukan mesin sudah dimuat. - Beri waktu pada permintaan pertama: pemeriksaan kesehatan load balancer atau proxy hulu dengan timeout singkat dapat menyerah pada start dingin yang seharusnya berhasil.
Apakah mengubah pengaturan antivirus pada server adalah keputusan tim keamanan Anda; pemanasan di atas berfungsi tanpa itu.
Pool aplikasi
Pada satu server, sesi dokumen dan halaman yang di‑cache berada dalam proses pekerja. Setiap daur ulang pool aplikasi — yang terjadwal, edit ke Web.config, atau idle time‑out pool (20 menit secara default di IIS) — menghapus semuanya, dan penampil terbuka kemudian menampilkan Document session not found. Please re-open document.
- Selaraskan idle time‑out dan jadwal daur ulang pool dengan berapa lama pengguna Anda sebenarnya membaca, atau bersiaplah untuk membuka kembali dokumen setelah daur ulang.
- Jalankan pool sebagai proses 64‑bit (biarkan Enable 32‑Bit Applications dimatikan). Dokumen besar membutuhkan ruang alamat yang tidak dimiliki proses pekerja 32‑bit.
- Web farm menyimpan sesi dalam penyimpanan bersama, sehingga daur ulang pada satu node tidak kehilangan mereka — lihat Sessions & Security.
Daftar periksa penyetelan
- Tetapkan
ImageResolutionterendah yang diterima UX Anda. - Pertahankan
CachePagesaktif untuk tampilan interaktif; nonaktif untuk skenario satu‑lalu lintas atau konsurensi tinggi. - Tutup sesi secara eksplisit; perpendek
TimeOutbila penggunaan bersifat bursty. - Gunakan
LargeDoc+ defaultAutoLoad = falsepada klien untuk dokumen besar. - Gunakan
DefaultRender = falsehanya ketika Anda memerlukan proyeksi PDF yang berisi teks.
Apakah halaman ini membantu?