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

レンダリングとメモリの最適化

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)は、セッションの存続期間中、すべてのレンダー済みページをメモリに保持します。インタラクティブな閲覧(ユーザーが前後にスクロールする)には適切なデフォルトです。以下の場合はオフにしてください。

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

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

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

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

  • 作業が終わったら必ず閉じる。 viewer.CloseDocument(token) は、アイドルウィンドウを待つことなくエンジンを即座に解放します。
  • タイムアウトを適切に設定する。 ユーザーが数分間だけプレビューを見る場合、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. ユーザーエクスペリエンスが受け入れられる最小の ImageResolution を設定する。
  2. インタラクティブな閲覧では CachePages をオンに保ち、ワンパスまたは高同時性シナリオではオフにする。
  3. セッションは明示的に閉じ、使用がバースト的な場合は TimeOut を短く設定する。
  4. 大きなドキュメントではクライアント側で LargeDoc とデフォルトの AutoLoad = false を組み合わせて使用する。
  5. テキスト検索可能な PDF 投影が必要なときだけ DefaultRender = false を使用する。

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