Blazor je framework na vytvaranie Single Page Aplikacii v C# bez javascriptu. Nedavno prebehla konferencia pre vyvojarov .NET Conf: Focus on Blazor, kde sa venovali vyhradne tomuto:
Funguje podobne ako React alebo Angular - generuje virtualny DOM, detekuje na nom zmeny a tie synchronizuje s browser DOMom. Z pohladu vyvojara si zobral Blazor to lepsie z oboch.
Blazor vie ale bezat cisto na servery, kde si zije VDOM a zmeny posiela cez websockety do browsera. Toto je v .NET Core 3 oficialne vydane a mozete to pouzivat v produkcii.
Niekedy v maji ma vyjst verzia, ktora bude bezat cisto v browser vo WebAssembly. Inicialny bundle mam mat 1.5MB co zahrna .NET runtime (0.5MB) a pribalene kniznice (razor, routing, httpclient, etc…) a samozrejme aplikaciu. Nieje to malo, ale na druhej strane to nieje to iste ako 1.5MB javascriptu, lebo to netreba parsovat a kompilovat, takze sa usetri nejaka sekunda. Navyse server side prerendering je ovela jednoduchsi ako v Reacte alebo Angulari.
Pre mna je revolucny ale Server Side Model (I ked podobne pokusy tu uz boli), pretoze tam je ta produktivita najvacsia:
Nielenze sa nahradil javascript C#-om a vsetko je typesafe, ale
usetri sa cela komunikacna vrstva (webapi) a to hned 2x: webapi/swagger na serveri a k tomu prislusny kod na klientovi.
Netreba srotit typescriptove definicie, parsovat JSON a serializovat DTOcka do JSONu, atd.
Netreba riesit bundle size a lazy loading, minifikaciu, atd… -> Mimoriadne vhodne na funkcne velke projekty
Nehovoriac o tom, ze cely development stack sa vyrazne zjednodusi. Proste odpadne prakticky vsetko z FE, okrem mozno nejakeho boostrapu, alebo component toolkitu,
Publishol som pre vas server-side Blazor aplikaciu: https://blazorapp220200121030557.azurewebsites.net/, mozete si na vlastnej kozi vyskusat to “lagovanie” sposobene tym, ze to bezi na serveri a nie na klientovi. Mimochodom, server ma 1 CPU Core a 1GB ram a bezi na nom este dalsia website.
Mimochodom, vsimite si velku podobnost WebForms a Blazor co sa tyka sposobu vyvoja. WebFormsove aplikacie su mimoriadne vhodne na modernizaciu pomocou Blazor. Prakticky budete len prepisovat .aspx na razor syntax a to sa po case stane rutinou.
Len menší detail, komplet Blazor nestihli dokončiť do .net core 3 (tu je len jeho Server part), full je súčasťou až .net core 3.1 (teda ten webassembly aj to v preview verzii)
Blazor Server is supported in ASP.NET Core 3.0. Blazor WebAssembly is in preview for ASP.NET Core 3.1.
Blazor Server Side bol planovany do .NET Core 3.0 a Blazor WebAssembly nikdy nebol planovany do .NET Core 3.0. Okrem toho pracuju este aj na Blazor PWA, Blazor Electron (ma k dispozicii full .NET Core a teda pristup k OS) a Blazor Mobile (Xamarin - v principe to iste ako React Native, ale s lepsim pristupom k nativnym API).
Naschval som hovoril o Blazor Server Side. WebAssembly mod ma zatial az tak nezaujima.
Vidíš a to ma zaujíma. Blazor Server Side a Blazor WebAssembly sú dve nezávisle technológie, alebo vies povedať, že tohto užívateľa porieš cez server side a tohoto spracuj cez webassembly? To znamená, že napíšeš jeden kód a to ako sa renderuje je len nejaký prepínač.
Nieje to len prepinac, urcite to treba minimalne skompilovat 2x. Su to dva diametralne odlisne pristupy. Pri ServerSide nemusis riesit komunikaciu s prehliadacom, cize ziadne webservicy a podobne. Velmi, naozaj velmi to pripomina WebForms development, akurat ze user experience je niekde uplne inde.
Ale moznoze bude existovat v Blazor WebAssembly nejaky fallback, ked sa to prepne do server modu - neviem. Kazdopadne prerendering to podporuje
Vidíš a to ma zaujíma. Blazor Server Side a Blazor WebAssembly sú dve nezávisle technológie, alebo vies povedať, že tohto užívateľa porieš cez server side a tohoto spracuj cez webassembly?
Vies zdielat razor kompoenenty medzi Blazor Server a WebAssembly (ako razor kniznice).
“Server side Blazor” som planoval pouzit na jeden COVID projekt, ale nakoniec s toho zislo, za pol hodinu som mal naprotypovany “online excel” a vdaka technologii je tam realtimovost uplne zadarmo a vyvja sa v nom naozaj richlo.
Co sa tyka Blazoru WebAssembly, tak ma prakticky zachranil pred javascriptom, v ktorom su niektore veci naozaj bolestive (moj blog k tomu Ako ma zachránil Blazor). Dufam, ze v nom budem mat viac projektov.
Ano, tu realtimeovost pri server side modely mam sam vyskusanu a je to velka vyhoda bez namahy, ci uz ide a realtime zobrazovanie zivych dat, logov z backgroud procesu, alebo kooperacia viacerych uzivatelov.
Mimochodom, prepinanie medzi server side a webassembly je mozne. Ja mam jednoducho nareferencovany webassembly projekt v server side projekte a ked to zbuildujem, mam dva vystupy.
Ja ale na intranetove business aplikacie silne preferujem server side model, lebo cas potrebny na vyboj server side a nasledne prioadne prerobenie do webassembly je len o malo vacsi ako rovno to pisat vo webassembly, ale mozna uspora je obrovska, odhadom cca 25%
@vlko: toto by sa vam hodilo na finstat, nie? daj vediet, keby ste chceli s tym pomoct
To je komplikovane. Obsah u nas je staticky, lebo main trafic zdroj je z googlu, plus musis podporovat IE9, lebo par ludi, co si za sluzby platia ho este pouzivaju. A primarne to chces mat ako staticku stranku prave kvoli google a prepisat vsetky tie kvanta views na blazor by mi uz nikto nedovolil (len konverzia na .net core trvala cez 4 mesiace).
Co sa tyka casti, co su SPA a take mame, tak tam to klasicky robime cez Angular, mame ich uz asi 4 a tam potrebujes komponenty na vizualizaciu a neviem v akom stave su komponenty pre blazor, ale par rokov asi este potrva, kym sa vybuduje cely ekosystem, aby to postacovalo.
Teda migrovat asi nebudeme a o par rokov sa to uz ani neoplati:)