การปรับประสิทธิภาพ

เพิ่มประสิทธิภาพการเรนเดอร์และหน่วยความจำ

โปรไฟล์ทรัพยากรของ Doconut ถูกครอบงำโดยสามสิ่ง: ความละเอียดการเรนเดอร์ DPI, สิ่งที่ยังคงอยู่ในแคช, และ ระยะเวลาที่เซสชันคงอยู่. คู่มือนี้จะอธิบายการปรับแต่งตามลำดับของผลกระทบ.

ความละเอียด — ตัวคันเร่งที่ใหญ่ที่สุด

ImageResolution (25–300 DPI) กำหนดทั้งเวลาเรนเดอร์และขนาดภาพ. รูปแบบส่วนใหญ่ตั้งค่าเริ่มต้นที่ 200 DPI; ภาพและ PSD ตั้งค่าเริ่มต้นที่ 100.

csharp
// การแสดงตัวอย่างรายการเอกสารไม่จำเป็นต้องมีคุณภาพการพิมพ์
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { ImageResolution = 100 });

การลด DPI ลงครึ่งหนึ่งจะทำให้จำนวนพิกเซลต่อหน้าเหลือประมาณหนึ่งในสี่ — การเรนเดอร์ที่เร็วขึ้น, การถ่ายโอนที่เล็กลง, หน่วยความจำแคชที่น้อยลง. ควรสงวน 250–300 DPI สำหรับกรณีการซูมหนัก (CAD, แผนภาพวิศวกรรม).

สำหรับ PDF ที่มีภาพฝังหนาแน่น, PdfConfig เพิ่มการปรับละเอียดที่ละเอียดขึ้น: CompressImages + CompressQuality, ResizeImages + ResizeResolution, และ CompressFast. สำหรับภาพธรรมดา, ImageConfig.MaxImagePixelSize (ค่าเริ่มต้น 3000 px) จำกัดขนาดผลลัพธ์.

การแคชหน้า — หน่วยความจำ vs. การเรนเดอร์ใหม่

BaseConfig.CachePages (ค่าเริ่มต้น true) เก็บทุกหน้าที่เรนเดอร์ไว้ในหน่วยความจำตลอดอายุของเซสชัน. นี่เป็นค่าเริ่มต้นที่เหมาะสำหรับการดูแบบโต้ตอบ — ผู้ใช้สามารถเลื่อนขึ้นลงได้. ปิดการทำงานเมื่อ:

  • เอกสารมีขนาดใหญ่และดูเพียงครั้งเดียว, ตั้งแต่หน้าแรกถึงหน้าสุดท้าย, -หลายเซสชันพร้อมกันจะทำให้จำนวนหน้าที่แคชเพิ่มขึ้นหลายเท่า, -คุณต้องการใช้ CPU ต่อการดูแทนการถือ RAM.
csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });

บนไคลเอนต์, ViewerConfig.CacheEnabled = true โหลดล่วงหน้าหน้าต่างเล็กของภาพหน้าถัดไปในหน่วยความจำของเบราว์เซอร์. มันเป็นแคชการดึงข้อมูลล่วงหน้าต่อการดูหนึ่งครั้ง, ไม่ใช่ localStorage ที่คงที่.

เซสชัน — หน่วยความจำที่คุณไม่เห็น

ทุกเซสชันที่เปิดจะเก็บโมเดลเอกสารที่แยกวิเคราะห์พร้อมกับ (ด้วย CachePages) หน้าที่เรนเดอร์, จนกว่าจะถึงช่วงเวลาสไลด์ TimeOut (ค่าเริ่มต้น 60 นาที) ที่หมดอายุ ตั้งแต่คำขอล่าสุด. สองนิสัยช่วยควบคุมสิ่งนี้:

  • ปิดสิ่งที่คุณทำเสร็จแล้ว. viewer.CloseDocument(token) ปล่อยเอนจินทันทีแทนการรอหน้าต่างว่าง.
  • กำหนดขนาดเวลาหมดอย่างเหมาะสม. ตัวอย่างที่ผู้ใช้มองเพียงสองนาทีไม่ต้องการเซสชันหนึ่งชั่วโมง:
csharp
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 หน้า การเรียกเปิดจะต้องทำการแปลงนี้ — อย่าเปิดใช้งานโดยไม่คิด.
  • Word/PPT บน Linux/Docker: ฟอนต์ที่หายไปทำให้การสำรวจสำรองช้าและเมตริกส์ผิดพลาด; ชี้ 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 — การลงทะเบียนการเข้ารหัสต่อคำขอเป็นงานที่เสียเปล่า; การลืมทำอย่างสมบูรณ์ทำให้เอกสารโค้ดเพจเก่าเสีย.

รายการตรวจสอบการปรับแต่ง

  1. ตั้งค่า ImageResolution ที่ต่ำที่สุดที่ UX ของคุณยอมรับ.
  2. เปิด CachePages สำหรับการดูแบบโต้ตอบ; ปิดสำหรับการดูครั้งเดียวหรือสถานการณ์ที่มีการทำงานพร้อมกันสูง.
  3. ปิดเซสชันอย่างชัดเจน; ลดระยะเวลา TimeOut ในกรณีที่การใช้เป็นแบบกระโดด.
  4. ใช้ LargeDoc + ค่าเริ่มต้น AutoLoad = false บนไคลเอนต์สำหรับเอกสารขนาดใหญ่.
  5. ใช้ DefaultRender = false เฉพาะเมื่อคุณต้องการการฉาย PDF ที่มีข้อความ.

หน้านี้เป็นประโยชน์หรือไม่?