# ضبط الأداء

تساعد إعدادات الأداء في تحسين Chamilo لتحميل الصفحات بشكل أسرع واستخدام أفضل للموارد، خاصة على المنصات التي تحتوي على العديد من المستخدمين المتزامنين.

> **مرجع إضافي**: يتضمن تثبيت Chamilo دليل تحسين موسع. افتح `/documentation/optimization.html` في متصفح (مثل `https://your-chamilo-site/documentation/optimization.html`) للحصول على توصيات على مستوى الخادم الخاصة بإصدارك.

## ذاكرة التخزين المؤقت لـ Symfony

يُبنى Chamilo 2.0 على Symfony، الذي يستخدم ذاكرة تخزين مؤقت مترجمة لتوجيه الطلبات، حقن التبعيات، والقوالب. إدارة هذه الذاكرة ضرورية للأداء.

### مسح الذاكرة المؤقتة

بعد تغييرات الإعدادات، أو النشر، أو الترقيات، قم بمسح ذاكرة التخزين المؤقت لـ Symfony:

```bash
# Clear cache for the current environment
php bin/console cache:clear

# For production environments specifically
php bin/console cache:clear --env=prod
```

في الإنتاج، تأكد دائمًا من تعيين `APP_ENV=prod` في ملف `.env.local`. بيئة التطوير (`APP_ENV=dev`) تحتوي على حمل تشغيلي كبير للتصحيح ولا يجب استخدامها أبدًا في الإنتاج.

### تسخين الذاكرة المؤقتة

بعد مسح الذاكرة المؤقتة، قم بتسخينها لترجمة القوالب والإعدادات مسبقًا:

```bash
php bin/console cache:warmup --env=prod
```

## استراتيجيات التخزين المؤقت

| الاستراتيجية          | الوصف                                                                                                                                                                            |
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **OPcache**           | ذاكرة التخزين المؤقت للأوامر التشغيلية المدمجة في PHP. تأكد من تمكينها في `php.ini` مع ذاكرة كافية (`opcache.memory_consumption=256`). هذه هي التحسين الأكثر تأثيرًا على الأداء. |
| **APCu**              | ذاكرة تخزين مؤقت في الذاكرة للمفاتيح والقيم تستخدمها Symfony لتخزين البيانات الوصفية. قم بتثبيت امتداد PHP APCu وقم بتكوينه في إعدادات ذاكرة التخزين المؤقت لـ Symfony.          |
| **Redis / Memcached** | للمنصات ذات الحركة المرورية العالية، قم بتكوين خلفية تخزين مؤقت خارجية. قم بتعيين محول الذاكرة المؤقتة في `config/packages/cache.yaml`.                                          |

### إعدادات OPcache الموصى بها

```ini
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0   ; Set to 0 in production for best performance
opcache.revalidate_freq=0
```

عند تعيين `validate_timestamps` إلى 0، يجب عليك مسح OPcache بعد نشر كود جديد (إعادة تشغيل PHP-FPM أو استدعاء `opcache_reset()`).

## التحميل التأخيري

| الإعداد                     | الوصف                                                                                                                           |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| **تحميل الصور التأخيري**    | يمكّن السمة `loading="lazy"` على الصور بحيث يتم تحميل الصور خارج الشاشة فقط عند التمرير إليها. يقلل من وقت تحميل الصفحة الأولي. |
| **تحميل JavaScript المؤجل** | تحميل ملفات JavaScript غير الحرجة بشكل غير متزامن لتجنب حظر عرض الصفحة.                                                         |

## CDN (شبكة توزيع المحتوى)

للمنصات التي تخدم مستخدمين عبر مناطق جغرافية متعددة، يمكن لـ CDN تحسين أوقات التحميل بشكل كبير للأصول الثابتة (CSS، JavaScript، الصور).

لتكوين CDN:

1. قم بإعداد توزيع CDN (مثل CloudFront، Cloudflare، أو مزود آخر) يشير إلى خادم Chamilo الخاص بك.
2. قم بتكوين عنوان URL الأساسي للأصول في بيئتك أو إعدادات Symfony بحيث يتم تقديم الأصول الثابتة عبر CDN.
3. قم بتعيين رؤوس تخزين مؤقت مناسبة للملفات الثابتة (انتهاء صلاحية طويل للأصول المرقمة بالإصدار).

## تحسين قاعدة البيانات

| الإجراء                                  | الوصف                                                                                                                                               |
| ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| **استخدام تجميع اتصالات قاعدة البيانات** | للمنصات ذات التزامن العالي، قم بتكوين تجميع الاتصالات لتقليل الحمل التشغيلي لإنشاء اتصالات قاعدة البيانات.                                          |
| **تحسين الاستعلامات**                    | يتضمن Chamilo فهارس قاعدة بيانات للاستعلامات الشائعة. قم بتشغيل `ANALYZE TABLE` دوريًا على MySQL/MariaDB للحفاظ على إحصاءات مخطط الاستعلامات محدثة. |
| **خادم قاعدة بيانات منفصل**              | للتثبيتات الكبيرة، قم بتشغيل قاعدة البيانات على خادم مخصص بدلاً من مشاركة الموارد مع خادم الويب.                                                    |

## تكوين خادم الويب

| التحسين                          | الوصف                                                                                                            |
| -------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| **تمكين ضغط gzip/brotli**        | ضغط استجابات HTML، CSS، و JavaScript. تدعم معظم خوادم الويب هذا بشكل أصلي.                                       |
| **تخزين الملفات الثابتة مؤقتًا** | قم بتعيين رؤوس `Cache-Control` و `Expires` طويلة الأمد للأصول الثابتة.                                           |
| **تهيئة PHP-FPM**                | قم بتعديل `pm.max_children`، `pm.start_servers`، و `pm.max_requests` بناءً على الذاكرة المتاحة والتزامن المتوقع. |
| **HTTP/2**                       | قم بتمكين HTTP/2 في خادم الويب للاتصالات المتعددة والضغط على الرؤوس.                                             |

## نصائح

* **OPcache هو التحسين الأكبر** -- تأكد من تمكينه وتحديد حجمه بشكل صحيح قبل متابعة التحسينات الأخرى.
* **لا تقم أبدًا بتشغيل الإنتاج مع `APP_ENV=dev`** -- شريط التصحيح والمحلل يضيفان حملًا كبيرًا إلى كل طلب.
* **راقب قبل التهيئة** -- استخدم أدوات مثل New Relic، Blackfire، أو محلل Symfony المدمج (في وضع التطوير) لتحديد العوائق الفعلية بدلاً من التخمين.
* **سخّن الذاكرة المؤقتة بعد كل نشر** لتجنب أن يصادف المستخدم الأول طلبًا بطيئًا غير مخزن مؤقتًا.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.chamilo.org/2.x-ar/dlyl-alidarh/admin-guide/performance-tuning.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
