
# Performans ve Testler

TailwindPHP öncelikle doğruluğu hedefler. PHP için özel bir değişiklik çıktıyı değiştirmeden hızı artırıyorsa uygulanır ve `@port-deviation:performance` olarak işaretlenir. TailwindCSS ile eşdeğerlik varsayılmaz; Tailwind'ın kendi test paketiyle sürekli doğrulanır.

## Performans

PHP bağlantı noktası, ham işlem hızından önce TailwindCSS çıktısıyla eşleşmeye öncelik verir ve özgün TypeScript her koşulda daha hızlı kalır; V8'ın JIT'i sık kullanılan kod yollarını PHP'ın yetişemeyeceği şekilde yerel koda derler. Her istek veya sayfa için CSS üretiyorsanız bir derleyiciyi yeniden kullanın (bkz. [generateExact()](https://tailwindphp.inline0.dev/tr/docs/api#accumulating-vs-exact-generation)) ve oluşturma durumunu [`stateCacheFile`](https://tailwindphp.inline0.dev/tr/docs/advanced/caching#compiler-state-cache) ile kalıcı olarak saklayın.

Birkaç yoğun kullanılan kod yolu, **aynı çıktıyı koruyan** elle ayarlanmış optimizasyonlar içerir:

- **`ast.php` `toCss()`** — parçaları art arda dize birleştirmek yerine bir dizide biriktirip `implode` işlemini bir kez yapar ve önceden hesaplanmış girinti dizelerini kullanır.
- **`css-parser.php`** — `ord()` üzerinden geçmek yerine karakterleri doğrudan karşılaştırır ve `strlen()` değerini yeniden hesaplamak yerine arabellek uzunluklarını izler.

İkisi de `@port-deviation:performance` ile belgelenir ve test paketine bağlıdır; oluşturulan CSS çıktısını değiştiremezler.

### Karşılaştırmalı testler

`benchmarks/` dizini bir karşılaştırma aracı içerir. Şu komutla çalıştırın:

```bash
composer bench         # PHP vs TypeScript
composer bench:save    # write benchmarks/results.json
```

PHP 8.4.5 / Node.js v22.17.0 (Apple M1) üzerindeki örnek sonuçlar:

| Karşılaştırma testi | PHP | TypeScript |
|-----------|-----|------------|
| `css-parser`, preflight.css üzerinde | ~816 ops/s | ~15.45K ops/s (≈20× daha hızlı) |
| `toCss` | ~65.85K ops/s | ~2.59M ops/s (≈39× daha hızlı) |

TypeScript bu düşük düzeyli işlemlerde beklendiği gibi daha hızlıdır. Tam sayfa CSS üretimi — gerçek kullanım senaryosu — için PHP performansı yeterlidir (örnek çalıştırmada sayfa başına yaklaşık 14 ms). Aynı girdi tekrarlandığında [dosya önbelleği](https://tailwindphp.inline0.dev/tr/docs/advanced/caching) maliyeti tamamen ortadan kaldırır.

## Testler ve eşdeğerlik

Testler, PHP bağlantı noktasının TailwindCSS ile aynı çıktıyı ürettiğini garanti eder. İki yaklaşım birlikte çalışır.

**1. Çıkarım tabanlı testler.** `test-coverage/` içindeki betikler TailwindCSS'ın kendi `.test.ts` dosyalarını ayrıştırır ve test senaryolarını JSON içine çıkarır. Ardından PHPUnit bu senaryoları TailwindPHP üzerinden çalıştırır ve çıktıyı beklenen CSS ile karşılaştırır. Beklentiler doğrudan yukarı akıştan geldiği için PHP davranışındaki her sapma hata olarak ortaya çıkar. Bu testler yardımcı programlar, varyantlar, entegrasyon, CSS işlevleri ve tarayıcı düzeyindeki `ui.spec` testleri gibi karmaşık alanları kapsar.

**2. Elle taşınmış birim testleri.** Daha basit TypeScript test dosyaları (AST, CSS ayrıştırma, kaçışlama, aday ayrıştırma, değer ayrıştırma, …) doğrudan PHP diline taşınır ve özgünlerin yapısını ve doğrulamalarını yansıtacak şekilde kaynaklarının yanında `*.test.php` olarak bulunur.

Döngü **çıkar → çalıştır → doğrula** şeklindedir: güncel TailwindCSS referansından yeniden çıkarım yapın, paketi çalıştırın; her sapma başarısız olur. Bu, bağlantı noktasını yukarı akışla eşzamanlı tutar ve TailwindCSS güncellemesinin incelemeyle değil, mekanik olarak doğrulanmasını sağlar. Sapmalar CI'da başarısız olur.

```bash
composer extract   # re-extract test cases from the TailwindCSS reference
composer test      # run the full suite
```

Sürüm 1.7.0 itibarıyla (TailwindCSS v4.3.3 referansına göre) **4,427 test geçiyor**:

| Paket | Testler | Kaynak |
|-------|-------|--------|
| Çıkarılmış TailwindCSS paketleri (yardımcı programlar 706, varyantlar 164, dizin 148, css-functions 64, `ui.spec` 68) | 1,150 | `.test.ts` / `.spec.ts` kaynaklarından çıkarıldı |
| API kapsamı (yardımcı programlar, değiştiriciler, varyantlar, yönergeler, eklentiler, içe aktarmalar, `@source`, önbelleğe alma, genel API) | 2,252 | `tests/` |
| Kaynağın yanındaki birim testleri (ayrıştırıcı, AST, adaylar, tema, yardımcılar, seçici ayrıştırıcı, lightningcss dönüşümleri, küçültücü) | 767 | `*.test.php` bağlantı noktaları ve PHP için özel testler |
| CLI (bağımsız değişken ayrıştırma, çıktı, derlemeler) | 84 | `tests/Cli*Test.php` |
| Eklenti bağlantı noktaları (tipografi, formlar) | 45 | Eklentilerin yanındaki `*.test.php` |
| Yardımcı kütüphaneler (clsx, tailwind-merge, CVA) | 129 | Referans paketleri |

## Kod kalitesi

Biçimlendirme ve statik analiz, Composer betikleri üzerinden çalıştırılır:

```bash
composer lint      # Pint --test  (check formatting)
composer format    # Pint         (fix formatting)
composer analyse   # PHPStan      (static analysis, level 4)
composer quality   # lint + analyse
```

PHPStan, 4. düzeyde çalışır (`phpstan.neon`); işlev tabanlı mimarinin kullandığı dinamik dizi şekilleri için kısa bir yoksayılan kalıplar listesi vardır. Tüm kaynak dosyaları analiz edilir; test dosyaları hariç tutulur.

Bu testlerin doğruladığı yapıyı ve sapmaların kaydedildiği yeri görmek için [Mimari](https://tailwindphp.inline0.dev/tr/docs/advanced/architecture) bölümüne bakın.
