
# Teljesítmény és tesztelés

A TailwindPHP elsődlegesen a helyességre törekszik. Ha egy PHP-specifikus módosítás gyorsítja a működést a kimenet megváltoztatása nélkül, alkalmazzuk, és `@port-deviation:performance` jelöléssel látjuk el. A TailwindCSS rendszerrel való egyezést nem feltételezzük — folyamatosan ellenőrizzük a Tailwind saját tesztcsomagjával.

## Teljesítmény

A PHP port az TailwindCSS kimenetének egyezését helyezi előtérbe a nyers sebességgel szemben, az eredeti TypeScript pedig ettől függetlenül gyorsabb marad — a V8 JIT-fordítója natív kódra fordítja a gyakran használt kódrészeket, amire a PHP nem képes. A kérésenként vagy oldalanként előállított CSS esetében használjon újra egy fordítót (lásd: [generateExact()](https://tailwindphp.inline0.dev/hu/docs/api#accumulating-vs-exact-generation)), és őrizze meg az inicializálási állapotát a [`stateCacheFile`](https://tailwindphp.inline0.dev/hu/docs/advanced/caching#compiler-state-cache) segítségével.

Néhány gyakran használt kódrészlet kézzel hangolt optimalizálásokat tartalmaz, amelyek **azonos kimenetet biztosítanak**:

- **`ast.php` `toCss()`** — töredékeket gyűjt egy tömbbe, majd egyszer végzi el a `implode` műveletet az ismételt karakterlánc-összefűzés helyett, és előre kiszámított behúzási karakterláncokat használ.
- **`css-parser.php`** — karaktereket közvetlenül hasonlít össze az `ord()` használata helyett, és újraszámítás helyett nyomon követi a pufferhosszakat: `strlen()`.

Mindkettőt `@port-deviation:performance` dokumentálja, és a tesztcsomag eredményétől teszi függővé — nem változtathatják meg a létrehozott CSS kimenetet.

### Teljesítménymérések

A `benchmarks/` könyvtár összehasonlító tesztkörnyezetet tartalmaz. Futtassa így:

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

Példaeredmények PHP 8.4.5 / Node.js v22.17.0 környezetben (Apple M1):

| Teljesítménymérés | PHP | TypeScript |
|-----------|-----|------------|
| `css-parser` a következőn: preflight.css | ~816 ops/s | ~15.45K ops/s (≈20× gyorsabb) |
| `toCss` | ~65.85K ops/s | ~2.59M ops/s (≈39× gyorsabb) |

Az TypeScript a várakozásoknak megfelelően gyorsabb ezeknél az alacsony szintű műveleteknél. Teljes oldalak CSS előállításakor — ez a tényleges felhasználási eset — a PHP teljesítménye megfelelő (a mintafuttatásban oldalanként körülbelül 14 ms). Az ismétlődő, azonos bemeneteknél a [fájlgyorsítótár](https://tailwindphp.inline0.dev/hu/docs/advanced/caching) teljesen kiküszöböli a költséget.

## Tesztelés és egyezés

A tesztek garantálják, hogy a PHP portja ugyanazt a kimenetet állítja elő, mint a TailwindCSS. Két módszer egészíti ki egymást.

**1. Kinyerésen alapuló tesztek.** A `test-coverage/` szkriptjei feldolgozzák a TailwindCSS saját `.test.ts` fájljait, és kinyerik belőlük a teszteseteket a JSON számára. Ezután a PHPUnit végigfuttatja ezeket az eseteket a TailwindPHP rendszeren, és összehasonlítja a kimenetet a várt CSS értékkel. Mivel az elvárások közvetlenül az upstream forrásból származnak, a PHP működésétől való bármilyen eltérés hibaként jelenik meg. Ezek a tesztek az összetettebb területeket fedik le: segédfüggvények, variánsok, integráció, CSS függvények és böngészőszintű `ui.spec` tesztek.

**2. Kézzel portolt egységtesztek.** Az egyszerűbb TypeScript tesztfájlokat (AST, CSS-feldolgozás, escape-elés, jelöltfeldolgozás, értékfeldolgozás, …) közvetlenül portoljuk PHP környezetbe, és a forrásuk mellett `*.test.php` fájlként tároljuk, az eredetiek felépítését és ellenőrzéseit követve.

A ciklus: **kinyerés → futtatás → ellenőrzés**: nyerje ki újra a teszteket az aktuális TailwindCSS referenciából, futtassa le a tesztcsomagot, és az eltérések hibát okoznak. Ez szinkronban tartja a portot az upstream forrással, és lehetővé teszi, hogy egy TailwindCSS frissítését kézi átvizsgálás helyett géppel ellenőrizzük. Az eltérések meghiúsítják a CI-folyamatot.

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

A 1.7.0 kiadás (TailwindCSS v4.3.3 referencia) alapján **4,427 sikeres teszt** van:

| Csomag | Tesztek | Forrás |
|-------|-------|--------|
| Kinyert TailwindCSS csomagok (segédeszközök 706, változatok 164, index 148, css-functions 64, `ui.spec` 68) | 1,150 | kinyerve innen: `.test.ts` / `.spec.ts` |
| API lefedettség (segédeszközök, módosítók, változatok, direktívák, bővítmények, importok, `@source`, gyorsítótárazás, nyilvános API) | 2,252 | `tests/` |
| A forrás mellett található egységtesztek (feldolgozó, AST, jelöltek, téma, segédeszközök, szelektorfeldolgozó, lightningcss-átalakítások, minifikáló) | 767 | `*.test.php` portok és PHP-specifikus tesztek |
| CLI (argumentumfeldolgozás, kimenet, összeállítások) | 84 | `tests/Cli*Test.php` |
| Bővítményportok (tipográfia, űrlapok) | 45 | `*.test.php` a bővítmények mellett |
| Kiegészítő könyvtárak (clsx, tailwind-merge, CVA) | 129 | referencia-csomagok |

## Kódminőség

A formázás és a statikus elemzés a Composer szkriptjeivel fut:

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

A PHPStan 4-es szinten fut (`phpstan.neon`); csak a függvényalapú architektúra által használt dinamikus tömbformák néhány mintája van kizárva. Minden forrásfájlt elemez, a tesztfájlokat viszont kihagyja.

A tesztek által ellenőrzött felépítésről és az eltérések rögzítésének helyéről lásd: [Architektúra](https://tailwindphp.inline0.dev/hu/docs/advanced/architecture).
