SlideShare una empresa de Scribd logo
1 de 30
Biglietti
d’Auguri
Natalizi
con Blazor
Nicolò Carandini [MVP]
@tpcware
n.carandini@outlook.com
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Agenda
WebAssembly alla riscossa
ASP.NET Blazor
• A cosa serve e come si usa
• Demo
• Crash course
• Demo
JavaScript come unico linguaggio Web
• Performance e criticità
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
JavaScript
• Insieme a HTML e CSS, è
una delle tre tecnologie
principali del World Wide
Web.
• JavaScript abilita le pagine
Web interattive e quindi è
una parte essenziale delle
applicazioni web.
• La stragrande maggioranza
dei siti Web lo utilizza e tutti
i principali browser Web
hanno un motore JavaScript
dedicato per eseguirlo.
HTML
Style
Sheets
HTML
Parser
CSS
Parser
DOM
Tree
DOM
Style
Rules
Render
Layout
Render
Tree
Paint
JavaScript JS VM
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
JavaScript
performance
1995
Javascript viene eseguito
nei web browser come
linguaggio interpretato.
2008
Google introduce Google
Chrome col suo JavaScript
engine V8, che utilizza il
Just in Time Compiler (JIT).
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Good, but not enough!
L’incremento delle prestazioni di JavaScript
è uno degli elementi cardine per la creazione
di applicazioni Web complesse.
Ma questo non è ancora sufficiente perché:
• Rimane forte l’esigenza di poter utilizzare
altri linguaggi ed altri framework.
• I tempi di parsing del codice JavaScript e di
ottimizzazione del codice sono penalizzanti
in alcuni scenari di grafica 3D, V/A Reality e
più generalmente di calcoli intensivi.
• Specialmente nei device mobili non sempre
sono disponibili le risorse necessarie
all’esecuzione ottimale di JavaScript.
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Un’alternativa a
JavaScript
Prima di HTML5 ci sono stati molti
tentativi di creare degli strumenti
che si imponessero come standard di
fatto per creare applicazioni Web,
tutti falliti perché ogni azienda aveva
la sua specifica proposta,
incompatibile con le altre.
Microsoft già dal 1999 parlava di
Rich Client App, ma fu Macromedia
nel 2002 a coniare il termine
RIA – Rich Internet Application.
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
La guerra ai plugin
Uno dei difetti più noti dei vari metodi
per la realizzazione delle RIA consisteva
nella necessità di utilizzare i famigerati
plugin, che determinavano problemi di:
• Compatibilità coi diversi web browser
• Consumo risorse
• Introduzione bug
• Falle di sicurezza (soprattutto con Adobe Flash)
L’uso di plugin per l’esecuzione di framework esterni
termina nel 2014 con l’avvento di HTML5.
www.google.com/googlebooks/chrome
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
WebAssembly
alla riscossa
E’ uno standard W3C sviluppato
con il contributo di Mozilla, Apple
e Microsoft.
Consente l’uso di linguaggi diversi
da Javascript per generare codice
compatto, portabile ed
estremamente veloce.
E’ molto recente, visto che la prima
versione è di marzo 2017, ma è già
supportato da tutti i maggiori
browser.
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Formato WASM
WASM è il formato
binario di WebAssembly,
che contiene codice di
basso livello (molto vicino
al linguaggio macchina)
che può essere parsato,
compilato ed eseguito in
modo estremamente
veloce in tutti i web
browser che lo
supportano.
S-Expression assembly bytecode
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
WASM toolchain
Vi sono diversi strumenti
per la scrittura e
compilazione di codice
WASM, anche online,
tutti basati sulla LLVM
toolchain e il suo
linguaggio intermedio IR.
ToolchainWebBrowser
LLVM
Optimizer
x86
WASM
LLVR IR LLVM
x86 Backend
LLVM
Wasm Backend
Clang
Frontend
Rust Rustc
Frontend
C / C++
HTML
WASM
JavaScript
JS VM
DOM
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Utilizzare WASM
I moduli WASM vengono
caricati tramite JavaScript.
Le funzioni marcate con
Export sono richiamabili
da Javascript.
All’interno dei moduli
WASM è possibile
importare ed utilizzare
funzioni Javascript.
JavaScriptWASM
1 2
3
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Rust
Rust è sintatticamente
simile a C ++ ma con una
migliore sicurezza nella
gestione della memoria e
della concorrenza, per
evitare i classici problemi
del C++ by design,
mantenendone le
prestazioni.
Per chi vuole sperimentare:
1. Installare Rust da
https://www.rust-lang.org/tools/install
2. Aggiungere il target WASM col comando:
>rustup target add wasm32-unknown-unknown
3. Installare le estensioni RUST e WASM
in VS Code.
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Demo WebAssembly
Da C a WAT / WASM da S-EXPR a WASM Uso di WASM e JavaScript
in una pagina HTML
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Single Page Application
Vi sono diversi framework per la
realizzazione di applicazioni SPA,
come Angular, React, Vue e molti
altri, tutti basati su JavaScript.
Se solo fosse possibile utilizzare
C# e .NET…
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
.NET
per le Web App
Il team di Xamarin ha
sviluppato una versione di
Mono compilata in
WASM.
In questo modo è
possibile eseguire codice
.NET nei Web browser
che supportano
WebAssembly.
Mono runtime | C Library
LLVM bitcode
C# assemblies
clang
-target=wasm32
mono
-aot=llvmonly
Index.wasm
Index.js browser
mono – wasm
(bitcode -> wasm)
mono.wasm
load, compile
+ rum main()
load
metadata
(runtime)
libc
syscalls
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
JIT Vs. AOT
Mono-wasm può essere
eseguito in due modalità:
• Interpretato (JIT)
• Compilato (AOT)
COMPILATOINTERPRETATO
Runtime(inBrowser)Devtime
C# / Razor source files
C# / Razor source files
YourApp.dll
YourApp.dll
netstandard .NET
assembly files
mono.wasm
WebAssembly binary
executed natively
YourApp.wasm
WebAssembly binary
executed natively
mono.wasm
WebAssembly binary
executed natively
Browser APIs
visible DOM,
HTTP requests, etc.
Browser APIs
visible DOM,
HTTP requests, etc.
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Browser + Razor = Blazor!
Utilizza tecnologie web standard
come HTML e CSS, ma con C# e la
sintassi Razor al posto di JavaScript
per creare una Web UI basata su
componenti riutilizzabili.
Creato da Steven Sanderson
autore di Knockout, uno dei primi
framework JavaScript per realizzare
applicazioni SPA, da febbraio 2018 è
stato inserito (come esperimento) in
ASP.NET.
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Blazor Workshop
Setup iniziale:
• .NET Core  2.1
• Visual Studio 2017 (dalla
versione 15.7 in poi)
• Blazor Language Services
extension dal Visual Studio
Marketplace
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Demo: Blazor Hello World
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Web UI basata su
componenti
Un componente rappresenta
un elemento della UI, come una
pagina, un dialog, un tabset, o un
data entry form.
In Blazor, un componente è una
classe .NET, che può essere scritta a
mano (un file .cs) o più comunemente
tramite una pagina di markup Razor
(un file .cshtml).
I componenti possono essere
nidificati, riutilizzati e condivisi tra
progetti.
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
BlazorComponent class
La UI del componente è definita
tramite HTML.
La logica di rendering dinamico viene
aggiunta con la sintassi C# di Razor.
Quando un’applicazione Blazor viene
compilata, il tutto viene convertito in
una classe C# di tipo BlazorComponent.
Il nome della classe generata
corrisponde al nome del file .cshtml.
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Component members
Le proprietà e i metodi della classe sono definiti all’interno di uno o più
blocchi @functions.
Le proprietà possono essere referenziate utilizzando nomi C# che
iniziano con @.
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Component
composition
Un componente può
essere utilizzato
all’interno di altri
componenti come un
qualsiasi elemento HTML.
Ad esempio, per usare un
componente di nome
AppFooter, basterà
inserire <AppFooter />
nel codice HTML.
AppFooter.cshtml
Index.cshtml
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Component
parameters
I componenti possono avere
dei parametri definiti
utilizzando proprietà private
della classe decorate con
l’attributo [Parameter].
Tali parametri vengono
valorizzati con attributi di
markup in HTML.
E’ anche possibile definire
un parametro di tipo
RederFragment che viene
valorizzato con il contenuto
dell’elemento di markup.
AppFooter.cshtml
Index.cshtml
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Binding
Il data binding tra
componenti ed elementi
DOM viene definito
mediante l’attributo bind.
La UI viene aggiornata
solo quando viene fatto il
rendering del componente,
non quando la proprietà
cambia valore.
binding
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Event handling
Ogni attributo di elemento
HTML di nome on<event>
(onclick, onsubmit) il cui
valore è di tipo delegate, è
utilizzato da Blazor come
un event handler.
Per alcuni eventi sono
disponibili gli event
arguments (UIEventArgs,…)
E’ possibile utilizzare anche
le espressioni lambda.
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Demo: Blazor Xmas Cards
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Caratteristiche di Blazor
• Un component model per costruire una Web UI basata su componenti
• Routing
• Layouts
• Forms and validazione
• Dependency injection
• JavaScript interop
• Live reloading nel browser durante lo sviluppo
• Server-side rendering
• .NET debugging sia nel browser che nell’IDE
• Pieno supporto a IntelliSense e ai tool di sviluppo
• Capacità di girare su vecchi browser via asm.js
• Publishing e minimizzazione del codice eseguibile
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Riferimenti
Documentazione ufficiale
blazor.net
Sito GitHub
github.com/aspnet/Blazor
Gitter channel
gitter.im/aspnet/Blazor
Blazor: a technical introduction
blog.stevensanderson.com/2018/02/06/blazor-intro
Experimenting with Blazor
blog.tpcware.com/2018/03/experimenting-with-blazor
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Grazie per la vostra
attenzione 
Nicolò Carandini
n.carandini@outlook.com
@TPCWare

Más contenido relacionado

La actualidad más candente

Progettare in Team per il Responsive Web Design
Progettare in Team per il Responsive Web DesignProgettare in Team per il Responsive Web Design
Progettare in Team per il Responsive Web DesignSalvatore Paone
 
Mob01 mobile services e webapi
Mob01   mobile services e webapiMob01   mobile services e webapi
Mob01 mobile services e webapiDotNetCampus
 
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...Andrea Balducci
 
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache CordovaMulti-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache CordovaAndrea Dottor
 
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
2015.04.23 Azure Community Bootcamp 2015 Keynote ItalyMarco Parenzan
 
Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...
Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...
Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...Codemotion
 
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...Codemotion
 
Introduzione a Service Fabric e Actor Model
Introduzione a Service Fabric e Actor ModelIntroduzione a Service Fabric e Actor Model
Introduzione a Service Fabric e Actor ModelAndrea Tosato
 
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMRealizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMCodemotion
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campusDotNetCampus
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web AppsAndrea Dottor
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP WayLuca Milan
 
ASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroAndrea Dottor
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-maxDotNetCampus
 
Meetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure FunctionsMeetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure Functionsdotnetcode
 
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!DotNetCampus
 
.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il MobilePietro Libro
 

La actualidad más candente (20)

Progettare in Team per il Responsive Web Design
Progettare in Team per il Responsive Web DesignProgettare in Team per il Responsive Web Design
Progettare in Team per il Responsive Web Design
 
Mob01 mobile services e webapi
Mob01   mobile services e webapiMob01   mobile services e webapi
Mob01 mobile services e webapi
 
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
 
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache CordovaMulti-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
 
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
 
Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...
Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...
Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...
 
jQuery
jQueryjQuery
jQuery
 
Microsoft Fast - Overview
Microsoft Fast - OverviewMicrosoft Fast - Overview
Microsoft Fast - Overview
 
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
 
Introduzione a Service Fabric e Actor Model
Introduzione a Service Fabric e Actor ModelIntroduzione a Service Fabric e Actor Model
Introduzione a Service Fabric e Actor Model
 
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMRealizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web Apps
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP Way
 
ASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuro
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-max
 
Meetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure FunctionsMeetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure Functions
 
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
 
Angular and beyond
Angular and beyondAngular and beyond
Angular and beyond
 
.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile
 

Similar a Christmas greetings cards with blazor

7. Applicazioni Web e CMS
7. Applicazioni Web e CMS7. Applicazioni Web e CMS
7. Applicazioni Web e CMSRoberto Polillo
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiAndrea Dottor
 
Le applicazioni web e i CMS (18/19)
Le applicazioni web e i CMS (18/19)Le applicazioni web e i CMS (18/19)
Le applicazioni web e i CMS (18/19)Giuseppe Vizzari
 
5 - Introduzione al Web (2/2) - 16/17
5 - Introduzione al Web (2/2) - 16/175 - Introduzione al Web (2/2) - 16/17
5 - Introduzione al Web (2/2) - 16/17Giuseppe Vizzari
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDaniele Mondello
 
Meetup Progressive Web App
Meetup Progressive Web AppMeetup Progressive Web App
Meetup Progressive Web Appdotnetcode
 
Meetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web AppMeetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web Appdotnetcode
 
05 - Introduzione al Web II
05 - Introduzione al Web II05 - Introduzione al Web II
05 - Introduzione al Web IIGiuseppe Vizzari
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailStefano Ottaviani
 
Blazor with .net 5 - di Gerardo Greco
Blazor with .net 5 - di Gerardo GrecoBlazor with .net 5 - di Gerardo Greco
Blazor with .net 5 - di Gerardo GrecoGiuneco S.r.l
 
Alessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.NetAlessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.NetAlessandro Forte
 
Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailDotNetMarche
 
Creazione componenti con Vue js
Creazione componenti con Vue jsCreazione componenti con Vue js
Creazione componenti con Vue jsGianfranco Castro
 
Developing Adobe AIR desktop applications
Developing Adobe AIR desktop applicationsDeveloping Adobe AIR desktop applications
Developing Adobe AIR desktop applicationsmarcocasario
 
Presentazione Corso - Parte 3
Presentazione Corso - Parte 3Presentazione Corso - Parte 3
Presentazione Corso - Parte 3Giorgio Carpoca
 

Similar a Christmas greetings cards with blazor (20)

07 - Web apps e CMS
07 - Web apps e CMS07 - Web apps e CMS
07 - Web apps e CMS
 
7. Applicazioni Web e CMS
7. Applicazioni Web e CMS7. Applicazioni Web e CMS
7. Applicazioni Web e CMS
 
7 - Web application e CMS
7 - Web application e CMS7 - Web application e CMS
7 - Web application e CMS
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi reali
 
Le applicazioni web e i CMS (18/19)
Le applicazioni web e i CMS (18/19)Le applicazioni web e i CMS (18/19)
Le applicazioni web e i CMS (18/19)
 
8 - Web App e CMS - 16/17
8 - Web App e CMS - 16/178 - Web App e CMS - 16/17
8 - Web App e CMS - 16/17
 
8 - Web app e CMS - 17/18
8 - Web app e CMS - 17/188 - Web app e CMS - 17/18
8 - Web app e CMS - 17/18
 
5 - Introduzione al Web (2/2) - 16/17
5 - Introduzione al Web (2/2) - 16/175 - Introduzione al Web (2/2) - 16/17
5 - Introduzione al Web (2/2) - 16/17
 
Link. javascript ajax
  Link. javascript ajax  Link. javascript ajax
Link. javascript ajax
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele Mondello
 
Meetup Progressive Web App
Meetup Progressive Web AppMeetup Progressive Web App
Meetup Progressive Web App
 
Meetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web AppMeetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web App
 
05 - Introduzione al Web II
05 - Introduzione al Web II05 - Introduzione al Web II
05 - Introduzione al Web II
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRail
 
Blazor with .net 5 - di Gerardo Greco
Blazor with .net 5 - di Gerardo GrecoBlazor with .net 5 - di Gerardo Greco
Blazor with .net 5 - di Gerardo Greco
 
Alessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.NetAlessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.Net
 
Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle Monorail
 
Creazione componenti con Vue js
Creazione componenti con Vue jsCreazione componenti con Vue js
Creazione componenti con Vue js
 
Developing Adobe AIR desktop applications
Developing Adobe AIR desktop applicationsDeveloping Adobe AIR desktop applications
Developing Adobe AIR desktop applications
 
Presentazione Corso - Parte 3
Presentazione Corso - Parte 3Presentazione Corso - Parte 3
Presentazione Corso - Parte 3
 

Más de Nicolò Carandini

The absolute need of Secure Http
The absolute need of Secure HttpThe absolute need of Secure Http
The absolute need of Secure HttpNicolò Carandini
 
Code review e pair programming con Visual Studio Live Share
Code review e pair programming con Visual Studio Live ShareCode review e pair programming con Visual Studio Live Share
Code review e pair programming con Visual Studio Live ShareNicolò Carandini
 
The Hitchhiker's Guide to the Azure Galaxy
The Hitchhiker's Guide to the Azure GalaxyThe Hitchhiker's Guide to the Azure Galaxy
The Hitchhiker's Guide to the Azure GalaxyNicolò Carandini
 
Web app slots and webapi versioning
Web app slots and webapi versioningWeb app slots and webapi versioning
Web app slots and webapi versioningNicolò Carandini
 
Mobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con XamarinMobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con XamarinNicolò Carandini
 
Universal Apps localization and globalization
Universal Apps localization and globalizationUniversal Apps localization and globalization
Universal Apps localization and globalizationNicolò Carandini
 
Applicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e KatanaApplicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e KatanaNicolò Carandini
 
Azure Mobile Services con il .NET Framework
Azure Mobile Services con il .NET FrameworkAzure Mobile Services con il .NET Framework
Azure Mobile Services con il .NET FrameworkNicolò Carandini
 
Sviluppare app per iOS e Android con Xamarin e Visual Studio
Sviluppare app per iOS e Android con Xamarin e Visual StudioSviluppare app per iOS e Android con Xamarin e Visual Studio
Sviluppare app per iOS e Android con Xamarin e Visual StudioNicolò Carandini
 
Web in real time con signalR
Web in real time con signalRWeb in real time con signalR
Web in real time con signalRNicolò Carandini
 

Más de Nicolò Carandini (20)

The absolute need of Secure Http
The absolute need of Secure HttpThe absolute need of Secure Http
The absolute need of Secure Http
 
Xamarin DevOps
Xamarin DevOpsXamarin DevOps
Xamarin DevOps
 
Code review e pair programming con Visual Studio Live Share
Code review e pair programming con Visual Studio Live ShareCode review e pair programming con Visual Studio Live Share
Code review e pair programming con Visual Studio Live Share
 
Azure dev ops meetup one
Azure dev ops meetup oneAzure dev ops meetup one
Azure dev ops meetup one
 
The Hitchhiker's Guide to the Azure Galaxy
The Hitchhiker's Guide to the Azure GalaxyThe Hitchhiker's Guide to the Azure Galaxy
The Hitchhiker's Guide to the Azure Galaxy
 
Game matching with SignalR
Game matching with SignalRGame matching with SignalR
Game matching with SignalR
 
Swagger loves WebAPI
Swagger loves WebAPISwagger loves WebAPI
Swagger loves WebAPI
 
Xamarin Workbooks
Xamarin WorkbooksXamarin Workbooks
Xamarin Workbooks
 
Swagger per tutti
Swagger per tuttiSwagger per tutti
Swagger per tutti
 
Web app slots and webapi versioning
Web app slots and webapi versioningWeb app slots and webapi versioning
Web app slots and webapi versioning
 
Intro xamarin forms
Intro xamarin formsIntro xamarin forms
Intro xamarin forms
 
Swagger pertutti
Swagger pertuttiSwagger pertutti
Swagger pertutti
 
Windows 10 design
Windows 10 designWindows 10 design
Windows 10 design
 
Windows 10 IoT
Windows 10 IoTWindows 10 IoT
Windows 10 IoT
 
Mobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con XamarinMobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con Xamarin
 
Universal Apps localization and globalization
Universal Apps localization and globalizationUniversal Apps localization and globalization
Universal Apps localization and globalization
 
Applicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e KatanaApplicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e Katana
 
Azure Mobile Services con il .NET Framework
Azure Mobile Services con il .NET FrameworkAzure Mobile Services con il .NET Framework
Azure Mobile Services con il .NET Framework
 
Sviluppare app per iOS e Android con Xamarin e Visual Studio
Sviluppare app per iOS e Android con Xamarin e Visual StudioSviluppare app per iOS e Android con Xamarin e Visual Studio
Sviluppare app per iOS e Android con Xamarin e Visual Studio
 
Web in real time con signalR
Web in real time con signalRWeb in real time con signalR
Web in real time con signalR
 

Último

Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 

Último (9)

Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 

Christmas greetings cards with blazor

  • 1. Biglietti d’Auguri Natalizi con Blazor Nicolò Carandini [MVP] @tpcware n.carandini@outlook.com
  • 2. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Agenda WebAssembly alla riscossa ASP.NET Blazor • A cosa serve e come si usa • Demo • Crash course • Demo JavaScript come unico linguaggio Web • Performance e criticità
  • 3. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported JavaScript • Insieme a HTML e CSS, è una delle tre tecnologie principali del World Wide Web. • JavaScript abilita le pagine Web interattive e quindi è una parte essenziale delle applicazioni web. • La stragrande maggioranza dei siti Web lo utilizza e tutti i principali browser Web hanno un motore JavaScript dedicato per eseguirlo. HTML Style Sheets HTML Parser CSS Parser DOM Tree DOM Style Rules Render Layout Render Tree Paint JavaScript JS VM
  • 4. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported JavaScript performance 1995 Javascript viene eseguito nei web browser come linguaggio interpretato. 2008 Google introduce Google Chrome col suo JavaScript engine V8, che utilizza il Just in Time Compiler (JIT). Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
  • 5. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Good, but not enough! L’incremento delle prestazioni di JavaScript è uno degli elementi cardine per la creazione di applicazioni Web complesse. Ma questo non è ancora sufficiente perché: • Rimane forte l’esigenza di poter utilizzare altri linguaggi ed altri framework. • I tempi di parsing del codice JavaScript e di ottimizzazione del codice sono penalizzanti in alcuni scenari di grafica 3D, V/A Reality e più generalmente di calcoli intensivi. • Specialmente nei device mobili non sempre sono disponibili le risorse necessarie all’esecuzione ottimale di JavaScript.
  • 6. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Un’alternativa a JavaScript Prima di HTML5 ci sono stati molti tentativi di creare degli strumenti che si imponessero come standard di fatto per creare applicazioni Web, tutti falliti perché ogni azienda aveva la sua specifica proposta, incompatibile con le altre. Microsoft già dal 1999 parlava di Rich Client App, ma fu Macromedia nel 2002 a coniare il termine RIA – Rich Internet Application.
  • 7. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported La guerra ai plugin Uno dei difetti più noti dei vari metodi per la realizzazione delle RIA consisteva nella necessità di utilizzare i famigerati plugin, che determinavano problemi di: • Compatibilità coi diversi web browser • Consumo risorse • Introduzione bug • Falle di sicurezza (soprattutto con Adobe Flash) L’uso di plugin per l’esecuzione di framework esterni termina nel 2014 con l’avvento di HTML5. www.google.com/googlebooks/chrome
  • 8. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported WebAssembly alla riscossa E’ uno standard W3C sviluppato con il contributo di Mozilla, Apple e Microsoft. Consente l’uso di linguaggi diversi da Javascript per generare codice compatto, portabile ed estremamente veloce. E’ molto recente, visto che la prima versione è di marzo 2017, ma è già supportato da tutti i maggiori browser.
  • 9. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Formato WASM WASM è il formato binario di WebAssembly, che contiene codice di basso livello (molto vicino al linguaggio macchina) che può essere parsato, compilato ed eseguito in modo estremamente veloce in tutti i web browser che lo supportano. S-Expression assembly bytecode
  • 10. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported WASM toolchain Vi sono diversi strumenti per la scrittura e compilazione di codice WASM, anche online, tutti basati sulla LLVM toolchain e il suo linguaggio intermedio IR. ToolchainWebBrowser LLVM Optimizer x86 WASM LLVR IR LLVM x86 Backend LLVM Wasm Backend Clang Frontend Rust Rustc Frontend C / C++ HTML WASM JavaScript JS VM DOM
  • 11. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Utilizzare WASM I moduli WASM vengono caricati tramite JavaScript. Le funzioni marcate con Export sono richiamabili da Javascript. All’interno dei moduli WASM è possibile importare ed utilizzare funzioni Javascript. JavaScriptWASM 1 2 3
  • 12. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Rust Rust è sintatticamente simile a C ++ ma con una migliore sicurezza nella gestione della memoria e della concorrenza, per evitare i classici problemi del C++ by design, mantenendone le prestazioni. Per chi vuole sperimentare: 1. Installare Rust da https://www.rust-lang.org/tools/install 2. Aggiungere il target WASM col comando: >rustup target add wasm32-unknown-unknown 3. Installare le estensioni RUST e WASM in VS Code.
  • 13. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Demo WebAssembly Da C a WAT / WASM da S-EXPR a WASM Uso di WASM e JavaScript in una pagina HTML
  • 14. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Single Page Application Vi sono diversi framework per la realizzazione di applicazioni SPA, come Angular, React, Vue e molti altri, tutti basati su JavaScript. Se solo fosse possibile utilizzare C# e .NET…
  • 15. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported .NET per le Web App Il team di Xamarin ha sviluppato una versione di Mono compilata in WASM. In questo modo è possibile eseguire codice .NET nei Web browser che supportano WebAssembly. Mono runtime | C Library LLVM bitcode C# assemblies clang -target=wasm32 mono -aot=llvmonly Index.wasm Index.js browser mono – wasm (bitcode -> wasm) mono.wasm load, compile + rum main() load metadata (runtime) libc syscalls
  • 16. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported JIT Vs. AOT Mono-wasm può essere eseguito in due modalità: • Interpretato (JIT) • Compilato (AOT) COMPILATOINTERPRETATO Runtime(inBrowser)Devtime C# / Razor source files C# / Razor source files YourApp.dll YourApp.dll netstandard .NET assembly files mono.wasm WebAssembly binary executed natively YourApp.wasm WebAssembly binary executed natively mono.wasm WebAssembly binary executed natively Browser APIs visible DOM, HTTP requests, etc. Browser APIs visible DOM, HTTP requests, etc.
  • 17. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Browser + Razor = Blazor! Utilizza tecnologie web standard come HTML e CSS, ma con C# e la sintassi Razor al posto di JavaScript per creare una Web UI basata su componenti riutilizzabili. Creato da Steven Sanderson autore di Knockout, uno dei primi framework JavaScript per realizzare applicazioni SPA, da febbraio 2018 è stato inserito (come esperimento) in ASP.NET.
  • 18. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Blazor Workshop Setup iniziale: • .NET Core  2.1 • Visual Studio 2017 (dalla versione 15.7 in poi) • Blazor Language Services extension dal Visual Studio Marketplace
  • 19. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Demo: Blazor Hello World
  • 20. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Web UI basata su componenti Un componente rappresenta un elemento della UI, come una pagina, un dialog, un tabset, o un data entry form. In Blazor, un componente è una classe .NET, che può essere scritta a mano (un file .cs) o più comunemente tramite una pagina di markup Razor (un file .cshtml). I componenti possono essere nidificati, riutilizzati e condivisi tra progetti.
  • 21. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported BlazorComponent class La UI del componente è definita tramite HTML. La logica di rendering dinamico viene aggiunta con la sintassi C# di Razor. Quando un’applicazione Blazor viene compilata, il tutto viene convertito in una classe C# di tipo BlazorComponent. Il nome della classe generata corrisponde al nome del file .cshtml.
  • 22. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Component members Le proprietà e i metodi della classe sono definiti all’interno di uno o più blocchi @functions. Le proprietà possono essere referenziate utilizzando nomi C# che iniziano con @.
  • 23. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Component composition Un componente può essere utilizzato all’interno di altri componenti come un qualsiasi elemento HTML. Ad esempio, per usare un componente di nome AppFooter, basterà inserire <AppFooter /> nel codice HTML. AppFooter.cshtml Index.cshtml
  • 24. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Component parameters I componenti possono avere dei parametri definiti utilizzando proprietà private della classe decorate con l’attributo [Parameter]. Tali parametri vengono valorizzati con attributi di markup in HTML. E’ anche possibile definire un parametro di tipo RederFragment che viene valorizzato con il contenuto dell’elemento di markup. AppFooter.cshtml Index.cshtml
  • 25. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Binding Il data binding tra componenti ed elementi DOM viene definito mediante l’attributo bind. La UI viene aggiornata solo quando viene fatto il rendering del componente, non quando la proprietà cambia valore. binding
  • 26. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Event handling Ogni attributo di elemento HTML di nome on<event> (onclick, onsubmit) il cui valore è di tipo delegate, è utilizzato da Blazor come un event handler. Per alcuni eventi sono disponibili gli event arguments (UIEventArgs,…) E’ possibile utilizzare anche le espressioni lambda.
  • 27. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Demo: Blazor Xmas Cards
  • 28. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Caratteristiche di Blazor • Un component model per costruire una Web UI basata su componenti • Routing • Layouts • Forms and validazione • Dependency injection • JavaScript interop • Live reloading nel browser durante lo sviluppo • Server-side rendering • .NET debugging sia nel browser che nell’IDE • Pieno supporto a IntelliSense e ai tool di sviluppo • Capacità di girare su vecchi browser via asm.js • Publishing e minimizzazione del codice eseguibile
  • 29. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Riferimenti Documentazione ufficiale blazor.net Sito GitHub github.com/aspnet/Blazor Gitter channel gitter.im/aspnet/Blazor Blazor: a technical introduction blog.stevensanderson.com/2018/02/06/blazor-intro Experimenting with Blazor blog.tpcware.com/2018/03/experimenting-with-blazor
  • 30. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Grazie per la vostra attenzione  Nicolò Carandini n.carandini@outlook.com @TPCWare

Notas del editor

  1. Annunciato a giugno 2015, la specifica del Minimum Viable Product è di marzo 2017, e nel mese di febbraio di quest’anno il gruppo di lavoro WebAssembly ha pubblicato tre bozze di lavoro per le specifiche di base, l'interfaccia Javascript e le API Web.
  2. Intermediate Representation (IR) LLVR non è un acronimo, è proprio il nome del progetto "LLVM Compiler Infrastructure"
  3. Intermediate Representation (IR) LLVR non è un acronimo, è proprio il nome del progetto "LLVM Compiler Infrastructure"