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