
# Veiktspēja un testēšana

TailwindPHP vispirms optimizē pareizību. Ja PHP specifiska izmaiņa paātrina darbību, nemainot izvadi, tā tiek ieviesta un atzīmēta ar `@port-deviation:performance`. Atbilstība TailwindCSS netiek pieņemta par pašsaprotamu — to nepārtraukti pārbauda, izmantojot Tailwind pašu testu komplektu.

## Veiktspēja

Pārnesot PHP, prioritāte ir TailwindCSS izvadei, nevis maksimālai veiktspējai, un sākotnējais TypeScript tik un tā ir ātrāks — V8 JIT kompilē bieži izmantotos koda ceļus uz mašīnkodu tā, kā PHP nespēj. Ja CSS tiek ģenerēts katram pieprasījumam vai lapai, atkārtoti izmantojiet vienu kompilatoru (skatiet [generateExact()](https://tailwindphp.inline0.dev/lv/docs/api#accumulating-vs-exact-generation)) un saglabājiet tā izveides stāvokli ar [`stateCacheFile`](https://tailwindphp.inline0.dev/lv/docs/advanced/caching#compiler-state-cache).

Daži bieži izmantotie koda ceļi ir rūpīgi optimizēti, un šie optimizējumi **saglabā identisku izvadi**:

- **`ast.php` `toCss()`** — uzkrāj fragmentus masīvā un vienreiz izsauc `implode`, nevis atkārtoti savieno virknes, kā arī izmanto iepriekš aprēķinātas atkāpes virknes.
- **`css-parser.php`** — salīdzina rakstzīmes tieši, neizmantojot `ord()`, un atkārtotas `strlen()` aprēķināšanas vietā seko līdzi bufera garumam.

Abas optimizācijas ir dokumentētas ar `@port-deviation:performance` un piesaistītas testu komplektam — tās nevar mainīt ģenerēto CSS.

### Veiktspējas mērījumi

Mapē `benchmarks/` ir salīdzināšanas rīks. Palaidiet to šādi:

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

Rezultātu piemēri operētājsistēmā PHP 8.4.5 / Node.js v22.17.0 (Apple M1):

| Veiktspējas tests | PHP | TypeScript |
|-----------|-----|------------|
| `css-parser`, izmantojot preflight.css | ~816 ops/s | ~15.45K ops/s (≈20× ātrāk) |
| `toCss` | ~65.85K ops/s | ~2.59M ops/s (≈39× ātrāk) |

Šajās zema līmeņa darbībās TypeScript ir ātrāks, kā jau sagaidāms. Pilnas lapas CSS ģenerēšanai, kas ir faktiskais lietojuma gadījums, PHP veiktspēja ir pietiekama (paraugdarbības laikā apmēram 14 ms lapai). Atkārtotai identiskai ievadei [failu kešatmiņa](https://tailwindphp.inline0.dev/lv/docs/advanced/caching) pilnībā novērš šo izmaksu.

## Testēšana un atbilstība

Testi nodrošina, ka PHP pārnesums rada tādu pašu izvadi kā TailwindCSS. Kopā tiek izmantotas divas pieejas.

**1. Testi, kas balstīti uz testu iegūšanu.** Skripti mapē `test-coverage/` parsē pašas TailwindCSS `.test.ts` datnes un iegūtos testpiemērus ievieto JSON. Pēc tam PHPUnit šos gadījumus palaiž caur TailwindPHP un salīdzina izvadi ar paredzēto CSS. Tā kā sagaidāmie rezultāti tiek iegūti tieši no augšupējā projekta, jebkura novirze PHP darbībā uzreiz izraisa kļūdu. Šie testi aptver sarežģītākos gadījumus: utilītas, variantus, integrāciju, CSS funkcijas un pārlūka līmeņa `ui.spec` testus.

**2. Manuāli pārnestie vienību testi.** Vienkāršāki TypeScript testu faili (AST, CSS parsēšana, izvairīšanās rakstzīmes, kandidātu parsēšana, vērtību parsēšana, …) tiek tieši pārnesti uz PHP un novietoti līdzās avota failiem kā `*.test.php`, atspoguļojot sākotnējo testu struktūru un apgalvojumus.

Cikls ir **iegūt → palaist → pārbaudīt**: iegūstiet testus no aktuālās TailwindCSS atsauces, palaidiet komplektu, un jebkura novirze izraisīs kļūdu. Tā pārnesums atbilst augšupējai versijai, un TailwindCSS atjauninājumu var pārbaudīt mehāniski, nevis pārskatot ar aci. Novirze izraisa CI kļūmi.

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

Uz laidiena 1.7.0 brīdi ir 4,427 sekmīgi testi (atsauce: TailwindCSS v4.3.3):

| Testu komplekts | Testi | Avots |
|-------|-------|--------|
| Iegūtie TailwindCSS komplekti (utilītas 706, varianti 164, indekss 148, css-functions 64, `ui.spec` 68) | 1,150 | iegūti no `.test.ts` / `.spec.ts` |
| API pārklājums (utilītas, modifikatori, varianti, direktīvas, spraudņi, imports, `@source`, kešatmiņa, publiskā API) | 2,252 | `tests/` |
| Vienību testi līdzās avotam (parsētājs, AST, kandidāti, tēma, utilītas, selektoru parsētājs, lightningcss transformācijas, minifikators) | 767 | `*.test.php` pārnesumi un PHP specifiski testi |
| CLI (argumentu parsēšana, izvade, būvējumi) | 84 | `tests/Cli*Test.php` |
| Spraudņu pārnesumi (tipogrāfija, veidlapas) | 45 | `*.test.php` līdzās spraudņiem |
| Pavadošās bibliotēkas (clsx, tailwind-merge, CVA) | 129 | atsauces komplekti |

## Koda kvalitāte

Formatēšana un statiskā analīze tiek palaista ar Composer skriptiem:

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

PHPStan darbojas 4. līmenī (`phpstan.neon`), izmantojot nelielu ignorējamo rakstu sarakstu dinamiskajām masīvu struktūrām, ko izmanto uz funkcijām balstītā arhitektūra. Tiek analizēti visi avota faili; testu faili ir izslēgti.

Par šo testu pārbaudīto struktūru un reģistrētajām novirzēm skatiet [Arhitektūra](https://tailwindphp.inline0.dev/lv/docs/advanced/architecture).
