> 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/el/odigos-diaxeirisis/admin-guide/performance-tuning.md).

# Βελτιστοποίηση απόδοσης

Οι ρυθμίσεις απόδοσης βοηθούν στη βελτιστοποίηση του Chamilo για ταχύτερες φορτώσεις σελίδων και καλύτερη αξιοποίηση πόρων, ιδίως σε πλατφόρμες με πολλούς ταυτόχρονους χρήστες.

> **Πρόσθετη αναφορά**: Η εγκατάσταση Chamilo περιλαμβάνει έναν εκτεταμένο οδηγό βελτιστοποίησης. Ανοίξτε το `/documentation/optimization.html` σε ένα πρόγραμμα περιήγησης (π.χ. `https://your-chamilo-site/documentation/optimization.html`) για συστάσεις σε επίπεδο διακομιστή ειδικές για την έκδοσή σας.

## Symfony Cache

Το Chamilo 3.0 βασίζεται στο Symfony, το οποίο χρησιμοποιεί μεταγλωττισμένη cache για δρομολόγηση, έγχυση εξαρτήσεων και πρότυπα. Η διαχείριση αυτής της cache είναι απαραίτητη για την απόδοση.

### Εκκαθάριση της Cache

Μετά από αλλαγές διαμόρφωσης, ανάπτυξη ή αναβαθμίσεις, εκκαθαρίστε την cache του 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`) περιλαμβάνει εκτεταμένο επιπλέον φόρτο αποσφαλμάτωσης και δεν πρέπει ποτέ να χρησιμοποιείται στην παραγωγή.

### Προθέρμανση Cache

Μετά την εκκαθάριση της cache, προθερμάνετέ την για προμεταγλώττιση προτύπων και διαμόρφωσης:

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

## Στρατηγικές Caching

| Στρατηγική            | Περιγραφή                                                                                                                                                                                                                  |
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **OPcache**           | Η ενσωματωμένη cache opcode της PHP. Διασφαλίστε ότι είναι ενεργοποιημένη στο `php.ini` σας με επαρκή μνήμη (`opcache.memory_consumption=256`). Αυτή είναι η μοναδική βελτιστοποίηση απόδοσης με τον μεγαλύτερο αντίκτυπο. |
| **APCu**              | Μια cache κλειδιού-τιμής στη μνήμη που χρησιμοποιείται από το Symfony για αποθήκευση μεταδεδομένων. Εγκαταστήστε την επέκταση PHP APCu και διαμορφώστε την στη διαμόρφωση cache του Symfony.                               |
| **Redis / Memcached** | Για πλατφόρμες υψηλής κίνησης, διαμορφώστε ένα εξωτερικό backend cache. Ορίστε τον προσαρμογέα cache στο `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()`).

## Καθυστερημένη φόρτωση (Lazy Loading)

| Ρύθμιση                             | Περιγραφή                                                                                                                                                                                 |
| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Lazy-load εικόνων**               | Ενεργοποιεί το χαρακτηριστικό `loading="lazy"` στις εικόνες ώστε οι εικόνες εκτός οθόνης να φορτώνονται μόνο όταν εμφανίζονται με κύλιση. Μειώνει τον χρόνο αρχικής φόρτωσης της σελίδας. |
| **Αναβαλλόμενη φόρτωση JavaScript** | Φόρτωση μη κρίσιμων αρχείων JavaScript ασύγχρονα ώστε να μην εμποδίζεται η απόδοση της σελίδας.                                                                                           |

## CDN (Content Delivery Network)

Για πλατφόρμες που εξυπηρετούν χρήστες σε πολλές γεωγραφικές περιοχές, ένα CDN μπορεί να βελτιώσει σημαντικά τους χρόνους φόρτωσης για στατικά στοιχεία (CSS, JavaScript, εικόνες).

Για να διαμορφώσετε ένα CDN:

1. Ρυθμίστε μια διανομή CDN (π.χ. CloudFront, Cloudflare ή άλλον πάροχο) που να δείχνει στον διακομιστή Chamilo.
2. Διαμορφώστε το βασικό URL στοιχείων στο περιβάλλον σας ή στη διαμόρφωση Symfony ώστε τα στατικά στοιχεία να εξυπηρετούνται μέσω του CDN.
3. Ορίστε κατάλληλες κεφαλίδες cache για στατικά αρχεία (μεγάλη διάρκεια λήξης για στοιχεία με έκδοση).

## Βελτιστοποίηση βάσης δεδομένων

| Ενέργεια                                    | Περιγραφή                                                                                                                                                                                               |
| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Χρήση pooling συνδέσεων βάσης δεδομένων** | Για πλατφόρμες υψηλής ταυτοχρονίας, διαμορφώστε pooling συνδέσεων ώστε να μειωθεί το κόστος δημιουργίας συνδέσεων βάσης δεδομένων.                                                                      |
| **Βελτιστοποίηση ερωτημάτων**               | Το Chamilo περιλαμβάνει ευρετήρια βάσης δεδομένων για κοινά ερωτήματα. Εκτελέστε περιοδικά `ANALYZE TABLE` σε MySQL/MariaDB ώστε τα στατιστικά του προγραμματιστή ερωτημάτων να παραμένουν ενημερωμένα. |
| **Ξεχωριστός διακομιστής βάσης δεδομένων**  | Για μεγάλες εγκαταστάσεις, εκτελέστε τη βάση δεδομένων σε αποκλειστικό διακομιστή αντί να μοιράζεστε πόρους με τον διακομιστή ιστού.                                                                    |

## Διαμόρφωση διακομιστή ιστού

| Βελτιστοποίηση                         | Περιγραφή                                                                                                                            |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| **Ενεργοποίηση συμπίεσης gzip/brotli** | Συμπιέστε απαντήσεις HTML, CSS και JavaScript. Οι περισσότεροι διακομιστές ιστού το υποστηρίζουν εγγενώς.                            |
| **Caching στατικών αρχείων**           | Ορίστε μεγάλες κεφαλίδες `Cache-Control` και `Expires` για στατικά στοιχεία.                                                         |
| **Ρύθμιση PHP-FPM**                    | Προσαρμόστε τα `pm.max_children`, `pm.start_servers` και `pm.max_requests` με βάση τη διαθέσιμη RAM και την αναμενόμενη ταυτοχρονία. |
| **HTTP/2**                             | Ενεργοποιήστε HTTP/2 στον διακομιστή ιστού για πολυπλεγμένες συνδέσεις και συμπίεση κεφαλίδων.                                       |

## Συμβουλές

* **Η OPcache είναι το μεγαλύτερο μεμονωμένο όφελος** -- Διασφαλίστε ότι είναι ενεργοποιημένη και σωστά διαστασιολογημένη πριν προχωρήσετε σε άλλες βελτιστοποιήσεις.
* **Μην εκτελείτε ποτέ την παραγωγή με `APP_ENV=dev`** -- Η γραμμή εργαλείων αποσφαλμάτωσης και ο profiler προσθέτουν σημαντικό επιπλέον φόρτο σε κάθε αίτημα.
* **Παρακολουθήστε πριν ρυθμίσετε** -- Χρησιμοποιήστε εργαλεία όπως New Relic, Blackfire ή τον ενσωματωμένο profiler του Symfony (σε λειτουργία dev) για να εντοπίσετε πραγματικά σημεία συμφόρησης αντί να μαντεύετε.
* **Προθερμάνετε την cache μετά από κάθε ανάπτυξη** ώστε ο πρώτος χρήστης να μην συναντήσει ένα αργό αίτημα χωρίς cache.
