Tinh chỉnh hiệu năng

Tối ưu hoá việc render và bộ nhớ

Hồ sơ tài nguyên của Doconut bị chi phối bởi ba yếu tố: render DPI, cái gì được lưu trong bộ nhớ đệm, và thời gian tồn tại của các phiên. Hướng dẫn này sẽ đi qua các công tắc theo thứ tự ảnh hưởng.

Độ phân giải — công tắc lớn nhất

ImageResolution (25–300 DPI) quyết định cả thời gian render và kích thước ảnh. Hầu hết các định dạng mặc định là 200 DPI; ảnh và PSD mặc định là 100.

csharp
// Bản xem trước danh sách tài liệu không cần chất lượng in
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { ImageResolution = 100 });

Giảm một nửa DPI sẽ giảm khoảng một phần tư số pixel trên mỗi trang — render nhanh hơn, truyền tải nhỏ hơn, bộ nhớ đệm ít hơn. Dành 250–300 DPI cho các trường hợp sử dụng nhiều zoom (CAD, bản vẽ kỹ thuật).

Đối với PDF có nhiều hình ảnh nhúng, PdfConfig cung cấp các điều chỉnh tinh hơn: CompressImages + CompressQuality, ResizeImages + ResizeResolution, và CompressFast. Đối với ảnh thuần, ImageConfig.MaxImagePixelSize (mặc định 3000 px) giới hạn kích thước đầu ra.

Bộ nhớ đệm trang — bộ nhớ vs. render lại

BaseConfig.CachePages (mặc định true) giữ mọi trang đã render trong bộ nhớ suốt thời gian của phiên. Đây là mặc định phù hợp cho việc xem tương tác — người dùng cuộn lên xuống. Tắt nó khi:

  • tài liệu rất lớn và chỉ xem một lần, từ đầu đến cuối,
  • nhiều phiên đồng thời sẽ nhân lên số trang được lưu trong bộ nhớ đệm,
  • bạn muốn trả phí CPU cho mỗi lần xem hơn là giữ RAM.
csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });

Ở phía client, ViewerConfig.CacheEnabled = true tải trước một cửa sổ di chuyển nhỏ của các ảnh trang sắp tới trong bộ nhớ trình duyệt. Đó là bộ nhớ đệm prefetch cho mỗi lần xem, không phải localStorage bền vững.

Phiên — bộ nhớ bạn không thấy

Mỗi phiên mở giữ mô hình tài liệu đã phân tích cùng (với CachePages) các trang đã render, cho đến khi cửa sổ trượt TimeOut (mặc định 60 phút) hết kể từ yêu cầu cuối cùng. Hai thói quen giúp kiểm soát điều này:

  • Đóng những gì bạn đã xong. viewer.CloseDocument(token) giải phóng engine ngay lập tức thay vì chờ cửa sổ nhàn rỗi.
  • Điều chỉnh thời gian chờ hợp lý. Một bản xem trước mà người dùng chỉ nhìn trong hai phút không cần một phiên một giờ:
csharp
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });

Hãy nhớ cân nhắc: sau khi hết hạn widget sẽ hiển thị Document session not found. Please re-open document. — chọn thời gian chờ phù hợp với các phiên đọc thực tế.

Các công tắc riêng theo định dạng

  • Excel: MemoryOptimizationPreference được bật mặc định và giảm lượng bộ nhớ khi render các workbook rất lớn — để nó bật, hoặc đặt thành false nếu bạn muốn đổi bộ nhớ lấy một chút tăng tốc; SheetNames / PrintArea giới hạn việc render chỉ những gì quan trọng.
  • Chế độ chuyển hướng có chi phí ban đầu: DefaultRender = false chuyển đổi toàn bộ tài liệu sang PDF khi mở. Nó cho phép tìm kiếm dựa trên văn bản gốc, nhưng trên tài liệu 500 trang, lời gọi mở sẽ mang theo quá trình chuyển đổi — đừng bật nó một cách phản xạ.
  • Word/PPT trên Linux/Docker: thiếu phông chữ gây việc dò tìm dự phòng chậm và số liệu sai; chỉ định FontFolders tới thư mục chứa phông chữ của bạn.
  • Bản trình chiếu trên Linux/macOS: các tệp PPT/PPTX/PPS/POT/ODP có thể mở, nhưng việc render với engine trình chiếu hiện tại yêu cầu libgdiplus gốc và công tắc thời gian chạy System.Drawing.EnableUnixSupport=true. Các họ định dạng khác sử dụng đường dẫn render đa nền tảng bình thường.

Chiến lược phía client

  • LargeDoc = true — chiến lược tải lười cho tài liệu rất lớn; các trang được tải khi người dùng tiến gần tới chúng.
  • AutoLoad = false (mặc định) — không render cho đến khi bạn thực sự gọi View(token).
  • ShowThumbs = false — bỏ qua việc tạo/đòi hỏi thumbnail cho bản xem trước một trang hoặc nhúng.
  • Bật FixedZoom tránh các thay đổi zoom tự do; khi bạn ánh xạ một C# ViewerConfig, điều chỉnh FixedZoomPercentMobile (mặc định C# 75) cho màn hình nhỏ.

Khởi động một lần, không phải mỗi yêu cầu

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) thuộc về Program.cs — đăng ký các mã hoá mỗi yêu cầu là công việc lãng phí; quên hoàn toàn nó sẽ phá vỡ các tài liệu code-page legacy.

Danh sách kiểm tra tinh chỉnh

  1. Đặt mức ImageResolution thấp nhất mà UX của bạn chấp nhận.
  2. Giữ CachePages bật cho việc xem tương tác; tắt cho các kịch bản một lần hoặc đồng thời cao.
  3. Đóng các phiên một cách rõ ràng; rút ngắn TimeOut khi việc sử dụng có tính bùng nổ.
  4. Sử dụng LargeDoc + mặc định AutoLoad = false trên client cho tài liệu lớn.
  5. Chỉ dùng DefaultRender = false khi bạn cần một bản chiếu PDF có chứa văn bản.

Trang này có hữu ích không?