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()) un saglabājiet tā izveides stāvokli ar stateCacheFile.
Daži bieži izmantotie koda ceļi ir rūpīgi optimizēti, un šie optimizējumi saglabā identisku izvadi:
ast.phptoCss()— uzkrāj fragmentus masīvā un vienreiz izsaucimplode, nevis atkārtoti savieno virknes, kā arī izmanto iepriekš aprēķinātas atkāpes virknes.css-parser.php— salīdzina rakstzīmes tieši, neizmantojotord(), un atkārtotasstrlen()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:
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 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.
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:
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.