Pāriet uz saturu

Kešatmiņa un minificēšana

Trīs ar produkcijas vidi saistīti uzdevumi atrodas konveijera beigās: izvairīties no vienādas ievades atkārtotas kompilēšanas, izvairīties no kompilatora izveides izmaksām katrā pieprasījumā un samazināt ģenerēto CSS apjomu. Visas trīs ir PHP puses palīgfunkcijas ap kompilatoru.

Kešatmiņa

CSS ģenerēšana katrā izsaukumā izpilda visu konveijeru. Ja saturs starp pieprasījumiem nemainās, uz failiem balstītā kešatmiņa saglabā rezultātu diskā un turpmākajos izsaukumos to atgriež no turienes.

Padodiet cache funkcijai tw::generate() — true noklusējuma direktorijam vai ceļa virkni pielāgotam direktorijam:

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

Ja kešatmiņas direktorijs neeksistē, tas tiek izveidots automātiski.

Kešatmiņas atslēga

Atslēgu veido saturs, CSS konfigurācija un minify karodziņš — tos ietver faila nosaukumā tailwind_<hash>.css. Jebkuras izmaiņas marķējumā, CSS ievadē vai minificēšanas ieslēgšanā rada citu atslēgu un līdz ar to citu failu.

Atslēgā ietvertā CSS konfigurācija ir iekļautais css un to failu saturs, kuri norādīti importPaths. Tajā nav iekļautas divas ievades: faili, kas tiek iekļauti ar ligzdotu @import šajos failos, un TailwindPHP versija. Pēc ligzdota importa rediģēšanas vai pakotnes jaunināšanas iztīriet kešatmiņu, citādi tiks turpināta vecās izvades atgriešana.

Derīguma termiņš

cacheTtl ir derīguma termiņš sekundēs. Ja kešatmiņa tiek izmantota, faila modificēšanas laiks tiek salīdzināts ar pašreizējo laiku; ja fails ir vecāks par cacheTtl, tas tiek uzskatīts par kešatmiņas trāpījumu un kompilēts no jauna. Ja cacheTtl nav norādīts, ierakstiem nav derīguma termiņa — iztīriet tos manuāli.

Kešatmiņas iztīrīšana

tw::clearCache() (vai funkcija clearCache()) noņem tailwind_*.css failus no kešatmiņas direktorija un atgriež dzēsto failu skaitu.

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

Kompilatora stāvokļa kešatmiņa

Izvades kešatmiņa palīdz tikai tad, ja atgriežas tas pats saturs. Ja saturs mainās katrā izsaukumā, laikietilpīgākā daļa ir paša kompilatora izveide: @import "tailwindcss" atrisināšana, komplektēto resursu parsēšana un tēmas apkopošana. Šis posms ir atkarīgs tikai no ievades CSS, tāpēc to var saglabāt un izmantot atkārtoti.

Padodiet stateCacheFile funkcijai tw::compile() (vai new TailwindCompiler($css, $options)):

PHP
use TailwindPHP\tw;

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

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

Pirmās izveides laikā stāvoklis tiek saglabāts šajā ceļā kā vienkāršs PHP fails, ko OPcache var koplietot starp pieprasījumiem; turpmākās izveides reizes to ielādē, nevis parsē atkārtoti. Izvade ir baitu līmenī identiska kešatmiņu neizmantojoša kompilatora izvadei.

  • Fails tiek validēts, izmantojot dziņa kontrolsummu (TailwindPHP avotu un resursu izmēru un modificēšanas laiku), atslēgu, kas iegūta no ievades CSS, base un importSearchPaths opcijām, kā arī katra ievadē importētā faila izmēru un modificēšanas laiku. Ja rādītāji nesakrīt, tas tiek atjaunots un pārrakstīts, tāpēc TailwindPHP jaunināšanai vai importēta faila rediģēšanai nav vajadzīgas manuālas darbības.
  • Ceļš jānorāda jums: izmantojiet atsevišķu failu katrai atšķirīgai ievades CSS, direktorijā, kurā tīmekļa serveris var rakstīt. Ieraksti ir atomāri (pagaidu fails un rename()).
  • Ievades, kurās izmantots pielāgots importResolver, apiet kešatmiņu, jo risinātāja darbību nevar kontrolēt ar kontrolsummu.
  • To pašu kešatmiņu var izmantot arī ap zemāka līmeņa compile() masīvu API kā TailwindPHP\StateCache\compileCssCached($css, $cacheFile, $options).

tw::generate() nepieņem stateCacheFile; tas katrā izsaukumā izveido jaunu kompilatoru. Ja izveides izmaksas ir svarīgas, izmantojiet kompilatora instanci.

Minimizēšana

Minificēšana samazina izvadi produkcijas videi. Karodziņš minify serializēšanas laikā tieši izvada minificētu CSS, tāpēc tas ir gan ātrākais, gan precīzākais risinājums; tw::minify() esošai CSS virknei piemēro virkņu minificētāju (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);

Abi paņēmieni rada līdzvērtīgu struktūru, bet ne identiskus baitus. Serializētāja ceļš saglabā pakārtotos :not() atlasītājus, ko virknes apstrādes posms saplacina, tāpēc ģenerētai izvadei dodiet priekšroku karodziņam minify, bet CSS, kas saņemts kā virkne, minificējiet ar tw::minify().

Darbība

Abi paņēmieni veic vienu un to pašu izmēra samazināšanas soļu kopu:

Solis Rezultāts
Noņem komentārus Izmet /* … */ blokus
Saplacina atstarpes Apvieno atstarpju virknes un noņem tās ap { } ; : , un atlasītāju kombinatoriem
Saīsina heksadecimālās krāsas #ffffff → #fff, #aabbcc → #abc
Noņem nulles mērvienības 0px → 0 (saglabā 0s/0ms laika vērtības)
Saīsina fonta svaru font-weight:normal → 400, font-weight:bold → 700
Noņem tukšos noteikumus Atmet atlasītājus ar tukšiem deklarāciju blokiem

Pēc ieceres netiek apvienoti dublēti atlasītāji vai saīsināti rekvizīti — abi apgrūtina atkļūdošanu un var ietekmēt kaskādi.

CLI: --minify pret --optimize

CLI ar diviem karodziņiem nodrošina piekļuvi serializētāja minificēšanas ceļam:

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

Pašreizējā laidienā --optimize arī veic minificēšanu, tāpēc abas komandas ieraksta vienādus baitus (#9). lightningcss ekvivalentās transformācijas tiek izpildītas katrā būvēšanas reizē, tāpēc parastā izvade (bez karodziņa) jau ir optimizēta un lasāma.

Pārējo publisko API — tw::generate(), tw::compile(), pārbaudes metodes un ievades formātus — skatiet API atsaucē.