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 được 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 các phiên tồn tại. 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) điều khiển 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; hình ảnh và PSD mặc định là 100.

csharp
// 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 ít hơn, bộ nhớ đệm giảm. Dành 250–300 DPI cho các trường hợp sử dụng nhiều thu phóng (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 công tắc chi tiết hơn: CompressImages + CompressQuality, ResizeImages + ResizeResolution, và CompressFast. Đối với hình ả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 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 quá lớn và chỉ xem một lần, từ đầu tới cuối,
  • nhiều phiên đồng thời sẽ làm tăng số trang được lưu trong bộ nhớ đệm,
  • bạn muốn tiêu tốn 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. Đây là bộ nhớ đệm prefetch cho mỗi lần xem, không phải localStorage lâu dài.

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 (khi CachePages bật) các trang đã render, cho đến khi thời gian 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ờ qua khoảng thời gian nhàn rỗi.
  • Điều chỉnh thời gian chờ cho phù hợp. 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ớ sự đánh đổi: sau khi hết hạn widget sẽ hiển thị Phiên tài liệu không tồn tại. Vui lòng mở lại tài liệu. — 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 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ốc độ; SheetNames / PrintArea giới hạn việc render chỉ những phần cần thiết.
  • Chế độ chuyển hướng có chi phí ban đầu: DefaultRender = false chuyển 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 này — không bật nó một cách phản xạ.
  • Word/PPT trên Linux/Docker: thiếu phông chữ gây quá trình dự phòng chậm và các chỉ số sai; chỉ đường 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 runtime 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 sẽ tải khi người dùng đến gần.
  • 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 các bản xem trước một trang hoặc nhúng.
  • Bật FixedZoom tránh các thay đổi thu phóng tự do; khi bạn ánh xạ một ViewerConfig C#, đ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) nên được đặt trong Program.cs — đăng ký các bộ mã mỗi yêu cầu là công việc lãng phí; quên hoàn toàn nó sẽ làm hỏng các tài liệu sử dụng code-page cũ.

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

  1. Đặt ImageResolution thấp nhất mà trải nghiệm người dùng 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 duyệt 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 + AutoLoad = false mặc định 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?