تحسين الأداء
تحسين العرض والذاكرة
ملف موارد 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) يحتفظ بكل صفحة مُعروضة في الذاكرة طوال مدة الجلسة. هذا هو الإعداد الافتراضي المناسب للعرض التفاعلي — المستخدمون يتنقلون للأمام والخلف. قم بإيقافه عندما:
- الوثائق ضخمة وتُعرض مرة واحدة من البداية إلى النهاية،
- العديد من الجلسات المتزامنة ستضاعف عدد الصفحات المخزنة مؤقتًا،
- تفضل استهلاك وحدة المعالجة المركزية لكل عرض بدلاً من احتفاظ بالذاكرة.
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 يحمل النص.
هل كانت هذه الصفحة مفيدة؟