تحسين الأداء
تحسين العرض والذاكرة
ملف موارد Doconut يهيمن عليه ثلاثة أشياء: DPI العرض، ما يبقى مخزنًا مؤقتًا، و مدة بقاء الجلسات. يشرح هذا الدليل الرافعات حسب تأثيرها.
الدقة — الرافعة الأكبر
ImageResolution (25–300 DPI) يتحكم في كل من وقت العرض وحجم الصورة. معظم الصيغ الافتراضية 200 DPI؛ الصور و PSD الافتراضية 100.
// A document list preview doesn't need print quality
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 بكسل) يحدد الحد الأقصى لحجم الإخراج.
التخزين المؤقت للصفحات — الذاكرة مقابل إعادة العرض
BaseConfig.CachePages (الافتراضي true) يحتفظ بكل صفحة مُعروضة في الذاكرة طوال مدة الجلسة. هذا هو الإعداد الافتراضي المناسب للعرض التفاعلي — المستخدمون يتنقلون ذهابًا وإيابًا. قم بإيقافه عندما:
- الوثائق ضخمة وتُعرض مرة واحدة من البداية إلى النهاية،
- عدد كبير من الجلسات المتزامنة سيضاعف الصفحات المخزنة مؤقتًا،
- تفضل استهلاك CPU لكل عرض بدلاً من احتفاظ بالذاكرة.
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });على العميل، ViewerConfig.CacheEnabled = true يحمّل مسبقًا نافذة صغيرة متحركة من صور الصفحات القادمة في ذاكرة المتصفح. إنها ذاكرة تخزين مؤقت مسبقة للعرض، ليست localStorage مستمرة.
الجلسات — الذاكرة التي لا تراها
كل جلسة مفتوحة تحتفظ بنموذج المستند المُحلل بالإضافة إلى (مع CachePages) صفحاته المُعروضة، حتى ينقضي TimeOut المتحرك (الافتراضي 60 دقيقة) منذ آخر طلب. عادتان تحافظان على التحكم في ذلك:
- أغلق ما انتهيت منه.
viewer.CloseDocument(token)يحرّر المحرك فورًا بدلاً من الانتظار حتى انتهاء نافذة الخمول. - حدد مدة انتهاء مناسبة. معاينة يلمحها المستخدمون لمدة دقيقتين لا تحتاج إلى جلسة ساعة:
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يتجنب تغييرات التكبير الحرّة؛ عند ربطViewerConfigفي C#، اضبطFixedZoomPercentMobile(الافتراضي C# 75) للشاشات الصغيرة.
بدء التشغيل مرة واحدة، لا لكل طلب
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) يجب أن يكون في Program.cs — تسجيل الترميزات لكل طلب هو عمل مضيّع؛ نسيانه تمامًا يعرّض مستندات صفحات الترميز القديمة للفشل.
قائمة فحص الضبط
- حدد أدنى
ImageResolutionيقبله تجربة المستخدم الخاصة بك. - احتفظ بـ
CachePagesمفعلاً للعرض التفاعلي؛ أوقفه للسيناريوهات ذات المرور الواحد أو التزامن العالي. - أغلق الجلسات صراحةً؛ قصّر
TimeOutحيث يكون الاستخدام متقطّعًا. - استخدم
LargeDoc+AutoLoad = falseالافتراضي على العميل للوثائق الكبيرة. - استخدم
DefaultRender = falseفقط عندما تحتاج إلى تحويل PDF يحمل النص.
هل كانت هذه الصفحة مفيدة؟