Díky za článek. O HTMX sice vím, ale ještě jsem se nedostal k tomu jej více ošahat. Jinak ještě sleduji projekt MAVO s podobnou ideou.
Osobně jsem ale u sebe (zatím) nepřekonal předpojatost, že se (větší?) projekty lépe udržují v javascriptu (rozkouskování na menší funkce/komponenty alá React JS). Také už docela dost nasazujeme Webové komponenty, což zase také „mění hru”.
htmlx a jeho předchůdce intercooler.js jsem si docela oblíbil. Použíme pro generování reportů a dashoboardů, dříve se to dělalo jako xlst nad xml, dneska jich část máme v htmlx. Výhoda je statická validace, snadné vykreslování a možná interaktivita.
Docela dobře to jde integrovat s elasticem nebo grafanou a dělat automatické status stránky pro aplikace/servery s vnořenými grafy.
Nevýhoda je vlastní syntaxe a tím nepodpora vyhledávačů a crawlerů, dělat v tom tedy běžný web se moc nedá, dělat v tom ale administrace či jiné věci může dávat smysl, tam jsou ale k dispozici daleko pokročilejší frameworky.
Co se týče nepodpory vyhledávačů etc, v čem se to liší oproti SPA?
Naopak si dovedu dobře představit, že když přijde js request, tak se vrátí fragment, když přijde normální click, tak to vrátí novou stránku. Mě to přijde elegantní a přímočaré.
Ale reaguji na základě zběžného seznámení. Třeba je tam nějaká past, která mi uniká.
ale jak crawler pozná, že má klikat na elementy, které mají nějaký atribut hx-*? Musí spustit JS a proklikat si vše, nepozná ani adresu, kam odkaz směřuje, což je běžný způsob podle čeho se vytváří plan tree pro crawler. Je to pro ně neviditelné.
Ano, i u SPA to je problém, ale občas to nějak řešit jde, tohle je ale o dost jednodušší než jaké se dělají SPA a řešitelný to za mě není.
tak si to vyzkoušej :).
Ano, sitemapa pomůže, ale pak ti budou chybět interní prolinky mezi stránkami, což je opět obrovský problém, v sitemapě prolinky a vazby neuděláš.
No, spouští JS, jak se to vezme. Google je asi nejdál, ale spíše než spouští, tak snaží se ho interpretovat a umí jen subset, však to mají popsané https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics a není to krátký návod. Ostatní vyhledávače tak daleko nejsou, bing, seznam jsou v háji, nejde jen o vyhledávače, ale třeba dneska jsou populární různé služby pro analýzu zpětných odkazů, kontrolu správnosti webu a linků, ty také selhávají.
Htmlx není pro SEO určený, nejspíš se to tam dá nějak dodělat, ale tím přicházíš o hlavní výhody htmlx a je pak asi lepší jít do frameworku, který tu podporu má už sám.
K čemu potřebuju prolinky mez stránkami? Já jen chci, aby po zadání dotazu do Googlu našel např. odpovídající produkt nebo FAQ s řešením problému. Problém se subsetem JS nemám, a jestli ho ostatní (marginální) vyhledávače neumí, tak jim napiš bug. S těmi analyzátory SEO nemám dobré zkušenosti, skutečné problémy jsou pro mě jen to, co hlásí Google konzole.
wtf? Tvrdit, že interní linky nepotřebuješ a že ty stačí, jen aby to google správně našel je takový trochu velký protiklad.
Ty se subsetem JS sice problém nemáš, ale htmlx ho má, o čem se tedy bavíme? Přes htmlx neprojde ani Google, tak prosím začni s hlášením bugu tam.
Mluvím třeba o ahrefs.com, poskytuje údaje, které v Google console nenajdeš.
vzájemná provázanost stránek má výrazný vliv na to, jak tě např. Google bude upřednostňovat, mít vysokou pozici na stránce, na kterou nevedou žádné vnitřní odkazy je prostě dost obtížné až nemožné v konkurenčních výrazech.
K čemu ti je pak htmlx, když budeš mít vše v html a nebudeš nic stahovat přes jeho funkce?
Neco podobnyho uz dela v js knihovne jQuery $.get(), pripadne taky fetch API a je to jen o trosicku slozitejsi na pouziti (nasledna prace s DOM). Je teda pravda, ze je tam trocha programovani v js, kdezto tady jsou pridany nove atributy do html...
právě, tím, že je to vlastně "součást HTML" je to zaprvé průchozí pro víc lidí a zadruhé si tvůrci HTMX myslí (a já souhlasím), že do HTML doplňují něco, co tam mělo být od začátku. Přece i normální [a href] nebo [img] nikdo netahá přes JS, ale je to přímo součást hypertextu*.
* no vlastně některý frameworky to takto tahají všechno a skládají si i "statickou" stránku programově. co na to říct...
rozdíl v imperativním vs deklarativním stylu. Výslednou stránku v htmlx mohu snadno přes xsd zvalidovat, že neobsahuje syntax chyby, že má potřebné elementy, tj. základní validace při generování. Naproti tomu kód v jQuery $.get() nejsem schopný vůbec snadno validovat, musím ho spustit a výsledek nějak porovnávat, v tom je pak v praxi obrovský rozdíl.
To s sebou nese i další výhody pro práci v týmu, htmlx má vlastní dokumentaci a slovník, je jasně určen způsob jak co dělat, znalosti jsou lépe přenositelné, naproti tomu s jQuery $.get() musím vytvářet nějaká vlastní pravidla jak má kód vypadat, zaučovat to, vysvětlovat to, prostě práce navíc. Když jsi sám, je to jedno, když máš tým, který se občas mění, je to velká nevýhoda.
Nie je jednoduchsie proste za pomoci jquery zavesit event handler na prislusny element napr. $('button[hx-post]').trigger(...) a potrebne udaje z relevantnych aributov ziskat zase cez jquery? Bude to stale deklarativne, validovatelne proti scheme a bez mnozstva zbytocneho kodu ktory sa nepouzije. JQuery je modularne, mozete si buildnut custom verziu, kde nepotrebne moduly vynechate...
Co to melies?
krom include par js suborov v html kode nemusi byt ani ciarka JS kodu. To je vdaka selektorom normalna vlastnost JQuery. To ze v prikladoch v dokumentacii je spolu s HTML, nie je podmienka, je to len nazornejsie pre pomalsie chapajucich. Tolko k deklarativnosti.
pre validaciu html rozsireneho sa pouzije vlastna schema, ta tam bude musiet byt aj v pripade HTMX. Pripadne je mozne pouzit pre atribut prefix "data-<my attr name>" to je validne v standartnej scheme.
Proč by se měla používat jQuery, když se to dá dosáhnout pomocí document.querySelector? https://jsfiddle.net/a9djyksz/
Tady se výjimečně musím dw zastat - HTML bude vypadat úplně stejně, jen místo jednoho script tagu s htmlx budou dva (jeden jquery a jeden s custom skriptem) a u tagů ubudou hx- atributy (místo nich to tan navěsí a bude handlovat ten custom skript).
Teda co se týče deklarativnosti a validovatelnosti. Že je to jednodušší bych se tvrdit neodvážil...
To zalezi na tom aka jednoducha bude aplikacia. V pripade jquery a vlastnej extension (ktoru sice lopata nenapise) bude HTML jednoduchsie, pretoze chovanie specificke pre aplikaciu popisem v extension a chovanie specificke pre element bude popisane v atributoch elementu. Naproti tomu v pripade HTMX bude treba v elementoch deklarovat aj chovanie specificke pre aplikaciu, spolu s chovanim specifickym pre elementy...
No, takováhle je obvyklá praxe. Rozdělíš si aplikaci na deklarativní "počůrávání kódu", a pak to počůrávání oživuješ pomocí javascriptu. To je skvělá a známá věc o tom žádná. Ale HTMX jde dál. Tam jsou předem známé značky, a ty žádný javascript nemusíš psát. Což znamená, že ta validace má mnohem větší váhu, než nějaký vlastní řešení, který si kolega junior zpatlal.
Preveze nie, XSD a extension pre jquery napise senior, ktory bude mat na starosti zrejme aj backend. Tym patlal koder dostane do ruky sadu, ktora sa bude chovat presne definovanym sposobom.
Naproti tomu v pripade HTMX dostane nastroj, ktorym bude ohybat HTML elementy, bez toho aby vobec tusil co pacha.
Vyhoda HTMX je jedina, umoznuje aby lopaty, ktore nedokazu definovat XSD ani pisat slusny javascript, nadalej vyzerali ako seniori, i ked si svoju poziciu neyasluzili svojimi vedomostami ale len tym ze prasili 3 roky kod.
Udělal jsem si podle prikladu jednoduchou stranku
<html> <head> <meta charset="utf-8"> <title> HTMX - elementary example </title> <script type="text/javascript" src="js/htmx.min.js"> </script> <link rel="icon" type="image/x-icon" href="/HTMX/favicon.ico"> </head> <body> <button hx-post="cgi-bin/answer" hx-trigger="click" hx-target="#answer-div" > Retrieve answer! </button> <div id="answer-div"> Tady by se měl načíst seznam souborů </div> </body> </html>
ale pri zmacknuti tlacitka se nic nedeje, stranka (podle wiresharku) neodesle na server zadny request. V developer konzoli F12 mi to ukazuje chybu:
Uncaught SyntaxError: expected expression, got '<'
co muze by spatne?
Este k tym HTML metodam. Problem nie je ich absencia.
Daleko vacsi problem je ze sa casto nespravne pouziju. Prilis casto vidim kod typu <a href="/article/delete?id=12345">Zmazat</a>
. Ak na to pustite crawler ktory ma nejaky JS na haku a HTMX atribut ze ide o post duplom, tak zacne riadna komedia. Toto je bohuzial dost caste aj v kode od cloveka ktory sa oznacuje ako senior.
27. 11. 2022, 17:02 editováno autorem komentáře
Vy skutocne nemate ani len tusenie o co go... Anchor ma standartnu metodu GET, ktory nesmie modifikovat udaje na servri, k tomu je urceny POST (DELETE, PUSH, etc...) ktory si preto crawlery nevsimaju. Pre posielanie dat na server, ktore nejakym sposobom menia stav na servri je urceny form, ktory ma metodu post, ktora je dostatujuca.
Ak to viete, tak vasa otazka nejako postrada zmysel, malo vam to byt jasne z postu ktorym toto vlakno zacinalo. Ibaze by ste chcel prudit, ale kedze mam dnes dobru naladu a chcem verit v dobre umysli ludi, tak budem predpokladat ze nie ste trol ale len jednoduchsi jedinec...
28. 11. 2022, 15:08 editováno autorem komentáře
vlakno jste zacal tako: "Este k tym HTML metodam. Problem nie je ich absencia. Daleko vacsi problem je ze sa casto nespravne pouziju".
Predpokladam, ze jste myslel HTTP metody a ty proste v HTML podporovany vsechny nejsou, takze to lidi ruzne prasi tim GETem, ktery vlastne ve skutecnosti dela DELETE. A to je primy dusletek jejich absence v HTML, ktery se HTMX snazi resit (a neni to samozrejme jedine mozne reseni).
Ved to, nie su shopny pochopit rozdiel medzi GET a POST, naviac im k tomu pridame DELETE, ktore sa pohodlne da realizovat skrz POST? Naviac DELETE realizovane cez HTMX bude DELETE len v pripade ze bude povoleny JS, inak roboty indexujuce web budu stale vidiet GET. Tak tomu sa hovori pokrok... :D
28. 11. 2022, 21:27 editováno autorem komentáře