# Cache Framework & Performance Tuning

TYPO3 v13'te önbellek sistemi ve performans optimizasyonu tekniklerini kapsar. Kurulu sistem Redis ile yapılandırılmıştır — hızlı cache, ölçeklenebilir architecture.

---

## Sistem Durumu (Mevcut Konfigürasyon)

✅ **Redis Cache Backend** — Üretim ortamına hazır  
✅ **OPcache** — PHP kod hızlandırma aktif  
✅ **TYPO3 Cache Framework** — 4 ana cache Redis'de  
✅ **Frontend Optimizasyonu** — CSS/JS sıkıştırma kapalı (opsiyonel)  
✅ **Yüklü Servisler:**
- Redis 7 (DDEV)
- PHP 8.3 OPcache
- TYPO3 v13 Caching Framework

---

## Kurulum & Aktivasyon

### Çalışan Servisler

```bash
# Redis'i kontrol et
ddev redis-cli ping        # PONG döndürürse aktif
ddev redis-cli --scan      # Saklanan cache anahtarlarını göster

# TYPO3 Cache'i kontrol et
ddev typo3 cache:flush     # Tüm cache'i temizle
ddev logs -s redis         # Redis loglarını kontrol et
```

### Mevcut Konfigürasyon Dosyaları

- [config/system/additional.php](../config/system/additional.php) — Redis backend ayarları
- [packages/testproject/Configuration/Sets/SitePackage/page.tsconfig](../packages/testproject/Configuration/Sets/SitePackage/page.tsconfig) — TypoScript cache ayarları
- [.ddev/php/php.ini](.ddev/php/php.ini) — OPcache yapılandırması

| Cache | Açıklama |
|-------|----------|
| `pages` | Sayfa çıktı cache'i |
| `pagesection` | Sayfa TypoScript yapılandırma cache'i |
| `hash` | Hash tabanlı cache (genel amaçlı) |
| `rootline` | Rootline (sayfa hiyerarşisi) cache'i |
| `runtime` | Çalışma zamanı cache'i (request başına) |
| `core` | TYPO3 Core cache (sınıf bilgileri, vb.) |

---

## Cache Backend Türleri

### Dosya Tabanlı (Varsayılan)

```php
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pages'] = [
    'backend' => \TYPO3\CMS\Core\Cache\Backend\FileBackend::class,
    'options' => [
        'defaultLifetime' => 86400, // 24 saat
    ],
];
```

### Veritabanı Tabanlı

```php
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pages'] = [
    'backend' => \TYPO3\CMS\Core\Cache\Backend\Typo3DatabaseBackend::class,
];
```

### Redis ⭐ (Kurulu & Aktif)

DDEV'de kurulu olan üretim ortamı uyumlu Redis backend:

```bash
# DDEV'de Redis servisi
ddev get ddev/ddev-redis   # (zaten kurulu)
ddev restart                # Redis'i başlat
```

Konfigürasyon ([config/system/additional.php](../config/system/additional.php)):

```php
<?php

// Redis Cache Backend açıklaması
$redisCacheConfig = [
    'hostname' => 'redis',      // DDEV container adı
    'port' => 6379,
    'database' => 0,
];

// Pages Cache: Sayfa çıktısı (hızlı erişim)
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pages'] = [
    'backend' => \TYPO3\CMS\Core\Cache\Backend\RedisBackend::class,
    'options' => array_merge($redisCacheConfig, [
        'database' => 0,
        'defaultLifetime' => 86400, // 24 saat
    ]),
];

// Pagesection Cache: TypoScript yapılandırma (veritabanı 1)
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pagesection'] = [
    'backend' => \TYPO3\CMS\Core\Cache\Backend\RedisBackend::class,
    'options' => array_merge($redisCacheConfig, [
        'database' => 1,
        'defaultLifetime' => 86400,
    ]),
];

// Hash Cache: Genel amaçlı (veritabanı 2)
// Rootline Cache: Sayfa hiyerarşisi (veritabanı 3)
// ... diğerleri ...
?>
```

**Avantajlar:**
- ✅ Veritabanı-bağımsız (faster than Typo3DatabaseBackend)
- ✅ Distributed cache desteği (multiserver setup)
- ✅ TTL (Time-To-Live) yönetimi otomatik
- ✅ Komut satırı ile yönetilebilir (`ddev redis-cli`)
- ✅ Monitoring ve debugging kolay

**Veritabanı Dağılımı:**
- DB 0: Pages cache
- DB 1: Pagesection cache
- DB 2: Hash cache
- DB 3: Rootline cache
- DB 4+: Core cache (özel), Sessions

### Geliştirme Ortamı (Cache Kapatma)

```php
if (\TYPO3\CMS\Core\Core\Environment::getContext()->isDevelopment()) {
    foreach ($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'] as $cacheName => &$config) {
        $config['backend'] = \TYPO3\CMS\Core\Cache\Backend\NullBackend::class;
    }
    unset($config);
}
```

---

## TypoScript Cache Ayarları (Kurulu)

Dosya: [packages/testproject/Configuration/Sets/SitePackage/page.tsconfig](../packages/testproject/Configuration/Sets/SitePackage/page.tsconfig)

### Sayfa Cache Süresi

```typoscript
# Sayfa cache süresi: 24 saat (86400 saniye)
config.cache_period = 86400

# Cache tamamen kapalı (test/development sırasında)
# config.no_cache = 1

# Dinamik sayfalarda cache devre dışı
# page.config.no_cache = 0
```

### Cache Etiketleri

```typoscript
# Özel cache etiketleri (manuel kontrol için)
page.stdWrap.addPageCacheTags = my_custom_tag

# PHP'de temizleme:
# Örnek: \TYPO3\CMS\Core\Cache\CacheManager::getInstance()
#        ->flushCachesInGroup('pages', 'my_custom_tag');
```

### Frontend Optimizasyonu (Kurulu)

```typoscript
# CSS & JavaScript Optimizasyonu
config {
    compressCss = 1       # CSS sıkıştırma (kapalı olarak kurulu)
    concatenateCss = 1    # CSS birleştirme
    
    compressJs = 1        # JS sıkıştırma (kapalı olarak kurulu)
    concatenateJs = 1     # JS birleştirme
    
    # HTML Optimizasyonu
    removeDefaultJS = 1       # Gereksiz JS kaldır
    disablePrefixComment = 1  # DEBUG commentler kaldır
    
    # Encoding
    metaCharset = utf-8
    locale_all = tr_TR
    defaultCharSet = utf-8
}
```

**Not:** CSS/JS sıkıştırma şu ana kadar testleme amaçlı kapalıdır. Production ortamında açılabilir.

---

## Performans Optimizasyonu (Production-Ready)

### 1. PHP OPcache ⭐ (Kurulu)

Dosya: [.ddev/php/php.ini](.ddev/php/php.ini)

```ini
[PHP]
; OPcache — PHP bytecode caching (CPU iyileştirme)
opcache.enable = 1
opcache.memory_consumption = 128      # MB
opcache.interned_strings_buffer = 16  # String deduplication
opcache.max_accelerated_files = 10000 # Max file sayısı
opcache.revalidate_freq = 0           # Validation sıklığı
opcache.validate_timestamps = 1       # Development: değişiklikleri algıla
opcache.fast_shutdown = 1             # Hızlı kapanış
opcache.max_file_size = 0             # All files
```

**Sonuç:** ~3x daha hızlı PHP yürütümü

### 2. Veritabanı Optimizasyonu

```bash
# Referans indeksini güncelle
ddev exec vendor/bin/typo3 referenceindex:update

# Silinmiş kayıtları temizle (Recycler)
ddev exec vendor/bin/typo3 cleanup:orphanrecords
```

### 3. Resim Optimizasyonu (Kurulu)

[config/system/additional.php](../config/system/additional.php):

```php
// ImageMagick dönüştürme
$GLOBALS['TYPO3_CONF_VARS']['GFX']['processor'] = 'ImageMagick';
$GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_path'] = '/usr/bin/';
$GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_allowUpscaling'] = false;

// WebP/AVIF desteği (modern tarayıcılara otomatik)
$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] = 
    'gif,jpg,jpeg,tif,tiff,bmp,pcx,tga,png,pdf,ai,svg,webp,avif';
```

### 4. Frontend Optimizasyonu (Opsiyonel)

Gzip sıkıştırma (`.htaccess`):

```apache
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain
    AddOutputFilterByType DEFLATE text/css application/javascript
    AddOutputFilterByType DEFLATE application/json
    AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>
```

Browser cache (`.htaccess`):

```apache
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css "access plus 1 year"
    ExpiresByType application/javascript "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType font/woff2 "access plus 1 year"
</IfModule>
```

---

## Cache Temizleme Komutları

```bash
# Tüm cache'i temizle (hızlı form)
ddev typo3 cache:flush

# Belirli grup cache'i temizle
ddev typo3 cache:flush --group=pages       # Sayfa cache'i
ddev typo3 cache:flush --group=system      # Sistem cache'i

# Redis CLI ile doğrudan temizlik
ddev redis-cli FLUSHDB        # Aktif veritabanını temizle
ddev redis-cli FLUSHALL       # TÜM veritabanlarını temizle (dikkatli!)

# Cache dizinini manuel temizle
rm -rf var/cache/*
```

---

## Monitoring & Debugging

### Redis Durumu

```bash
# Bağlantı kontrol
ddev redis-cli ping            # PONG dönmeli

# Cache boyutu
ddev redis-cli INFO memory     # Memory usage
ddev redis-cli DBSIZE          # Saklanan key sayısı

# Cache anahtarlarını gör
ddev redis-cli --scan          # Tüm key'leri tara
ddev redis-cli --scan --pattern "pages*"  # pages cache'ini filtrele

# Spesifik value'yu gör
ddev redis-cli GET "pages:12345"
```

### TYPO3 Cache İstatistikleri

```bash
# Cache istatiğini al
ddev exec php -r "
    \$TYPO3_CONF_VARS = include 'vendor/typo3/cms-core/Configuration/DefaultConfiguration.php';
    \$cache = \TYPO3\CMS\Core\Cache\CacheManager::getInstance();
    echo 'Cache status: OK';
"
```

---

## Best Practices & Checklist

### Development Ortamı

| Item | Ayar | Açıklama |
|------|------|----------|
| Cache Period | 3600 (1 saat) | Sık değişim için kısa TTL |
| OPcache | Aktif | Geliştirme hızı |
| Validation | 1 | Dosya değişiklikleri algılansın |
| Compression | Kapalı | Debug editlemesi kolay |

### Production Ortamı

| Item | Ayar | Açıklama |
|------|------|----------|
| Cache Period | 86400+ (24h) | Uzun TTL |
| Redis | Kurulu | Distributed cache |
| OPcache | Aktif | Maksimum hız |
| Validation | 0 | Timestamp kontrol yok |
| Monitoring | Aktif | Memory usage takip |

### Production Deploy Checklist

```bash
# 1. Cache temizle
ddev exec vendor/bin/typo3 cache:flush

# 2. Veritabanı şemalarını güncelle
ddev exec vendor/bin/typo3 extension:setup

# 3. İndeksleri güncelle
ddev exec vendor/bin/typo3 referenceindex:update

# 4. Redis bağlantısı kontrol et
ddev redis-cli ping

# 5. OPcache durumunu kontrol et
ddev exec php -r "phpinfo();" | grep -i opcache

# 6. Frontend'i test et
# curl https://typo3v13.ddev.site
```

---

## Kaynaklar

- [TYPO3 Caching Framework](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/CachingFramework/)
- [Performance Tuning](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/Administration/Troubleshooting/Performance.html)
