
# Jõudlus ja testimine

TailwindPHP seab esikohale õigsuse. Kui PHP-põhine muudatus kiirendab tööd väljundit muutmata, võetakse see kasutusele ja märgitakse tähisega `@port-deviation:performance`. Samaväärsust TailwindCSS-iga ei eeldata — seda kontrollitakse pidevalt Tailwind enda testikomplekti abil.

## Jõudlus

PHP port seab prioriteediks TailwindCSS väljundiga sobitumise, mitte toorkiiruse, ning algne TypeScript on igal juhul kiirem — V8 JIT kompileerib kuumad kooditeed masinkoodiks viisil, mida PHP ei suuda jäljendada. Kui CSS luuakse iga päringu või lehe jaoks, taaskasuta üht kompilaatorit (vt [generateExact()](https://tailwindphp.inline0.dev/et/docs/api#accumulating-vs-exact-generation)) ja salvesta selle loomise olek püsivalt vahemällu ([`stateCacheFile`](https://tailwindphp.inline0.dev/et/docs/advanced/caching#compiler-state-cache)).

Mõned kuumad kooditeed kasutavad käsitsi häälestatud optimeerimisi, mis **säilitavad identse väljundi**:

- **`ast.php` `toCss()`** — kogub fragmendid massiivi ja `implode`-ib need ühe korraga, mitte ei liida korduvalt stringe kokku, ning kasutab ette arvutatud taande stringe.
- **`css-parser.php`** — võrdleb märke otse, kasutamata `ord()`-it, ning jälgib puhvri pikkust, selle asemel et `strlen()` uuesti arvutada.

Mõlemad on dokumenteeritud tähisega `@port-deviation:performance` ja testikomplekt kontrollib neid — need ei saa genereeritud CSS muuta.

### Jõudlustestid

Võrdluse tööriistakomplekt asub kataloogis `benchmarks/`. Käivita see nii:

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

Näidistulemused keskkonnas PHP 8.4.5 / Node.js v22.17.0 (Apple M1):

| Jõudlustest | PHP | TypeScript |
|-----------|-----|------------|
| `css-parser` kataloogis preflight.css | ~816 op/s | ~15.45K op/s (≈20× kiirem) |
| `toCss` | ~65.85K op/s | ~2.59M op/s (≈39× kiirem) |

TypeScript on nende madala taseme toimingute puhul ootuspäraselt kiirem. Täislehe CSS genereerimiseks — tegelikuks kasutusjuhuks — on PHP jõudlus piisav (näidiskäivituses umbes 14 ms lehe kohta). Korduva identse sisendi korral kaob [failivahemälu](https://tailwindphp.inline0.dev/et/docs/advanced/caching) abil kulu täielikult.

## Testimine ja samaväärsus

Testid tagavad, et PHP port toodab sama väljundi nagu TailwindCSS. Koos kasutatakse kaht lähenemist.

**1. Eraldamisel põhinevad testid.** Kataloogi `test-coverage/` skriptid pargivad TailwindCSS enda `.test.ts` failid ja eraldavad testjuhtumid JSON-i jaoks. Seejärel suunab PHPUnit need juhtumid läbi TailwindPHP ning võrdleb väljundit eeldatava CSS-ga. Kuna eeldused pärinevad otse algsest projektist, ilmneb iga erinevus PHP käitumises veana. Need testid katavad keerukamad osad: utiliidid, variandid, integratsiooni, CSS funktsioonid ja brauseritaseme `ui.spec` testid.

**2. Käsitsi üle kantud ühiktestid.** Lihtsamad TypeScript testifailid (AST, CSS parsimine, paomärgistamine, kandidaatide parsimine, väärtuste parsimine, …) kantakse otse üle PHP-i ja asuvad lähtekoodi kõrval failidena `*.test.php`, järgides algsete testide struktuuri ja väiteid.

Tsükkel on **eraldamine → käivitamine → kontrollimine**: eralda testid praegusest TailwindCSS-i viitest uuesti, käivita komplekt ja kõik erinevused annavad vea. Nii püsib port algse projektiga samas taktis ning TailwindCSS uuendust saab kontrollida automaatselt, mitte käsitsi üle vaadates. Erinevused põhjustavad CI-s vea.

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

Väljalaske 1.7.0 seisuga on edukalt läbitud **4,427 testi** (viide TailwindCSS v4.3.3):

| Komplekt | Testid | Allikas |
|-------|--------|--------|
| Eraldatud TailwindCSS komplektid (utiliidid 706, variandid 164, indeks 148, css-functions 64, `ui.spec` 68) | 1,150 | eraldatud kataloogidest `.test.ts` / `.spec.ts` |
| API katvus (utiliidid, modifikaatorid, variandid, direktiivid, pluginad, impordid, `@source`, vahemällu salvestamine, avalik API) | 2,252 | `tests/` |
| Lähtekoodi kõrval asuvad ühikutestid (parser, AST, kandidaadid, teema, utiliidid, selektoriparser, lightningcss-i teisendused, minimeerija) | 767 | `*.test.php` pordid ja PHP-i testid |
| CLI (argumentide parsimine, väljund, järgud) | 84 | `tests/Cli*Test.php` |
| Pluginate pordid (tüpograafia, vormid) | 45 | `*.test.php` pluginate kõrval |
| Kaasnevad teegid (clsx, tailwind-merge, CVA) | 129 | võrdlustestide komplektid |

## Koodi kvaliteet

Vormindamine ja staatiline analüüs käivitatakse skriptide Composer kaudu:

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

PHPStan töötab tasemel 4 (`phpstan.neon`), kasutades lühikest loendit dünaamiliste massiivikujude ignoreerimise mustritest, mida funktsioonipõhine arhitektuur kasutab. Analüüs hõlmab kõiki lähtefaile, kuid jätab testifailid välja.

Testidega kontrollitava struktuuri ja dokumenteeritud kõrvalekallete kohta vaata lehte [Arhitektuur](https://tailwindphp.inline0.dev/et/docs/advanced/architecture).
