Pereiti prie turinio

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.php toCss() — fragmentai kaupiami masyve ir implode atliekama vieną kartą, užuot daug kartų jungus eilutes; taip pat naudojamos iš anksto apskaičiuotos įtraukos eilutės.
  • css-parser.php — simboliai lyginami tiesiogiai, nenaudojant ord(), o buferių ilgiai sekami, užuot iš naujo skaičiavus strlen().

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:

Shell
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.

Shell
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:

Shell
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.