تحسين الأداء

تحسين العرض والذاكرة

ملف موارد Doconut يهيمن عليه ثلاثة أشياء: دقة العرض DPI، ما يبقى مخزنًا مؤقتًا، ومدة بقاء الجلسات. يشرح هذا الدليل الرافعات حسب تأثيرها.

الدقة — أكبر رافعة

ImageResolution (25–300 DPI) يتحكم في كل من وقت العرض وحجم الصورة. معظم الصيغ الافتراضية 200 DPI؛ الصور و PSD الافتراضية 100.

Halving DPI roughly quarters the pixel count per page — faster renders, smaller transfers, less cache memory. Reserve 250–300 DPI for zoom-heavy use cases (CAD, engineering drawings).

For PDFs with heavy embedded imagery, PdfConfig adds finer dials: CompressImages + CompressQuality, ResizeImages + ResizeResolution, and CompressFast. For plain images, ImageConfig.MaxImagePixelSize (default 3000 px) caps output size.

التخزين المؤقت للصفحات — الذاكرة مقابل إعادة العرض

BaseConfig.CachePages (default true) keeps every rendered page in memory for the session's lifetime. That's the right default for interactive viewing — users scroll back and forth. Turn it off when:

  • الوثائق ضخمة وتُعرض مرة واحدة من البداية إلى النهاية،
  • عدد كبير من الجلسات المتزامنة سيضاعف الصفحات المخزنة مؤقتًا،
  • تفضل استهلاك CPU لكل عرض بدلاً من احتفاظ بالذاكرة.
csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });

On the client, ViewerConfig.CacheEnabled = true preloads a small moving window of upcoming page images in browser memory. It is a per-view prefetch cache, not persistent localStorage.

الجلسات — الذاكرة التي لا تراها

Every open session holds the parsed document model plus (with CachePages) its rendered pages, until the sliding TimeOut (default 60 minutes) elapses since the last request. Two habits keep this under control:

  • أغلق ما انتهيت منه. viewer.CloseDocument(token) يحرّر المحرك فورًا بدلاً من الانتظار حتى انتهاء نافذة الخمول.
  • ضبط مهلة مناسبة. المعاينة التي يلمحها المستخدمون لمدة دقيقتين لا تحتاج إلى جلسة ساعة واحدة:
csharp
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });

Remember the trade-off: after expiry the widget shows Document session not found. Please re-open document. — pick a timeout that matches real reading sessions.

مفاتيح خاصة بالصيغة

  • 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 — تسجيل الترميزات لكل طلب هو عمل مهدور؛ نسيانه تمامًا يعرّض مستندات صفحات الترميز القديمة للفشل.

قائمة فحص التحسين

  1. حدد أدنى ImageResolution يقبله تجربة المستخدم الخاصة بك.
  2. ابقِ CachePages مفعَّلًا للعرض التفاعلي؛ أوقفه للمرور الواحد أو السيناريوهات ذات التزامن العالي.
  3. أغلق الجلسات صراحةً؛ قصّر TimeOut عندما يكون الاستخدام متقطعًا.
  4. استخدم LargeDoc + AutoLoad = false الافتراضي على العميل للوثائق الكبيرة.
  5. استخدم DefaultRender = false فقط عندما تحتاج إلى تحويل PDF يحمل نصًا.

هل كانت هذه الصفحة مفيدة؟