> For the complete documentation index, see [llms.txt](https://docs.chamilo.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.chamilo.org/3.x/ar/dlyl-alidarh/admin-guide/performance-tuning.md).

# ضبط الأداء

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

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

## ذاكرة Symfony المؤقتة

تشاميلو 3.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 لتخزين البيانات الوصفية. ثبّت إضافة APCu لـ PHP واضبطها في إعداد ذاكرة 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 أو مزوّد آخر) يشير إلى خادم تشاميلو.
2. اضبط عنوان URL الأساسي للأصول في بيئتك أو إعداد Symfony بحيث تُقدَّم الأصول الثابتة عبر CDN.
3. عيّن ترويسات تخزين مؤقت مناسبة للملفات الثابتة (انتهاء صلاحية طويل للأصول ذات الإصدارات).

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

| الإجراء                                  | الوصف                                                                                                                                          |
| ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| **استخدام تجميع اتصالات قاعدة البيانات** | للمنصات عالية التزامن، اضبط تجميع الاتصالات لتقليل عبء إنشاء اتصالات قاعدة البيانات.                                                           |
| **تحسين الاستعلامات**                    | يتضمن تشاميلو فهارس قاعدة بيانات للاستعلامات الشائعة. نفّذ `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 المدمج (في وضع التطوير) لتحديد الاختناقات الفعلية بدلاً من التخمين.
* **سخّن الذاكرة المؤقتة بعد كل نشر** لتجنب أن يصطدم أول مستخدم بطلب بطيء غير مخزَّن مؤقتاً.
