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

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

### Θέρμανση Προχειρού

Μετά την εκκαθάριση του προχειρού, θερμάνετέ το για να προεκτελέσετε πρότυπα και ρυθμίσεις:

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

## Στρατηγικές Προχειροποίησης

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

Για τη ρύθμιση ενός CDN:

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

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

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

## Διαμόρφωση Web Server

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

## Συμβουλές

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


---

# 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-el/odigos-diaxeirisis/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.
