Liigu sisu juurde

Vahemälu ja minimeerimine

Töötlusahela lõpus tuleb arvestada kolme tootmiskeskkonna vajadusega: vältida identse sisendi uuesti kompileerimist, vältida kompilaatori loomise kulu iga päringuga ning vähendada genereeritud CSS mahtu. Kõik kolm on kompilaatori ümber toimivad PHP-poolsed abifunktsioonid.

Vahemällu salvestamine

CSS loomisel käivitatakse iga kord kogu töötlusahel. Kui sisu päringute vahel ei muutu, kirjutab failipõhine vahemälu tulemuse kettale ja tagastab selle järgmistel kordadel sealt.

Edastage cache funktsioonile tw::generate() — true vaikekataloogi jaoks või kohandatud kataloogi asukohateena:

PHP
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
]);

Vahemälukataloog luuakse automaatselt, kui seda veel pole.

Vahemälu võti

Võti tuletatakse sisust, CSS konfiguratsioonist ja lipust minify — see räsitakse failinimeks tailwind_<hash>.css. Iga muudatus märgistuses, sisendis CSS või minimeerimise lubatuses annab erineva võtme ja seega ka erineva faili.

Võtmes olev CSS konfiguratsioon koosneb tekstisisesest css-st ja failide sisust, mille nimed on määratud parameetris importPaths. Võti ei arvesta kahte sisendit: faile, mis kaasatakse nende failide sees oleva pesastatud @import kaudu, ega TailwindPHP versiooni. Tühjendage vahemälu pärast pesastatud impordi muutmist või paketi uuendamist, vastasel juhul serveeritakse endiselt vana väljundit.

Kehtivusaeg

cacheTtl on kehtivusaeg sekundites. Vahemälutabamuse korral võrreldakse faili muutmisaega praeguse ajaga; kui fail on vanem kui cacheTtl, käsitletakse seda vahemälupuudumisena ja kompileeritakse uuesti. Kui cacheTtl puudub, ei aegu kirjed kunagi — tühjendage need käsitsi.

Vahemälu tühjendamine

tw::clearCache() (või funktsioon clearCache()) eemaldab vahemälukataloogist failid tailwind_*.css ja tagastab kustutatud failide arvu.

PHP
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

Kompilaatori oleku vahemälu

Väljundivahemälust on abi ainult siis, kui sama sisu esitatakse uuesti. Kui sisu muutub iga väljakutsega, on kulukas osa kompilaatori enda loomine: @import "tailwindcss" lahendamine, komplektis olevate ressursside parsimine ja teema koondamine. See etapp sõltub ainult sisendist CSS, seega saab selle salvestada ja uuesti kasutada.

Edastage stateCacheFile funktsioonile tw::compile() (või new TailwindCompiler($css, $options)):

PHP
use TailwindPHP\tw;

$compiler = tw::compile($themeCss, [
    'stateCacheFile' => __DIR__ . '/cache/tailwind-state.php',
]);

$css = $compiler->generateExact($html, true);

Esimesel loomisel kirjutatakse olek antud teele lihttekstina PHP faili, mida OPcache saab päringute vahel jagada; hilisemal loomisel laaditakse see uuesti parsimise asemel failist. Väljund on bait-baidilt identne vahemäluta kompilaatori omaga.

  • Faili kontrollitakse mootorisõrmejälje järgi (TailwindPHP lähtekoodifailide ja ressursside suurused ning muutmisajad), sisendist CSS ning suvanditest base ja importSearchPaths tuletatud võtme järgi ning iga sisendi imporditud faili suuruse ja muutmisaja järgi. Erinevuse korral koostatakse fail uuesti ja kirjutatakse üle; seega ei vaja TailwindPHP uuendamine ega imporditud faili muutmine käsitsi sekkumist.
  • Teie vastutate tee eest: kasutage iga erineva sisendi CSS jaoks eraldi faili kataloogis, kuhu veebiserver saab kirjutada. Kirjutamine on atomaarne (ajutine fail ja rename()).
  • Kohandatud importResolver kasutavad sisendid jätavad vahemälu vahele, sest lahendaja käitumist ei saa sõrmejäljega tuvastada.
  • Sama vahemälu saab kasutada ka madalama taseme massiivi compile() API ümber, kasutades funktsiooni TailwindPHP\StateCache\compileCssCached($css, $cacheFile, $options).

tw::generate() ei võta vastu parameetrit stateCacheFile; see loob iga väljakutsega uue kompilaatori. Kui loomise kulu on oluline, kasutage kompilaatori eksemplari.

Minimeerimine

Minimeerimine vähendab väljundi mahtu tootmiskeskkonna jaoks. Lipp minify väljastab minimeeritud CSS juba serialiseerimise käigus, mistõttu on see kiireim ja täpseim viis; tw::minify() käivitab olemasoleva CSS stringi põhise minimeerija (src/_tailwindphp/CssMinifier.php):

PHP
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);

Need kaks viisi annavad samaväärse struktuuri, kuid baidid pole identsed. Serialiseerija säilitab alamelementide :not() selektorid, mille stringitöötlus kokku liidab; seetõttu eelistage genereeritud väljundi jaoks lippu minify ja kasutage tw::minify() juhul, kui CSS saabub stringina.

Mida see teeb

Mõlemad viisid rakendavad samu suuruse vähendamise võtteid:

Etapp Mõju
Kommentaaride eemaldamine Eemaldab /* … */ plokid
Tühikute kokkusurumine Koondab järjestikused tühikud ja eemaldab tühikud ümber { } ; : , ning selektorite kombinaatorite
Värvikoodide lühendamine #ffffff → #fff, #aabbcc → #abc
Nullühikute eemaldamine 0px → 0 (säilitab väärtused 0s/0ms)
Fondikaalu lühendamine font-weight:normal → 400, font-weight:bold → 700
Tühjade reeglite eemaldamine Eemaldab tühjade deklaratsiooniplokkidega selektorid

Kavakohaselt ei ühendata korduvaid selektoreid ega lühivormis omadusi — mõlemad muudaksid silumise keerulisemaks ja võivad mõjutada kaskaadi.

CLI: --minify või --optimize

CLI pakub serialiseerija minimeerimisteed kahe lipu kaudu:

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

Praeguses versioonis minimeerib ka --optimize, seega kirjutavad mõlemad käsud samad baidid (#9). Lightningcss-iga samaväärsed teisendused käivitatakse igal ehitamisel, nii et tavaline väljund (ilma liputa) on juba optimeeritud ja loetaval kujul.

Ülejäänud avaliku API kohta — tw::generate(), tw::compile(), kontrollimeetodid ja sisendvormingud — vaadake API viidet.