Proč se cpe JavaScript na backend?

Re:Proč se cpe JavaScript na backend?
« Odpověď #15 kdy: 29. 01. 2025, 08:21:36 »
> Proč se cpe JavaScript na backend?

Pretože je to dobrá technológia :)

Za 20 rokov som si prešiel asi všetkými mainstreamovými jazykmi a TypeScript je môj obľúbenec [*1] Nepoznám žiadny iný jazyk, ktorý by mal takú vyjadrovaciu schopnosť čo do typov [*2] A od typovej bezpečnosti sa potom odvíja veľa ďalších vecí.

Čo sa týka Node.js:

- Je to dosť rýchle s nízkymi nárokmi na hardvér.
- Event loop model je podstatne jednoduchší a menej náchilný na chyby ako multithreading. Žiadne mutexy, reentrant locky a podobné mozgové cvičenia...
- Vyvýja sa v tom rýchlo. Bez zdĺhavého reštartovania servera a čakania 3 minúty kým Spring povytvára všetky beany a podobne :)

Pre účely backendu pre webovú aplikáciu uprednostním JavaScript (TypeScript) pred všetkým ostatným, možno s výnimkou Rust-u, ale aj to nie vždy.

[*1] Ok, nie je to priamo JavaScript, ale pod JS si dnes už väčšina ľudí predstaví rovno TS.

[*2] Možno Haskell, ale ten má iné nepraktické momenty.


Re:Proč se cpe JavaScript na backend?
« Odpověď #16 kdy: 30. 01. 2025, 12:27:19 »
Bez zdĺhavého reštartovania servera a čakania 3 minúty kým Spring povytvára všetky beany a podobne :)

To zní spíš jako hodně letitá zkušenost s IBM WebSphere nebo něčím podobným. Dnešní Jakarta (dříve Java EE) nebo Spring startují v řádu několika vteřin, kromě toho tu máš věci Quarkus, Micronaut, GraalVM a kompilace do nativního kódu…

A pokud jde o webové aplikace, tak bych doporučil podívat se na Vaadin. Píše se to buď v čisté Javě nebo se tam používají Reactí komponenty. Odpadá tam to trápení se s aplikací rozdělenou na „frontend“ a „backend“ – je to prostě jedna aplikace a to, že část běží na serveru a část v prohlížeči, za tebe řeší framework.

Re:Proč se cpe JavaScript na backend?
« Odpověď #17 kdy: 30. 01. 2025, 13:02:14 »
Dnešní Jakarta (dříve Java EE) nebo Spring startují v řádu několika vteřin

Ten byl dobrej, před víkendem pobavilo.  ;D

Re:Proč se cpe JavaScript na backend?
« Odpověď #18 kdy: 31. 01. 2025, 08:25:49 »
Citace
To zní spíš jako hodně letitá zkušenost s IBM WebSphere nebo něčím podobným.

Áno, v tomto máte pravdu. Sú to už roky, čom som naposledy robil Javu a Spring. Veci sa možno zlepšili. Tak či tak, TypeScript + Node.js nie je zlá voľba a v mnohých prípadoch je to pravdepodobne výborná voľba.

Re:Proč se cpe JavaScript na backend?
« Odpověď #19 kdy: 31. 01. 2025, 11:05:04 »
Dnešní Jakarta (dříve Java EE) nebo Spring startují v řádu několika vteřin
Ten byl dobrej, před víkendem pobavilo.  ;D
Já nevím, čistý spring boot startuje na mém kancelářském notebooku 0,6 sec. Většinu času v reálných aplikacích zabere inicializace konexí na subsystémy a to trvá přibližně stejně bez ohledu vývojový jazyk a stack.


Re:Proč se cpe JavaScript na backend?
« Odpověď #20 kdy: 31. 01. 2025, 15:56:27 »
A pokud jde o webové aplikace, tak bych doporučil podívat se na Vaadin. Píše se to buď v čisté Javě nebo se tam používají Reactí komponenty. Odpadá tam to trápení se s aplikací rozdělenou na „frontend“ a „backend“ – je to prostě jedna aplikace a to, že část běží na serveru a část v prohlížeči, za tebe řeší framework.
Tohle se zkouší pořád dokola (dřív to byl třeba GWT). Ono to totiž zní moc hezky. Jenže ta abstrakce, která umožňuje nerozlišovat (a nedovoluje rozlišovat) mezi "frontend" a "backend", se nakonec vždycky při složitějším použití začne sypat...


Re:Proč se cpe JavaScript na backend?
« Odpověď #22 kdy: 02. 02. 2025, 22:41:48 »
Za 20 rokov som si prešiel asi všetkými mainstreamovými jazykmi a TypeScript je môj obľúbenec [*1] Nepoznám žiadny iný jazyk, ktorý by mal takú vyjadrovaciu schopnosť čo do typov [*2] A od typovej bezpečnosti sa potom odvíja veľa ďalších vecí.

Statický typing v TS je fajn, sám ho obľubujem, avšak funguje len v compile-time, naopak runtime typescriptovým typom nerozumie nedá sa s typescriptovými typmi pracovať za behu napr pomocou reflexie, takže pri programovaní cítim , že ten strong typing je len umelo dolepený na inak veľmi weak typed jazyk. Ešte som sa nestretol v inom jazyku s takou veľkou schyzofréniou ako pri TS. A toto je obrovský nedostatok. Aj keď uznávam že iná možnosť ako dolepiť typy na JS ani nebola. Dnes už naštastie existujú technológie ako Blazor a Bolero postavené nad WASM a tam už je prítomný plnohodnotný staticko-dynamický typing.

Čo sa týka vyjadrovacej schopnosti také C++ 23 je ešte dalej (aj keď uznávam že tu trošku porovnávam hrušky s jablkami). C++ má ďaleko pokročilejší typový systém. TS generics sú oproti C++ templatom (halvne v oblasti metaprogramovania) len vtip, ale pre širokú komunitu vývojárov sú na druhej strane generics ľahšie na pochopenie a naučenie. Takže všetko má svoje pre a proti.

Re:Proč se cpe JavaScript na backend?
« Odpověď #23 kdy: 02. 02. 2025, 22:52:43 »
Proč se cpe JavaScript na backend?

pretože isomorfné aplikácie umožňujú zdielať jeden kód medzi frontendom a backendom. takže môžem rovnaké triedy, funkcie a libky používať na frontende aj backende.

Re:Proč se cpe JavaScript na backend?
« Odpověď #24 kdy: 02. 02. 2025, 22:59:06 »
Javascript a švábi (album)

kryl - dekuji, za cecko dekuji, jenz nauci me pili.

Re:Proč se cpe JavaScript na backend?
« Odpověď #25 kdy: 02. 02. 2025, 23:26:24 »
Asi mi něco uniká, já jsem nikdy ten boom JS na backendu nepochopil. Nedokážu si představit, jak by na něm fungovaly moje projekty. Dělám e-shopy a mám tam plno blokujících operací, např.:
- Čtení a generování velkých XML/Excel dat (stovky tisíc produktů)
- Následné zpracování (dost často plnohodnotným ORM)
- Různé prasárny, kde se porovnávají obrovská pole atd. I těch rychlejších CPU operací je stejně hodně a podle mě se to nasčítá.

Jestliže celou administraci bude obsluhovat jedno vlákno, bude se to vzájemně blokovat a nebo budu každou blbost explicitně pouštět ve vlastním workeru a v tom případě mi to celé přestává dávat smysl, ne? A vůbec jsem nezmínil, že bych teoreticky mohl kvůli procesům na backendu blokovat dokončení objednávky zákazníkem - shop bych asi provozoval na samostatné instanci.

Pak jsem vůbec nepochopil, že ten boom začal v době, kdy se ještě moc nepoužíval TS. Bez typů je to krok zpět.

Re:Proč se cpe JavaScript na backend?
« Odpověď #26 kdy: 03. 02. 2025, 09:43:53 »
Citace
Statický typing v TS je fajn, sám ho obľubujem, avšak funguje len v compile-time, naopak runtime typescriptovým typom nerozumie nedá sa s typescriptovými typmi pracovať za behu napr pomocou reflexie

V TypeScript-e som takéto reflexie nikdy nepotreboval. Veci tam do seba pekne zapadajú už v compile time vďaka vlastnostiam ako discriminated unions alebo type predicates. Môj názor je presne opačný - ak potrebujem reflexie, aby som v runtime zistil typ objektu, tak je to nedostatok daného jazyka (prípadne nevhodný návrh kódu). TypeScript je pre mňa dôkaz, že sa to dá urobiť bez reflexií, jednoducho, čitateľne a v compile time.

Citace
C++ má ďaleko pokročilejší typový systém.

V C++ nie som až taký zbehlý, ale toto tvrdenie sa mi nepozdáva :) Áno, moderné C++ už má veci ako std::variant a std::optional, ale aj tak potrebujem často používať napr. static_cast a aj tak nakoniec nevyjadrím všetko to, čo by som vyjadril v TypeScript-e. Navyše, kým takýto kód v TypeScript-e je jednoduchý a čitateľný aj pre juniora, porovnateľný kód v C++ vyzerá ako dizertačná práca z matematiky a vyžaduje roky praxe. A to ani nehovorím o kryptických build erroroch, ktoré template-y produkujú.

Citace
Jestliže celou administraci bude obsluhovat jedno vlákno, bude se to vzájemně blokovat a nebo budu každou blbost explicitně pouštět ve vlastním workeru a v tom případě mi to celé přestává dávat smysl, ne?

Práve v tom je krása event loop-u, že sa to blokovať nebude. Z pohľadu programátora (aplikačného kódu) dokáže jedno vlákno obsluhovať množstvo "paralelných" requestov. Je to vďaka async/await syntaxi. Jasné, že na pozadí sa blokujúce operácie (čítanie/zápis na disk...) udejú v samostatných vlákach, aby sa využil potenciál viacerých jadier. Aplikácia to však nevidí a programátor môže existenciu vlákien úplne abstrahovať. Jedinou výnikou je, ak máte dlhú časť kódu bez await a skutočne začnete blokovať vlákno. Vtedy tam stačí niekde dať await a je to vyriešené. Za mňa výborný trade-off.

Re:Proč se cpe JavaScript na backend?
« Odpověď #27 kdy: 03. 02. 2025, 12:19:44 »
Pokud udelate na backendu microservisovou architekturu, tak neni problem treba nejakou tu servicu naimplementovat v javascriptu.

Neříkám, že to neni možný. Ale mít to v jednom jazyce má své výhody. Pokud se podíváme na monolit s modulama, upravíme v nějakym modulu něco, co ovlivní jinej, automaticky nám zařve statická analýza. Uplně stejně na tom je multirepo, alespoň v jazycích, co umí podprojekty, jako jazyky nad jvm a .net. Když se teď přesunem k mikroservisám, který jsou vyloženě v samostatnejch projektech, už to nebude tak jednoduchý, ale furt můžeme mít v samostatnym projektu kontrakty mikroservisy X a to si přidat jako závislost do mikroservisy Y. Ale už nám tu roste komplexita, musíme všude updatnout závislosti, testy integrací mezi jednotlivými mikroservisami jsou také podstatně složitější, než když máme monolit nebo mikroservisy v multi project repu. A pokud ještě použijem u mikroservisy X jinej jazyk než u ostatních mikroservis, bude to ještě pracnější.

Nechci říct, že mít mikroservisu ve vlastnim repositáři je vdžycky špatně, nebo mít že je vždycky špatně mít mikroservisy psaný v jinejch technologiích. Ale chci poukázat na to, že přicházíme o jednoduchost. Takže by člověk měl dobře vědět, co dělá, když tu jednoduchost zahazuje. Myslim si, že by měl bejt podstatnej důvod, proč to udělat.

Re:Proč se cpe JavaScript na backend?
« Odpověď #28 kdy: 03. 02. 2025, 14:52:44 »
Aby si Javascript pisici koderi mysleli ze programuji ;-)

Re:Proč se cpe JavaScript na backend?
« Odpověď #29 kdy: 03. 02. 2025, 19:52:46 »
Práve v tom je krása event loop-u, že sa to blokovať nebude. Z pohľadu programátora (aplikačného kódu) dokáže jedno vlákno obsluhovať množstvo "paralelných" requestov. Je to vďaka async/await syntaxi. Jasné, že na pozadí sa blokujúce operácie (čítanie/zápis na disk...) udejú v samostatných vlákach, aby sa využil potenciál viacerých jadier. Aplikácia to však nevidí a programátor môže existenciu vlákien úplne abstrahovať. Jedinou výnikou je, ak máte dlhú časť kódu bez await a skutočne začnete blokovať vlákno. Vtedy tam stačí niekde dať await a je to vyriešené. Za mňa výborný trade-off.
Nojo, jenže ten, na koho reaguješ, právě popisoval situaci, kdy "hodně počítá", tj. to vlákno se nefláká a nečeká na I/O, ale opravdu něco počítá - a takových vláken dokonce má víc než jedno. A v tu chvíli najednou nestačí "niekde dať await a je to vyriešené".