パフォーマンスチューニング
レンダリングとメモリの最適化
Doconut のリソースプロファイルは、描画 DPI、キャッシュに残るもの、セッションの存続時間の 3 つが支配しています。本ガイドでは、インパクトの大きい順にレバーを解説します。
解像度 — 最大のレバー
ImageResolution(25〜300 DPI)は、レンダー時間と画像サイズの両方を左右します。ほとんどのフォーマットはデフォルトで 200 DPI、画像と PSD のデフォルトは 100 DPI です。
// 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 がさらに細かい設定を提供します:CompressImages と CompressQuality、ResizeImages と ResizeResolution、そして CompressFast。単純な画像の場合は、ImageConfig.MaxImagePixelSize(デフォルト 3000 ピクセル)が出力サイズの上限となります。
ページキャッシュ — メモリ対再レンダー
BaseConfig.CachePages(デフォルトは true)は、セッションの存続期間中、すべてのレンダー済みページをメモリに保持します。インタラクティブな閲覧(ユーザーが前後にスクロールする)には適切なデフォルトです。以下の場合はオフにしてください。
- ドキュメントが非常に大きく、最初から最後まで一度だけ閲覧する場合、
- 多数の同時セッションがキャッシュページを増幅させる場合、
- 閲覧ごとに CPU コストを支払う方が RAM を保持するより好ましい場合。
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });クライアント側では、ViewerConfig.CacheEnabled = true により、ブラウザメモリに次のページ画像の小さなウィンドウを事前に読み込みます。これはビュー単位のプリフェッチキャッシュであり、永続的な localStorage ではありません。
セッション — 見えないメモリ
開かれた各セッションは、解析されたドキュメントモデルと(CachePages が有効な場合)そのレンダー済みページを保持し、スライド式の TimeOut(デフォルト 60 分)が 最後のリクエストから 経過するまで保持します。この状態を管理するための 2 つの習慣は次のとおりです。
- 作業が終わったら必ず閉じる。
viewer.CloseDocument(token)は、アイドルウィンドウを待つことなくエンジンを即座に解放します。 - タイムアウトを適切に設定する。 ユーザーが数分間だけプレビューを見る場合、1 時間のセッションは不要です。
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });トレードオフを覚えておいてください。期限切れになるとウィジェットは Document session not found. Please re-open document. と表示します。実際の閲覧時間に合ったタイムアウトを選択してください。
フォーマット別スイッチ
- Excel:
MemoryOptimizationPreferenceは デフォルトでオン であり、非常に大きなブックをレンダーする際のメモリフットプリントを削減します。オンのままにするか、メモリを犠牲にしてわずかな速度向上を狙う場合は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 に記述すべきです。リクエストごとにエンコーディングを登録すると無駄な作業になり、登録し忘れるとレガシーなコードページドキュメントが正しく読み込めなくなります。
チューニングチェックリスト
- ユーザーエクスペリエンスが受け入れられる最小の
ImageResolutionを設定する。 - インタラクティブな閲覧では
CachePagesをオンに保ち、ワンパスまたは高同時性シナリオではオフにする。 - セッションは明示的に閉じ、使用がバースト的な場合は
TimeOutを短く設定する。 - 大きなドキュメントではクライアント側で
LargeDocとデフォルトのAutoLoad = falseを組み合わせて使用する。 - テキスト検索可能な PDF 投影が必要なときだけ
DefaultRender = falseを使用する。
このページは役に立ちましたか?