パフォーマンスチューニング

Optimize rendering and memory

Doconut のリソースプロファイルは、レンダー DPIキャッシュに残るものセッションの存続時間の3つが支配しています。このガイドでは、インパクトの順にレバーを説明します。

解像度 — 最大のレバー

ImageResolution (25–300 DPI) は、レンダー時間と画像サイズの両方を決定します。ほとんどのフォーマットはデフォルトで200 DPI、画像とPSDはデフォルトで100 DPIです。

csharp
// A document list preview doesn't need print quality
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { ImageResolution = 100 });

DPI を半分にすると、ページあたりのピクセル数は約4分の1になり、レンダーが速くなり、転送が小さくなり、キャッシュメモリも減ります。ズームが多用されるケース(CAD、エンジニアリング図面)では 250–300 DPI を確保してください。

画像が多く埋め込まれた PDF では、PdfConfig がより細かい設定を提供します:CompressImagesCompressQualityResizeImagesResizeResolution、そして CompressFast。単純な画像の場合は、ImageConfig.MaxImagePixelSize(デフォルト 3000 ピクセル)が出力サイズを上限します。

ページキャッシュ — メモリ対再レンダー

BaseConfig.CachePages(デフォルト true)は、セッションの存続期間中、レンダーされたすべてのページをメモリに保持します。インタラクティブな閲覧(ユーザーが前後にスクロール)には適切なデフォルトです。以下の場合はオフにしてください:

  • 文書が非常に大きく、最初から最後まで一度だけ閲覧する場合、
  • 多数の同時セッションがキャッシュページを増幅させる場合、
  • RAM を保持するよりも、ビューごとに CPU コストを支払う方が好ましい場合。
csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });

クライアント側では、ViewerConfig.CacheEnabled = true に設定すると、ブラウザのメモリに次のページ画像の小さなウィンドウを事前読み込みします。これはビューごとのプリフェッチキャッシュであり、永続的な localStorage ではありません。

セッション — 見えないメモリ

開かれたすべてのセッションは、解析されたドキュメントモデルと(CachePages が有効な場合)レンダーされたページを保持し、スライディング TimeOut(デフォルト 60 分)が 最後のリクエストから 経過するまで保持されます。この状態を管理するための2つの習慣:

  • 使用が終わったら閉じる。 viewer.CloseDocument(token) はアイドルウィンドウを待つことなくエンジンを即座に解放します。
  • タイムアウトを適切に設定する。 ユーザーが2分程度閲覧するプレビューには1時間のセッションは不要です:
csharp
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });

トレードオフを覚えておいてください:期限が切れるとウィジェットは Document session not found. Please re-open document. と表示します — 実際の閲覧セッションに合ったタイムアウトを選択してください。

フォーマット別スイッチ

  • ExcelMemoryOptimizationPreference はデフォルトで オン であり、非常に大きなブックのレンダー時のメモリフットプリントを削減します — オンのままにするか、メモリを犠牲にしてわずかな速度向上を望む場合は false に設定してください;SheetNames / PrintArea は重要な部分だけのレンダーに制限します。
  • リダイレクトモードは前もってコストがかかりますDefaultRender = false はオープン時に文書全体を PDF に変換します。これによりネイティブなテキスト検索が可能になりますが、500ページの文書ではオープン呼び出し時に変換が発生します — 反射的に有効にしないでください。
  • Linux/Docker 上の Word/PPT:フォントが欠如すると、フォールバック探索が遅くなり、メトリクスが誤ります;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. UX が受け入れられる最小の ImageResolution を設定します。
  2. インタラクティブな閲覧では CachePages をオンに保ち、ワンパスまたは高同時性シナリオではオフにします。
  3. セッションは明示的に閉じ、使用がバースト的な場合は TimeOut を短くします。
  4. 大きな文書ではクライアント側で LargeDoc とデフォルトの AutoLoad = false を使用します。
  5. テキストを含む PDF 投影が必要な場合にのみ DefaultRender = false を使用します。

このページは役に立ちましたか?