การปรับจูนประสิทธิภาพ
เพิ่มประสิทธิภาพการเรนเดอร์และหน่วยความจำ
โปรไฟล์ทรัพยากรของ Doconut ถูกครอบงำโดยสามสิ่ง: ความละเอียดการเรนเดอร์ DPI, สิ่งที่ยังคงอยู่ในแคช, และ ระยะเวลาที่เซสชันคงอยู่. คู่มือนี้จะอธิบายการปรับแต่งตามลำดับความสำคัญ.
ความละเอียด — ตัวคูณที่ใหญ่ที่สุด
ImageResolution (25–300 DPI) กำหนดทั้งเวลาเรนเดอร์และขนาดภาพ. รูปแบบส่วนใหญ่ตั้งค่าเริ่มต้นที่ 200 DPI; ภาพและ PSD ตั้งค่าเริ่มต้นที่ 100.
// ตัวอย่างพรีวิวรายการเอกสารไม่ต้องการคุณภาพการพิมพ์
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 พิกเซล) จำกัดขนาดผลลัพธ์.
การแคชหน้า — หน่วยความจำ 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)จะปล่อยเอนจินทันทีแทนการรอช่วงเวลาว่าง. - กำหนดค่า Timeout ให้เหมาะสม. พรีวิวที่ผู้ใช้มองเพียงสองนาทีไม่จำเป็นต้องมีเซสชันหนึ่งชั่วโมง:
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });จำไว้ว่าเป็นการแลกเปลี่ยน: หลังจากหมดอายุ วิดเจ็ตจะแสดงข้อความ ไม่พบเซสชันเอกสาร. โปรดเปิดเอกสารใหม่. — เลือกค่า Timeout ที่สอดคล้องกับช่วงการอ่านจริง.
สวิตช์เฉพาะรูปแบบ
- Excel:
MemoryOptimizationPreferenceเปิดโดยค่าเริ่มต้น และลดการใช้หน่วยความจำเมื่อเรนเดอร์เวิร์กบุ๊กขนาดใหญ่มาก — ควรเปิดไว้, หรือตั้งเป็นfalseหากคุณต้องการแลกเปลี่ยนหน่วยความจำเพื่อเพิ่มความเร็วเล็กน้อย;SheetNames/PrintAreaจำกัดการเรนเดอร์ให้เฉพาะสิ่งที่สำคัญ. - โหมด Redirect มีค่าใช้จ่ายล่วงหน้า:
DefaultRender = falseจะเปลี่ยน เอกสารทั้งหมด เป็น PDF ขณะเปิด. มันทำให้สามารถค้นหาแบบข้อความได้ตามธรรมชาติ, แต่สำหรับเอกสาร 500 หน้า การเรียกเปิดจะต้องทำการแปลงนี้ — อย่าเปิดใช้งานโดยไม่พิจารณา. - Word/PPT บน Linux/Docker: ฟอนต์ที่หายไปทำให้การสำรวจสำรองช้าและได้เมตริกที่ผิด; ตั้งค่า
FontFoldersให้ชี้ไปยังไดเรกทอรีที่มีฟอนต์ของคุณ. - การนำเสนอบน Linux/macOS: ไฟล์ PPT/PPTX/PPS/POT/ODP สามารถเปิดได้, แต่การเรนเดอร์ด้วยเอนจินการนำเสนอปัจจุบันต้องใช้
libgdiplusแบบเนทีฟและสวิตช์รันไทม์System.Drawing.EnableUnixSupport=true. รูปแบบไฟล์อื่น ๆ จะใช้เส้นทางการเรนเดอร์ข้ามแพลตฟอร์มปกติ.
กลยุทธ์ด้านไคลเอนต์
LargeDoc = true— กลยุทธ์โหลดแบบ lazy สำหรับเอกสารขนาดใหญ่มาก; หน้าโหลดเมื่อผู้ใช้เข้าใกล้.AutoLoad = false(ค่าเริ่มต้น) — ไม่ทำการเรนเดอร์จนกว่าจะเรียกView(token)จริง.ShowThumbs = false— ข้ามการสร้างหรือร้องขอ thumbnail สำหรับพรีวิวหน้าเดียวหรือฝัง.- การเปิดใช้
FixedZoomจะหลีกเลี่ยงการเปลี่ยนแปลงซูมแบบอิสระ; เมื่อคุณแมปViewerConfigของ C#, ปรับFixedZoomPercentMobile(ค่าเริ่มต้น C# 75) สำหรับหน้าจอขนาดเล็ก.
เริ่มต้นครั้งเดียว, ไม่ใช่ต่อคำขอ
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) ควรอยู่ใน Program.cs — การลงทะเบียน encoding ต่อคำขอเป็นการทำงานที่เสียเปล่า; ลืมทำเลยจะทำให้เอกสารที่ใช้ code‑page เก่าเสีย.
รายการตรวจสอบการปรับจูน
- ตั้งค่า
ImageResolutionที่ต่ำที่สุดที่ UX ของคุณยอมรับ. - เปิด
CachePagesสำหรับการดูแบบโต้ตอบ; ปิดสำหรับการดูครั้งเดียวหรือสถานการณ์ที่มีการใช้งานพร้อมกันสูง. - ปิดเซสชันอย่างชัดเจน; ลด
TimeOutเมื่อการใช้งานเป็นแบบกระติก. - ใช้
LargeDocพร้อมค่าเริ่มต้นAutoLoad = falseบนไคลเอนต์สำหรับเอกสารขนาดใหญ่. - ใช้
DefaultRender = falseเฉพาะเมื่อคุณต้องการการแปลงเป็น PDF ที่มีข้อความ.
หน้านี้เป็นประโยชน์หรือไม่?