Našumas ir testavimas
TailwindPHP pirmiausia optimizuojamas siekiant teisingumo. Kai pakeitimas, būdingas PHP, padidina našumą nekeisdamas išvesties, jis pritaikomas ir pažymimas @port-deviation:performance. Lygiavertiškumas TailwindCSS nėra laikomas savaime suprantamu dalyku — jis nuolat tikrinamas pagal paties Tailwind testų rinkinį.
Našumas
Perkeliant PHP pirmenybė teikiama TailwindCSS išvesties atitikimui, o ne didžiausiam greičiui; pradinė TypeScript versija vis tiek veikia greičiau — V8 JIT kompiliatorius paverčia dažnai naudojamas kodo dalis gimtuoju kodu, o to PHP negali prilygti. Jei CSS generuojamas kiekvienai užklausai ar puslapiui, naudokite tą patį kompiliatorių (žr. generateExact()) ir išsaugokite jo kūrimo būseną naudodami stateCacheFile.
Kelios dažnai naudojamos kodo dalys optimizuotos rankiniu būdu, išsaugant identišką išvestį:
ast.phptoCss()— fragmentai kaupiami masyve irimplodeatliekama vieną kartą, užuot daug kartų jungus eilutes; taip pat naudojamos iš anksto apskaičiuotos įtraukos eilutės.css-parser.php— simboliai lyginami tiesiogiai, nenaudojantord(), o buferių ilgiai sekami, užuot iš naujo skaičiavusstrlen().
Abu pakeitimai aprašyti dokumentacijoje @port-deviation:performance ir tikrinami testų rinkiniu — jie negali pakeisti sugeneruoto CSS.
Palyginamieji bandymai
Kataloge benchmarks/ yra palyginimo priemonė. Paleiskite ją taip:
composer bench # PHP vs TypeScript
composer bench:save # write benchmarks/results.json
Pavyzdiniai rezultatai su PHP 8.4.5 / Node.js v22.17.0 (Apple M1):
| Palyginamasis bandymas | PHP | TypeScript |
|---|---|---|
css-parser su preflight.css |
~816 operacijų/s | ~15.45K operacijų/s (≈20× greičiau) |
toCss |
~65.85K operacijų/s | ~2.59M operacijų/s (≈39× greičiau) |
TypeScript tikėtina greičiau atlieka šias žemo lygio operacijas. Visą puslapį generuojant CSS — tai tikroji naudojimo paskirtis — PHP našumas yra pakankamas (pavyzdiniame paleidime puslapis sugeneruotas per maždaug 14 ms). Jei įvestis kartojasi, sąnaudų visai nebelieka dėl failų podėlio.
Testavimas ir lygiavertiškumas
Testai užtikrina, kad PHP prievadas pateikia tokią pačią išvestį kaip TailwindCSS. Kartu taikomi du metodai.
1. Testai, pagrįsti testų išgavimu. test-coverage/ esantys scenarijai analizuoja pačios TailwindCSS .test.ts failus ir ištraukia testavimo atvejus į JSON. Tada PHPUnit paleidžia šiuos atvejus per TailwindPHP ir palygina išvestį su numatytu CSS. Kadangi tikėtini rezultatai paimti tiesiai iš pradinio projekto, bet koks PHP elgsenos nukrypimas iškart pasireiškia kaip klaida. Šie testai aprėpia sudėtingas sritis: įrankius, variantus, integraciją, CSS funkcijas ir naršyklės lygmens ui.spec testus.
2. Rankiniu būdu perkelti vienetų testai. Paprastesni TypeScript testų failai (AST, CSS analizavimas, escapinimas, kandidatų analizavimas, reikšmių analizavimas, …) perkeliami tiesiogiai į PHP ir laikomi greta savo šaltinio kaip *.test.php, atkartojant originalų struktūrą ir teiginius.
Ciklas yra išskirti → paleisti → patikrinti: iš naujo išskiriama iš dabartinės TailwindCSS nuorodos, paleidžiamas testų rinkinys, o bet koks nuokrypis laikomas klaida. Taip perkėlimas išlieka sinchronizuotas su pirmine versija ir TailwindCSS atnaujinimą galima patikrinti mechaniškai, o ne apžiūrint. Nuokrypis sustabdo CI.
composer extract # re-extract test cases from the TailwindCSS reference
composer test # run the full suite
Išleidus versiją 1.7.0 (nuoroda į TailwindCSS v4.3.3), sėkmingai išlaikyta 4,427 testų:
| Rinkinys | Testai | Šaltinis |
|---|---|---|
Išskirti TailwindCSS rinkiniai (utilities 706, variants 164, index 148, css-functions 64, ui.spec 68) |
1,150 | išskirta iš .test.ts / .spec.ts |
API aprėptis (utilities, modifiers, variants, directives, plugins, imports, @source, caching, viešasis API) |
2,252 | tests/ |
| Vienetų testai greta šaltinio (parser, AST, candidates, theme, utils, selector parser, lightningcss transforms, minifier) | 767 | *.test.php perkėlimai ir konkrečiai PHP skirti testai |
| CLI (argumentų analizavimas, išvestis, kūrimas) | 84 | tests/Cli*Test.php |
| Įskiepių perkėlimai (typography, forms) | 45 | *.test.php greta įskiepių |
| Papildomos bibliotekos (clsx, tailwind-merge, CVA) | 129 | nuorodiniai rinkiniai |
Kodo kokybė
Formatavimas ir statinė analizė vykdomi naudojant Composer scenarijus:
composer lint # Pint --test (check formatting)
composer format # Pint (fix formatting)
composer analyse # PHPStan (static analysis, level 4)
composer quality # lint + analyse
PHPStan veikia 4 lygiu (phpstan.neon), taikant trumpą ignoruojamų šablonų sąrašą dinaminėms masyvų struktūroms, kurias naudoja funkcijomis pagrįsta architektūra. Analizuojami visi šaltinio failai; testų failai neįtraukiami.
Apie šių testų tikrinamą struktūrą ir registruojamus nuokrypius žr. Architektūra.