Ukladanie do vyrovnávacej pamäte a minimalizácia
Na okraji kompilácie sú tri témy pre produkčné nasadenie: vyhnúť sa opätovnej kompilácii rovnakého vstupu, vyhnúť sa nákladom na zostavenie kompilátora pri každej požiadavke a zmenšiť vygenerované CSS. Všetky tri riešia pomocné funkcie na strane PHP okolo kompilátora.
Ukladanie do vyrovnávacej pamäte
Generovanie CSS pri každom volaní spúšťa celý postup. Ak sa obsah medzi požiadavkami nemení, vyrovnávacia pamäť založená na súboroch uloží výsledok na disk a pri ďalších volaniach ho odtiaľ načíta.
Odovzdajte cache do tw::generate() — true pre predvolený adresár alebo reťazec s cestou pre vlastný adresár:
use TailwindPHP\tw;
// Cache to the default directory: sys_get_temp_dir() . '/tailwindphp'
$css = tw::generate([
'content' => '<div class="flex p-4">Hello</div>',
'cache' => true,
]);
// Cache to a custom directory
$css = tw::generate([
'content' => '<div class="flex p-4">Hello</div>',
'cache' => '/path/to/cache',
]);
// With a time-to-live (seconds)
$css = tw::generate([
'content' => '<div class="flex p-4">Hello</div>',
'cache' => true,
'cacheTtl' => 3600, // expire after 1 hour
]);
Adresár vyrovnávacej pamäte sa vytvorí automaticky, ak ešte neexistuje.
Kľúč vyrovnávacej pamäte
Kľúč sa odvodzuje od obsahu, CSS konfigurácie a príznaku minify — tieto údaje sa zahashujú do názvu súboru tailwind_<hash>.css. Každá zmena značiek, CSS vstupu alebo zapnutia minifikácie vytvorí iný kľúč, a teda aj iný súbor.
CSS konfigurácia v kľúči pozostáva z inline css a obsahu súborov uvedených v importPaths. Dve položky do nej nepatria: súbory načítané vnoreným @import v týchto súboroch a verzia TailwindPHP. Po úprave vnoreného importu alebo aktualizácii balíka vymažte vyrovnávaciu pamäť, inak sa bude naďalej zobrazovať starý výstup.
Čas platnosti
cacheTtl je životnosť v sekundách. Pri nájdení súboru vo vyrovnávacej pamäti sa porovná jeho čas poslednej úpravy s aktuálnym časom; ak je súbor starší ako cacheTtl, považuje sa za nenájdený a znova sa skompiluje. Bez cacheTtl záznamy nikdy neexpirujú — vymažte ich ručne.
Vymazanie vyrovnávacej pamäte
tw::clearCache() (alebo funkcia clearCache()) odstráni súbory tailwind_*.css z adresára vyrovnávacej pamäte a vráti počet odstránených súborov.
use TailwindPHP\tw;
use function TailwindPHP\clearCache;
$deleted = tw::clearCache(); // default directory
$deleted = tw::clearCache('/path/to/cache'); // custom directory
clearCache('/path/to/cache'); // function form
Vyrovnávacia pamäť stavu kompilátora
Vyrovnávacia pamäť výstupu pomáha iba vtedy, keď sa vráti rovnaký obsah. Ak sa obsah mení pri každom volaní, náročnou časťou je zostavenie samotného kompilátora: vyriešenie @import "tailwindcss", analýza pribalených zdrojov a zhromaždenie témy. Táto fáza závisí iba od vstupného CSS, takže ju možno uložiť a znova použiť.
Odovzdajte stateCacheFile funkcii tw::compile() (alebo new TailwindCompiler($css, $options)):
use TailwindPHP\tw;
$compiler = tw::compile($themeCss, [
'stateCacheFile' => __DIR__ . '/cache/tailwind-state.php',
]);
$css = $compiler->generateExact($html, true);
Pri prvom vytvorení sa stav zapíše do danej cesty ako obyčajný súbor PHP, ktorý môže OPcache zdieľať medzi požiadavkami; pri ďalších vytvoreniach sa načíta namiesto opätovnej analýzy. Výstup je bajtovo totožný s výstupom kompilátora bez vyrovnávacej pamäte.
- Súbor sa overuje podľa odtlačku prostredia (veľkosť a čas poslednej úpravy zdrojov a zdrojových súborov TailwindPHP), kľúča odvodeného od vstupného CSS a možností
baseaimportSearchPaths, ako aj veľkosti a času poslednej úpravy každého súboru importovaného vstupom. Pri nesúlade sa znova zostaví a prepíše, takže aktualizácia TailwindPHP alebo úprava importovaného súboru nevyžaduje ručný zásah. - Cestu spravujete vy: pre každý odlišný vstup CSS použite samostatný súbor v adresári, do ktorého môže webový server zapisovať. Zápisy sú atomické (dočasný súbor a
rename()). - Vstupy používajúce vlastný
importResolverobchádzajú vyrovnávaciu pamäť, pretože správanie prekladača nemožno zahrnúť do odtlačku. - Rovnakú vyrovnávaciu pamäť možno použiť aj okolo nízkoúrovňového poľa
compile()API akoTailwindPHP\StateCache\compileCssCached($css, $cacheFile, $options).
tw::generate() neprijíma stateCacheFile; pri každom volaní zostaví nový kompilátor. Ak záleží na čase zostavenia, použite inštanciu kompilátora.
Minifikácia
Minifikácia zmenšuje výstup pre produkčné prostredie. Príznak minify vytvára minifikované CSS priamo počas serializácie, takže ide o najrýchlejšiu aj najpresnejšiu cestu; tw::minify() spúšťa minifikátor pracujúci s reťazcom (src/_tailwindphp/CssMinifier.php) nad existujúcim reťazcom CSS:
use TailwindPHP\tw;
// Minify during generation (serializer path, preferred)
$css = tw::generate([
'content' => '<div class="flex p-4">Hello</div>',
'minify' => true,
]);
// Or minify an existing string (string-based post-pass)
$css = tw::generate('<div class="flex p-4">Hello</div>');
$minified = tw::minify($css);
Obe cesty vytvárajú rovnocennú štruktúru, nie však totožné bajty. Cesta serializátora zachováva selektory potomkov :not(), ktoré priechod nad reťazcom zlučuje, preto pri generovanom výstupe uprednostnite príznak minify a tw::minify() používajte pre CSS, ktoré prichádza ako reťazec.
Čo robí
Obe cesty vykonávajú rovnakú sadu zmenšení veľkosti:
| Krok | Účinok |
|---|---|
| Odstránenie komentárov | Odstraňuje bloky /* … */ |
| Zjednotenie medzier | Zlučuje opakované medzery a odstraňuje ich okolo { } ; : , a kombinátorov selektorov |
| Skrátenie hexadecimálnych farieb | #ffffff → #fff, #aabbcc → #abc |
| Odstránenie jednotiek pri nule | 0px → 0 (časové hodnoty 0s/0ms zostávajú zachované) |
| Skrátenie hrúbky písma | font-weight:normal → 400, font-weight:bold → 700 |
| Odstránenie prázdnych pravidiel | Odstraňuje selektory s prázdnymi blokmi deklarácií |
Zámerne sa nezlučujú duplicitné selektory ani vlastnosti v skrátenom zápise — oboje sťažuje ladenie a môže ovplyvniť kaskádu.
CLI: --minify vs. --optimize
CLI sprístupňuje cestu minifikácie serializátora pomocou dvoch príznakov:
# Optimize and minify (smallest output)
tailwindphp -i ./src/app.css -o ./dist/styles.css --minify # or -m
# Meant to optimize without minifying
tailwindphp -i ./src/app.css -o ./dist/styles.css --optimize
V aktuálnom vydaní minifikuje aj --optimize, takže oba príkazy zapisujú rovnaké bajty (#9). Transformácie ekvivalentné s lightningcss sa pri každom zostavení vykonajú tak či tak, takže obyčajný výstup (bez príznaku) je už optimalizovaný a čitateľný.
Zvyšok verejného API — tw::generate(), tw::compile(), metódy kontroly a vstupné formáty — nájdete v referenčnej príručke API.