✉️ Saņem šito visu e-pastā. Tā vietā, lai palaistu garām kaut ko no tā, ko es rakstu savā blogā, tagad vari pierakstīties un saņemt e-pastā visu, ko es te rakstu. Tas nav bieži.

← Uz sākumu

htmx

16. janvārī, 1 komentārs

Šis ieraksts ir tehnisks. Tas var būt par datoriem, programmēšanu, lodēšanu un tamlīdzīgām ne pārāk populārām lietām. Ja tevi šāds saturs neinteresē, droši vari to nelasīt.

Jau kādu pusgadu vismaz reizi mēnesī paskatos savā īpašajā sarakstiņā. Īpašais sarakstiņš regulāri papildinās ar lietām, kuras papētīt. Tad šī varētu būt rubrika 'Kaspars pēta'. Brr... Nē.

Šomēnes pienāca kārta htmx. Tā ir Javascript bibliotēka, kuras mērķis ir deklaratīva pieeja dinamiskam saturam. Idejiski vienkāršākais pielietojums būtu - uzklikšķinot uz saites, no servera tiek pieprasīta tikai tā dokumenta daļa, kura jāmaina, nevis viss. Autori ir pat tik ļoti vecās raudzes, ka izmanto terminu AJAX, kuru nebiju manījis modernajā virtuālajā literatūrā labu laiku.

"Ha!", atskan lasītāju pūlī. "Bet tas, pie joda, nav nekas jauns!"

Un taisnība vien būs. Ja neskaita to, ka tā vietā, lai šo visu saimniecību bakstītu, izmantojot pašrocīgi rakstītu Javascript kodu, to dara ar HTML elementu atribūtiem.

Laiks triviālākajam piemēram.

<script src="https://unpkg.com/htmx.org@1.9.10"></script>

<ul>
    <li><a href="/post/1" 
           hx-get="/post/1"
           hx-target="#content">Pirmieraksts</a></li>
</ul>

<div id="content"></div>

Un, raugi, šīs dažas rindiņas darīs to, ka pieprasīs serverim iz /post/1 atgriest HTMLu un iebakstīs to #content elementa iekšiņā.

Fensī, ne? Ir daži ieguvumi. Pārlādēta tiek tikai neliela daļa no lapas. Tādējādi (allegedly) tas notiek ņiprāk. Pārējie potenciāli ieguvumi iekļauj lietas, kuras normāls lietoājs normālā lēnā lapā nemanīs - mazāka noslodze serverim, mazāk pārraidīto datu, utt. Vēl varētu pieminēt, ka prātīgi veidojot, tas eleganti degradējas tiem, kas nejēdz javascript, ieskaitot meklētājus un citus robotveidīgos.

Vēl viens labums - nav jāčakarējas ar JSON objektiem un citu šņagu. Webs ir saturs un saturs ir HTML.

Jautājums, kurš man radās, būtu - a ko darīt, ja lietotājs atnāk uz vietiņu /post/1? Īzī - servera gals atpazīst pieprasītāju pēc HX-Request galvenes esamības un vienā gadījumā atgriež pilnu lapu, citā tikai daļu. To var sakonfigurēt arī servera līmenī, bet tas jau, godīgi sakot, atkal izklausās nedaudz tā kā par daudz. Jo sevišķi, ja mēs runājam par pilnībā statiskām ģenerētām lapām.

Teikšu godīgi - koncepts ir diezgan atsvaidzinošs. Bija patīkami pabakstīt. Savā vienkāršākajā (un noteikti arī sākotnējā) izskatā tas ir gana eleganti, lai varētu parotaļāties arī kādā projektā.

Cik esmu pamanījis, šis ļoti iet pie sirds tiem izstrādātājiem, kuri gadu desmitiem ir ignorējuši webu, ir izlaiduši visus frontendu freimworkus un to regulārās revolūcijas. Jo koncepts ir relatīvi nais.

Diemžēl, braucot dziļāk, parādās kaudze negaidītu partizānu. Jo webs nav tikai saturs te, saturs tur un uzvara. Webā ir milzums dažādu lietu, kuras ir jāprot, jāatbalsta, jāpiedāvā.

Tur ir savi izaicinājumi, ja nepieciešams integrēties ar trešo pušu bibliotēkām. HTMX iegrožo tevi ar HTML pieprasījumiem un atbildēm. Tas tehniski nav pretrunā ar RESTful principiem, bet tomēr citiem prezentāciju medijiem nav īsti gatavs.

<form action="/search" method="POST">
    <input class="form-control" type="search"
        name="search" placeholder="Begin typing to search users..."
        hx-post="/search"
        hx-trigger="keyup changed delay:500ms, search"
        hx-target="#search-results"
        hx-indicator=".htmx-indicator">
</form>

Augstāk redzamajā piemērā ir skaidrs, ka sarežģītība tiek paslēpta aiz ļoti detalizēta deklaratīva HTML papildinājuma. Izliekoties par HTML viņi sarežģī savu un manu dzīvi.

Starp citu, HTMX autori neapstājās pie tā. Viņi izlēma, ka grib arī savu skriptu valodu - Hyperscript. Šis nu gan nemaz nav manā 'iepazīties ar' sarakstā. Bez sarkasma. Nav un nebūs.

<button
    class="button is-primary"
    hx-get="/example"
    _="on click toggle @disabled until htmx:afterOnLoad">
    Do It
</button>

Rezumējot - tas ir mēģinājums deklaritivizēt (tagad būs tāds vārds, ja?) visu, nevis tikai mazu daļu. Man patīk mazās lietiņas, bet nepatīk lielās un sarežģītās. Tam mums jau ir rīki un veidi.

Patlaban mana go-to mazbudžeta bibliotēka dinamiskai (un reaktīvai) dzīvei ir Alpinejs. Jā, arī deklaratīva figņa. Bet vismaz neizliekas par kaut ko, kas tā nav. Tā realizē minimālu iespējamo funkcionalitāti un nemaz ij nedeg būt par kaut ko vairāk.

Starp citu - nevajag padomāt, ka es esmu par kādu vienu veidu kā darīt lietas. Katram savs. Ikurāt tā arī ir mūsdienu daile - daudz dažādas pieejas un veidi kā panākt vienu un to pašu rezultātu. Tas, ka katram no tiem ir savs pūlis ar aizstāvjiem un noliedzējiem, demonstrē dažādību un iespējas.

Tu atbildi augstāk redzamajam komentāram. Atcelt

Gravatar Noisex

24. janvārī, plkst. 15:05

Paga a kas tur jauns pēc būtības? Tad kad vēl aizrāvos ar to un kā reiz AJAX bija topā...varēja darīt to pašu 🙄