性能调优
优化渲染和内存
Doconut 的资源概况主要受三件事支配:渲染 DPI、缓存内容以及会话持续时间。本指南按影响顺序逐一介绍这些调节杠杆。
分辨率 — 最大的杠杆
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 减半大约会把每页像素数降低到四分之一——渲染更快、传输更小、缓存占用更少。对于需要大量放大的场景(CAD、工程图纸),请保留 250–300 DPI。
对于嵌入大量图像的 PDF,PdfConfig 提供更细的调节:CompressImages + CompressQuality、ResizeImages + ResizeResolution,以及 CompressFast。对于普通图像,ImageConfig.MaxImagePixelSize(默认 3000 像素)限制输出尺寸。
页面缓存 — 内存 vs. 重新渲染
BaseConfig.CachePages(默认 true)在会话期间将每个已渲染的页面保存在内存中。这是交互式浏览的合适默认设置——用户可以前后滚动。当出现以下情况时请关闭它:
- 文档体积巨大且仅浏览一次,从头到尾,
- 并发会话众多会导致缓存页面数量成倍增长,
- 你更倾向于为每次查看支付 CPU 而不是占用 RAM。
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });在客户端,ViewerConfig.CacheEnabled = true 会在浏览器内存中预加载一小段即将显示的页面图像窗口。这是每次查看的预取缓存,而非持久化的 localStorage。
会话 — 你看不见的内存
每个打开的会话都会保存已解析的文档模型以及(在启用 CachePages 时)其渲染页面,直至滑动的 TimeOut(默认 60 分钟)在自上次请求以来到期。养成以下两种习惯可以控制其内存占用:
- 关闭已完成的文档。
viewer.CloseDocument(token)会立即释放引擎,而不是等待空闲窗口结束。 - 合理设置超时时间。 用户只浏览两分钟的预览并不需要一小时的会话:
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。
此页面有帮助吗?