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 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 quan trọng 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.
// 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 ảnh thông thường, 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 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 tiêu tốn CPU cho mỗi lần xem hơn là giữ RAM.
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ờ:
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ông tắc riêng cho từng định dạng
- Excel:
MemoryOptimizationPreferencebật theo 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ànhfalsenếu bạn muốn đổi bộ nhớ lấy một chút tốc độ;SheetNames/PrintAreagiớ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 = falsechuyển toàn bộ tài liệu sang PDF khi mở. Nó cho phép tìm kiếm bả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 việc dò tìm dự phòng chậm và các chỉ số sai; chỉ định
FontFolderstớ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
libgdiplusgốc và công tắc runtimeSystem.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 tiếp cận.AutoLoad = false(mặc định) — không render cho đến khi bạn thực sự gọiView(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
FixedZoomtránh các thay đổi thu phóng tự do; khi bạn ánh xạ một C#ViewerConfig, điều chỉnhFixedZoomPercentMobile(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í; bỏ qua hoàn toàn sẽ làm hỏng các tài liệu sử dụng code-page cũ.
Phân phối công việc qua các node
Tất cả các nội dung trên điều chỉnh việc render trên một node theo yêu cầu. Khi một node đơn không thể chịu tải, công tắc tiếp theo không phải là tăng cường độ — mà là xuất bản các artefact của tài liệu một lần vào bộ nhớ chia sẻ và để mọi node phục vụ chúng. Điều này thay đổi mô hình chi phí: việc render diễn ra một lần cho mỗi tài liệu thay vì một lần cho mỗi phiên, và các yêu cầu trang trở thành việc đọc file. Xem Triển khai phân tán.
Danh sách kiểm tra tinh chỉnh
- Đặt
ImageResolutionthấp nhất mà trải nghiệm người dùng của bạn chấp nhận. - Giữ
CachePagesbậ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. - Đóng các phiên một cách rõ ràng; rút ngắn
TimeOutkhi việc sử dụng có tính bùng nổ. - Sử dụng
LargeDoc+AutoLoad = falsemặc định trên client cho tài liệu lớn. - Chỉ dùng
DefaultRender = falsekhi bạn cần một bản PDF có chứa văn bản.
Trang này có hữu ích không?