際際滷

際際滷Share a Scribd company logo
Sviluppo web
ReactJS e ExtJS a confronto
speaker: marco breveglieri
marco
breveglieri
developer
www.compilaquindiva.com
AGENDA
 Le applicazioni Web
 Il linguaggio JavaScript
 Introduzione alle SPA
 La libreria ReactJS
 Dietro le quinte di React
 Backend in Delphi
le applicazioni
Web
Soluzioni per applicazioni Web a
confronto
Applicazioni Web?
NO!
WEB SERVER FAT APP
Soluzioni basate su
 IntraWeb
 ASP.NET Web Forms
sono applicazioni Web (Server) Fat
e non sono pi湛 una buona idea.
WEB SERVER FAT APP
PREGI
 Mascherano la piattaforma (HTTP)
 Facili per sviluppatori abituati al desktop
 Favoriscono lo sviluppo rapido (RAD)
 Sono ideali per la prototipazione
WEB SERVER FAT APP
DIFETTI
 Mascherano la piattaforma (HTTP)
 Stato della pagina ingombrante
 Consumo banda, memoria e CPU server
 Scalabilit generale ridotta
 Separazione task designer/developer improbabile
 Unit/Integration Test ardui
Applicazioni Web
moderne?
Si basano su standard del Web
 HTML(5)
 CSS(3)
 JavaScript
Linguaggi standard:
sono difficili?
Il linguaggio
JavaScript
Introduzione a JavaScript e al DOM
Allinizio era...
OGGI E....
In evoluzione
Il linguaggio JavaScript vive oggi una
seconda giovinezza.
 Supporto esteso da parte dei browser
 Nuovi standard (es. ES6) in arrivo
 Output di linguaggi pi湛 evoluti come
TypeScript, CoffeeScript e tanti altri
NUOVE API html5
 Canvas / SVG
 WebGL
 File API
 Indexed DB
 Media API
 OFFline
 Web Sockets
 Web Workers
 Web Storage
 Geo-location API
 Fullscreen support
 ...e il sempre caro
DOM
Il DOM
Il DOM (Document Object Model)
  un modello a oggetti
  formato da una gerarchia di nodi
 Rappresenta gli elementi della pagina
Web
 Fornisce funzionalit per modificare gli
elementi, modificarli, eliminarli o crearne
di nuovi
demo time
JQUERY: un passo in +
JQuery 竪 una libreria che
 Semplifica laccesso al DOM
 Riutilizza le espressioni CSS
 Fornisce feature aggiuntive e uniformi
 Gestisce le incompatibilit tra i browser
...tuttavia, non 竪 ancora abbastanza.
demo time
Introduzione
alle SPA
Single Page Application
SPA
SPA (Single Page Application)
 Applicazione Web in una sola pagina
 Mima le caratteristiche delle app desktop
 Esperienza utente pi湛 fluida
 Non ricarica la pagina nel browser
 Linterfaccia utente si aggiorna dinamicamente a
seguito di unazione
 Trasferimento ottimizzato di dati e risorse
Per rendere lidea
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Single Page Application</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div id="container">
<!-- Qui viene generata lapplicazione -->
</div>
<script src=/marcobreveglieri/sviluppo-web-con-react-e-delphi-seminario-delphi-day-2016-piacenza/"framework.js"></script>
</body>
</html>
Librerie e framework
Lets REACT!
ReactJS
La libreria ReactJS di Facebook
ReactJS
 Libreria JavaScript per le interfacce utente
 Creata da Facebook (anche per Instagram)
 Nel modello MVC gestisce solo la View
 Celebre per le sue elevate prestazioni
 Basato su componenti, propriet e stato
 Approccio dichiarativo (*) (*) usando JSX
https://facebook.github.io/react/
Facebook Case Study
Facebook Case Study
15.000+ componenti!
Componenti
 Incapsulati
 Riusabili
 Componibili
 Facili da disegnare *
(*) almeno in React
ReactJS vs...
JQuery
 Programmazione
imperativa
 Necessit di attribuire
ID agli elementi
 Tendenza event
driven
 Rischio concreto di
zuppa-code
AngularJS (ver. 1.x)
 Oscillante curva di
apprendimento (ma
framework completo)
 Separation of
Responsibility (invece
di ...of Concerns)
 Proliferazione di
scope e direttive
Editor e tool
 Notepad++
 Sublime Text
 Atom.IO
 Brackets
 Visual Studio Code
 JetBrains
WebStorm
 Visual Studio
Professional
...con vari plugin
demo time
La sintassi JSX
 Facilita la scrittura di template HTML
 Sostituisce chiamate a funzioni React
 Richiede la presenza di un compilatore
(detto transpiler)
 Definisce gli elementi del Virtual DOM *
(*) ne parleremo a breve
Propriet e stato
Propriet
 Definiscono valori
immutabili del
componente
 Utili per
inizializzazione
 Si leggono da this.
props
Stato
 Definisce valori dello
stato attuale del
componente
 Si modifica per
aggiornare linterfaccia
 Si leggono i valori da
this.state
demo time
Dietro le
quinte
Il Virtual DOM e oltre
I limiti del DOM
 Non 竪 possibile modificare il codice
 E una black box fornita dal browser
 Non si pu嘆 ottimizzare in prestazioni
 Non si pu嘆 specializzare in base alluso
 Impone uno stile imperativo di codifica
 Produce codice meno manutenibile
 Rappresenta un collo di bottiglia
Il Virtual DOM
 Rappresentazione virtuale della struttura
della pagina in memoria
 Riproduce il DOM reale della pagina Web
 Viene usato da React per applicare le
modifiche agli elementi della pagina
 Attraverso lanalisi delle differenze con il
DOM reale, aggiorna la pagina
...nel modo pi湛 veloce possibile! ≠≠
Gli elementi del VDOM
 ReactNode
rappresenta un singolo nodo del VDOM
 ReactElement: rappresenta un elemento HTML
 ReactText: rappresenta una porzione di testo
 ReactFragment
 ReactNode[ ]: 竪 un array di nodi del Virtual DOM
Creare elementi
I parametri della funzione createElement()
ReactElement createElement(
string/ReactClass type,
[object props],
[children ...]
)
demo time
Component lifecycle
Le funzioni principali del ciclo di vita di un componente:
 render()
 getInitialState()
 componentWillMount()
 componentDidMount()
 componentWillUnmount()
...e altri meno utilizzati.
demo time
Assemblare il tutto
Ricetta per combinare gli elementi visti sino ad ora:
 Creare la pagina di struttura della SPA
 Importare i framework preferiti (incluso React!)
 Creare script separati per i componenti
 Richiamare la funzione ReactDOM.render()
Vediamo ulteriori esempi!
demo time
Backend
Comunicare con il server
E Delphi?
 Ottimo per la creazione di un backend
 Diverse librerie disponibili per creare API
 DataSnap / EMS
 DelphiMVCFramework / MARS
 Indy Components
 Versatile nel collegamento a qualsiasi DB
 Si pu嘆 invocare dallapplicazione React *
(*) con la libreria che si preferisce per il colloquio con endpoint HTTP/REST
demo time
Altro?
 Integrazione con altri framework
 Flux, Redux, ...
 Altre implementazioni?
 React Native
 Possibilit ed estensioni?
 Rendering sul server (con NodeJS)
 Migliorare il codice?
 Uso del transpiler Babel, pre-compiling server
Q & A
Dubbi, richieste, domande?
marco
breveglieri
developer
www.compilaquindiva.com
Delphi Succinctly: e-book di 100 pagine in lingua
inglese, scaricabile gratuitamente da Syncfusion Inc.
marco
breveglieri
developer
www.compilaquindiva.com
Delphi Podcast - www.delphipodcast.com
Il primo podcast italiano dedicato a Delphi.
marco
breveglieri
developer
www.compilaquindiva.com
@ComponentTales - https://twitter.com/ComponentTales
Scopri cosa fanno i componenti quando chiudi lIDE.
grazie a tutti!

More Related Content

What's hot (20)

AngularJS 2.0
AngularJS 2.0 AngularJS 2.0
AngularJS 2.0
Vittorio Conte
Angularjs
AngularjsAngularjs
Angularjs
Francesco Portus
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
Corso WebApp iOS - Lezione 06:   Web Development for iOS DevicesCorso WebApp iOS - Lezione 06:   Web Development for iOS Devices
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
Andrea Picchi
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRail
Stefano Ottaviani
Blazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormBlazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web Form
Andrea Dottor
Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!
Massimo Bonanni
Introduzione a Ruby On Rails
Introduzione a Ruby On RailsIntroduzione a Ruby On Rails
Introduzione a Ruby On Rails
Luca Mearelli
Generazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NETGenerazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NET
Stefano Ottaviani
Cosa c'e di nuovo in asp.net core 2 0
Cosa c'e di nuovo in asp.net core 2 0Cosa c'e di nuovo in asp.net core 2 0
Cosa c'e di nuovo in asp.net core 2 0
Andrea Dottor
Data binding libera tutti!
Data binding libera tutti!Data binding libera tutti!
Data binding libera tutti!
Salvatore Laisa
Fe04 angular js-101
Fe04   angular js-101Fe04   angular js-101
Fe04 angular js-101
DotNetCampus
Selenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio BenedettiSelenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio Benedetti
Giuneco S.r.l
Powerful asp.net 4 e ie9
Powerful asp.net 4 e ie9Powerful asp.net 4 e ie9
Powerful asp.net 4 e ie9
Stefano Benedetti
Novit in Visual Studio 2012
Novit in Visual Studio 2012Novit in Visual Studio 2012
Novit in Visual Studio 2012
Sinergia Totale
Sviluppo applicazioni in Ruby on Rails
Sviluppo applicazioni in Ruby on RailsSviluppo applicazioni in Ruby on Rails
Sviluppo applicazioni in Ruby on Rails
NERDYDOG Web Agency
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
Giuneco S.r.l
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Giovanni Buffa
Utilizzare Windows Vista come Software Developer
Utilizzare Windows Vista come Software DeveloperUtilizzare Windows Vista come Software Developer
Utilizzare Windows Vista come Software Developer
Stefano Ottaviani
ReactJS for beginners
ReactJS for beginnersReactJS for beginners
ReactJS for beginners
Ilaria Franchini
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
Corso WebApp iOS - Lezione 06:   Web Development for iOS DevicesCorso WebApp iOS - Lezione 06:   Web Development for iOS Devices
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
Andrea Picchi
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRail
Stefano Ottaviani
Blazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormBlazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web Form
Andrea Dottor
Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!
Massimo Bonanni
Introduzione a Ruby On Rails
Introduzione a Ruby On RailsIntroduzione a Ruby On Rails
Introduzione a Ruby On Rails
Luca Mearelli
Generazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NETGenerazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NET
Stefano Ottaviani
Cosa c'e di nuovo in asp.net core 2 0
Cosa c'e di nuovo in asp.net core 2 0Cosa c'e di nuovo in asp.net core 2 0
Cosa c'e di nuovo in asp.net core 2 0
Andrea Dottor
Data binding libera tutti!
Data binding libera tutti!Data binding libera tutti!
Data binding libera tutti!
Salvatore Laisa
Fe04 angular js-101
Fe04   angular js-101Fe04   angular js-101
Fe04 angular js-101
DotNetCampus
Selenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio BenedettiSelenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio Benedetti
Giuneco S.r.l
Novit in Visual Studio 2012
Novit in Visual Studio 2012Novit in Visual Studio 2012
Novit in Visual Studio 2012
Sinergia Totale
Sviluppo applicazioni in Ruby on Rails
Sviluppo applicazioni in Ruby on RailsSviluppo applicazioni in Ruby on Rails
Sviluppo applicazioni in Ruby on Rails
NERDYDOG Web Agency
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
Giuneco S.r.l
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Giovanni Buffa
Utilizzare Windows Vista come Software Developer
Utilizzare Windows Vista come Software DeveloperUtilizzare Windows Vista come Software Developer
Utilizzare Windows Vista come Software Developer
Stefano Ottaviani

Similar to Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza (20)

Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012
Crismer La Pignola
Presentazione tirocinio
Presentazione tirocinio Presentazione tirocinio
Presentazione tirocinio
Claudio Mignanti
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTML
Sinergia Totale
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?
Andrea Agnoletto
Introduzione a React Native - Alessandro Giannini
Introduzione a React Native - Alessandro GianniniIntroduzione a React Native - Alessandro Giannini
Introduzione a React Native - Alessandro Giannini
Develer S.R.L.
Javascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesignerJavascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesigner
Matteo Magni
Novit di Asp.Net 4.0
Novit di Asp.Net 4.0Novit di Asp.Net 4.0
Novit di Asp.Net 4.0
Gian Maria Ricci
Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010
Fabrizio Bernabei
Linuxday2013
Linuxday2013 Linuxday2013
Linuxday2013
Mariano Fiorentino
I linguaggi del web - seconda edizione (3属 giornata)
I linguaggi del web - seconda edizione (3属 giornata)I linguaggi del web - seconda edizione (3属 giornata)
I linguaggi del web - seconda edizione (3属 giornata)
Diego La Monica
Mobile UI Design
Mobile UI DesignMobile UI Design
Mobile UI Design
Simone Viani
Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle Monorail
DotNetMarche
Applicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore RomeoApplicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore Romeo
marcocasario
DDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continuaDDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continua
Dominopoint - Italian Lotus User Group
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
Claudio Gandelli
Javascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesignerJavascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesigner
Matteo Magni
Rich Internet Application
Rich Internet ApplicationRich Internet Application
Rich Internet Application
Marcello Teodori
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applications
DotNetCampus
Web dynpro for abap 02
Web dynpro for abap 02Web dynpro for abap 02
Web dynpro for abap 02
Piergiorgio Boss湛
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012
Crismer La Pignola
Presentazione tirocinio
Presentazione tirocinio Presentazione tirocinio
Presentazione tirocinio
Claudio Mignanti
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTML
Sinergia Totale
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?
Andrea Agnoletto
Introduzione a React Native - Alessandro Giannini
Introduzione a React Native - Alessandro GianniniIntroduzione a React Native - Alessandro Giannini
Introduzione a React Native - Alessandro Giannini
Develer S.R.L.
Javascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesignerJavascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesigner
Matteo Magni
Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010
Fabrizio Bernabei
I linguaggi del web - seconda edizione (3属 giornata)
I linguaggi del web - seconda edizione (3属 giornata)I linguaggi del web - seconda edizione (3属 giornata)
I linguaggi del web - seconda edizione (3属 giornata)
Diego La Monica
Mobile UI Design
Mobile UI DesignMobile UI Design
Mobile UI Design
Simone Viani
Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle Monorail
DotNetMarche
Applicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore RomeoApplicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore Romeo
marcocasario
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
Claudio Gandelli
Javascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesignerJavascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesigner
Matteo Magni
Rich Internet Application
Rich Internet ApplicationRich Internet Application
Rich Internet Application
Marcello Teodori
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applications
DotNetCampus

More from Marco Breveglieri (7)

Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con DelphiDelphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Marco Breveglieri
Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...
Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...
Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...
Marco Breveglieri
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
Marco Breveglieri
Create a Bot with Delphi and Telegram - ITDevCon 2016
Create a Bot with Delphi and Telegram - ITDevCon 2016Create a Bot with Delphi and Telegram - ITDevCon 2016
Create a Bot with Delphi and Telegram - ITDevCon 2016
Marco Breveglieri
Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016
Marco Breveglieri
Reportage Delphi Day 2012
Reportage Delphi Day 2012Reportage Delphi Day 2012
Reportage Delphi Day 2012
Marco Breveglieri
Reportage "RAD Studio XE2 World Tour"
Reportage "RAD Studio XE2 World Tour"Reportage "RAD Studio XE2 World Tour"
Reportage "RAD Studio XE2 World Tour"
Marco Breveglieri
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con DelphiDelphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Marco Breveglieri
Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...
Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...
Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...
Marco Breveglieri
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
Marco Breveglieri
Create a Bot with Delphi and Telegram - ITDevCon 2016
Create a Bot with Delphi and Telegram - ITDevCon 2016Create a Bot with Delphi and Telegram - ITDevCon 2016
Create a Bot with Delphi and Telegram - ITDevCon 2016
Marco Breveglieri
Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016
Marco Breveglieri
Reportage Delphi Day 2012
Reportage Delphi Day 2012Reportage Delphi Day 2012
Reportage Delphi Day 2012
Marco Breveglieri
Reportage "RAD Studio XE2 World Tour"
Reportage "RAD Studio XE2 World Tour"Reportage "RAD Studio XE2 World Tour"
Reportage "RAD Studio XE2 World Tour"
Marco Breveglieri

Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza

  • 1. Sviluppo web ReactJS e ExtJS a confronto speaker: marco breveglieri
  • 3. AGENDA Le applicazioni Web Il linguaggio JavaScript Introduzione alle SPA La libreria ReactJS Dietro le quinte di React Backend in Delphi
  • 4. le applicazioni Web Soluzioni per applicazioni Web a confronto
  • 6. WEB SERVER FAT APP Soluzioni basate su IntraWeb ASP.NET Web Forms sono applicazioni Web (Server) Fat e non sono pi湛 una buona idea.
  • 7. WEB SERVER FAT APP PREGI Mascherano la piattaforma (HTTP) Facili per sviluppatori abituati al desktop Favoriscono lo sviluppo rapido (RAD) Sono ideali per la prototipazione
  • 8. WEB SERVER FAT APP DIFETTI Mascherano la piattaforma (HTTP) Stato della pagina ingombrante Consumo banda, memoria e CPU server Scalabilit generale ridotta Separazione task designer/developer improbabile Unit/Integration Test ardui
  • 9. Applicazioni Web moderne? Si basano su standard del Web HTML(5) CSS(3) JavaScript
  • 14. In evoluzione Il linguaggio JavaScript vive oggi una seconda giovinezza. Supporto esteso da parte dei browser Nuovi standard (es. ES6) in arrivo Output di linguaggi pi湛 evoluti come TypeScript, CoffeeScript e tanti altri
  • 15. NUOVE API html5 Canvas / SVG WebGL File API Indexed DB Media API OFFline Web Sockets Web Workers Web Storage Geo-location API Fullscreen support ...e il sempre caro DOM
  • 16. Il DOM Il DOM (Document Object Model) un modello a oggetti formato da una gerarchia di nodi Rappresenta gli elementi della pagina Web Fornisce funzionalit per modificare gli elementi, modificarli, eliminarli o crearne di nuovi
  • 18. JQUERY: un passo in + JQuery 竪 una libreria che Semplifica laccesso al DOM Riutilizza le espressioni CSS Fornisce feature aggiuntive e uniformi Gestisce le incompatibilit tra i browser ...tuttavia, non 竪 ancora abbastanza.
  • 21. SPA SPA (Single Page Application) Applicazione Web in una sola pagina Mima le caratteristiche delle app desktop Esperienza utente pi湛 fluida Non ricarica la pagina nel browser Linterfaccia utente si aggiorna dinamicamente a seguito di unazione Trasferimento ottimizzato di dati e risorse
  • 22. Per rendere lidea <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Single Page Application</title> <link rel="stylesheet" href="style.css" /> </head> <body> <div id="container"> <!-- Qui viene generata lapplicazione --> </div> <script src=/marcobreveglieri/sviluppo-web-con-react-e-delphi-seminario-delphi-day-2016-piacenza/"framework.js"></script> </body> </html>
  • 26. ReactJS Libreria JavaScript per le interfacce utente Creata da Facebook (anche per Instagram) Nel modello MVC gestisce solo la View Celebre per le sue elevate prestazioni Basato su componenti, propriet e stato Approccio dichiarativo (*) (*) usando JSX https://facebook.github.io/react/
  • 29. Componenti Incapsulati Riusabili Componibili Facili da disegnare * (*) almeno in React
  • 30. ReactJS vs... JQuery Programmazione imperativa Necessit di attribuire ID agli elementi Tendenza event driven Rischio concreto di zuppa-code AngularJS (ver. 1.x) Oscillante curva di apprendimento (ma framework completo) Separation of Responsibility (invece di ...of Concerns) Proliferazione di scope e direttive
  • 31. Editor e tool Notepad++ Sublime Text Atom.IO Brackets Visual Studio Code JetBrains WebStorm Visual Studio Professional ...con vari plugin
  • 33. La sintassi JSX Facilita la scrittura di template HTML Sostituisce chiamate a funzioni React Richiede la presenza di un compilatore (detto transpiler) Definisce gli elementi del Virtual DOM * (*) ne parleremo a breve
  • 34. Propriet e stato Propriet Definiscono valori immutabili del componente Utili per inizializzazione Si leggono da this. props Stato Definisce valori dello stato attuale del componente Si modifica per aggiornare linterfaccia Si leggono i valori da this.state
  • 37. I limiti del DOM Non 竪 possibile modificare il codice E una black box fornita dal browser Non si pu嘆 ottimizzare in prestazioni Non si pu嘆 specializzare in base alluso Impone uno stile imperativo di codifica Produce codice meno manutenibile Rappresenta un collo di bottiglia
  • 38. Il Virtual DOM Rappresentazione virtuale della struttura della pagina in memoria Riproduce il DOM reale della pagina Web Viene usato da React per applicare le modifiche agli elementi della pagina Attraverso lanalisi delle differenze con il DOM reale, aggiorna la pagina ...nel modo pi湛 veloce possibile! ≠≠
  • 39. Gli elementi del VDOM ReactNode rappresenta un singolo nodo del VDOM ReactElement: rappresenta un elemento HTML ReactText: rappresenta una porzione di testo ReactFragment ReactNode[ ]: 竪 un array di nodi del Virtual DOM
  • 40. Creare elementi I parametri della funzione createElement() ReactElement createElement( string/ReactClass type, [object props], [children ...] )
  • 42. Component lifecycle Le funzioni principali del ciclo di vita di un componente: render() getInitialState() componentWillMount() componentDidMount() componentWillUnmount() ...e altri meno utilizzati.
  • 44. Assemblare il tutto Ricetta per combinare gli elementi visti sino ad ora: Creare la pagina di struttura della SPA Importare i framework preferiti (incluso React!) Creare script separati per i componenti Richiamare la funzione ReactDOM.render() Vediamo ulteriori esempi!
  • 47. E Delphi? Ottimo per la creazione di un backend Diverse librerie disponibili per creare API DataSnap / EMS DelphiMVCFramework / MARS Indy Components Versatile nel collegamento a qualsiasi DB Si pu嘆 invocare dallapplicazione React * (*) con la libreria che si preferisce per il colloquio con endpoint HTTP/REST
  • 49. Altro? Integrazione con altri framework Flux, Redux, ... Altre implementazioni? React Native Possibilit ed estensioni? Rendering sul server (con NodeJS) Migliorare il codice? Uso del transpiler Babel, pre-compiling server
  • 50. Q & A Dubbi, richieste, domande?
  • 51. marco breveglieri developer www.compilaquindiva.com Delphi Succinctly: e-book di 100 pagine in lingua inglese, scaricabile gratuitamente da Syncfusion Inc.
  • 52. marco breveglieri developer www.compilaquindiva.com Delphi Podcast - www.delphipodcast.com Il primo podcast italiano dedicato a Delphi.